Determined AI 教程:如何查看基于周期的训练指标
概述
在机器学习训练过程中,基于周期(Epoch)的指标监控对于理解模型的学习进度至关重要。Determined AI 提供了强大的工具来跟踪、可视化和分析这些指标。本教程将详细介绍如何在 Determined 平台中配置、报告和查看基于周期的训练指标。
为什么需要基于周期的指标监控?
环境准备
安装 Determined
# 安装 Determined 库
pip install determined
# 启动本地集群(有 GPU)
det deploy local cluster-up
# 启动本地集群(无 GPU)
det deploy local cluster-up --no-gpu
项目结构
mnist_tutorial/
├── model_def.py # 模型定义文件
├── metrics.yaml # 实验配置文件
├── data.py # 数据加载器
└── requirements.txt # 依赖文件
配置基于周期的指标报告
实验配置文件 (metrics.yaml)
name: mnist_epoch_metrics
hyperparameters:
global_batch_size: 64
learning_rate: 1.0
searcher:
name: single
metric: validation_loss
smaller_is_better: true
max_length:
batches: 1000
entrypoint: model_def:main
environment:
image: determinedai/pytorch:latest
resources:
slots_per_trial: 1
修改模型代码报告周期指标
在您的模型训练代码中,需要添加周期指标的报告逻辑:
import determined as det
def train_epoch(model, train_loader, optimizer, epoch_idx, core_context):
model.train()
for batch_idx, (data, target) in enumerate(train_loader):
# 训练逻辑...
loss = compute_loss(data, target)
# 报告训练指标(包含周期信息)
batches_completed = batch_idx + 1
partial_epoch = batches_completed / len(train_loader)
core_context.train.report_training_metrics(
steps_completed=batches_completed + epoch_idx * len(train_loader),
metrics={
"train_loss": loss.item(),
"epochs": epoch_idx + partial_epoch, # 关键:报告周期指标
"accuracy": compute_accuracy(output, target)
}
)
def validate_epoch(model, test_loader, epoch_idx, core_context):
model.eval()
test_loss = 0
correct = 0
with torch.no_grad():
for data, target in test_loader:
# 验证逻辑...
output = model(data)
test_loss += F.nll_loss(output, target, reduction="sum").item()
pred = output.argmax(dim=1, keepdim=True)
correct += pred.eq(target.view_as(pred)).sum().item()
test_loss /= len(test_loader.dataset)
accuracy = 100.0 * correct / len(test_loader.dataset)
# 报告验证指标(包含完整周期信息)
core_context.train.report_validation_metrics(
steps_completed=(epoch_idx + 1) * len(train_loader),
metrics={
"validation_loss": test_loss,
"validation_accuracy": accuracy,
"epochs": epoch_idx + 1 # 关键:报告完整周期
}
)
运行实验并查看指标
启动实验
# 创建并运行实验
det experiment create metrics.yaml .
# 实时跟踪实验进度
det experiment create metrics.yaml . -f
WebUI 中的指标查看
在 Determined WebUI 中,您可以按以下步骤查看基于周期的指标:
- 访问实验页面:打开
http://localhost:8080并登录 - 选择实验:点击您运行的实验ID
- 指标选项卡:导航到 "Metrics" 标签页
- X轴选择:在 X-Axis 下拉菜单中选择 "Epochs"
指标可视化与分析
训练损失曲线
| 周期 | 训练损失 | 验证损失 | 验证准确率 | 学习率 |
|---|---|---|---|---|
| 1 | 0.512 | 0.298 | 91.2% | 0.01 |
| 2 | 0.256 | 0.195 | 94.3% | 0.01 |
| 3 | 0.183 | 0.152 | 95.8% | 0.01 |
| 4 | 0.142 | 0.128 | 96.5% | 0.001 |
| 5 | 0.118 | 0.115 | 97.1% | 0.001 |
关键指标解读
# 示例:分析指标趋势
def analyze_metrics(training_metrics, validation_metrics):
"""
分析训练指标趋势
"""
trends = {
'training_loss_decreasing': all(training_metrics[i] > training_metrics[i+1]
for i in range(len(training_metrics)-1)),
'validation_improving': all(validation_metrics[i] < validation_metrics[i+1]
for i in range(len(validation_metrics)-1)),
'overfitting_detected': check_overfitting(training_metrics, validation_metrics)
}
return trends
高级周期指标功能
自定义指标分组
# 在配置文件中定义自定义指标组
metric_groups:
- name: training_metrics
metrics: ["train_loss", "train_accuracy"]
- name: validation_metrics
metrics: ["validation_loss", "validation_accuracy"]
- name: epoch_based
metrics: ["epochs", "learning_rate"]
多实验对比
使用周期指标可以轻松比较不同实验的表现:
故障排除与最佳实践
常见问题解决
| 问题 | 症状 | 解决方案 |
|---|---|---|
| 指标不显示 | WebUI 中看不到周期指标 | 确保在 metrics 中包含 "epochs" 字段 |
| 周期计数错误 | 周期编号不正确 | 检查 steps_completed 计算逻辑 |
| 性能问题 | 指标报告导致训练变慢 | 调整 log_interval 参数 |
最佳实践
- 一致的周期报告:确保每个训练和验证步骤都报告周期指标
- 合理的报告频率:避免过于频繁的报告影响性能
- 清晰的指标命名:使用有意义的指标名称便于识别
- 版本控制:为不同实验版本添加标签便于比较
总结
通过本教程,您学会了如何在 Determined AI 平台中:
- ✅ 配置基于周期的指标报告系统
- ✅ 修改模型代码以包含周期指标
- ✅ 在 WebUI 中查看和分析周期指标
- ✅ 使用周期指标进行模型性能分析
- ✅ 实施最佳实践确保指标准确性
基于周期的指标监控为您提供了深入了解模型训练过程的窗口,帮助您做出更明智的超参数调整和模型选择决策。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



