name: ml-experiment-tracker description: 使用MLflow、Weights & Biases和DVC等工具,指导ML实验日志记录、版本控制和可重现性,用于系统化模型开发。 license: MIT
ML实验跟踪器
这个技能提供系统化机器学习实验的指导,包括适当的跟踪、版本控制和可重现性实践。
核心能力
- 实验跟踪: MLflow、Weights & Biases (wandb)、Neptune、Comet
- 数据版本控制: DVC、Delta Lake、LakeFS
- 模型注册表: 训练模型的版本控制
- 可重现性: 环境、代码、数据和超参数跟踪
实验跟踪基础
需要跟踪的内容
每个实验都应记录:
| 类别 | 项目 | 原因 |
|---|---|---|
| 代码 | Git提交哈希、分支、差异 | 重现确切的代码状态 |
| 数据 | 数据集版本、哈希、谱系 | 知道使用了哪些数据 |
| 环境 | Python版本、依赖项、硬件 | 重现运行时 |
| 超参数 | 所有配置值 | 理解变化内容 |
| 指标 | 损失、准确度、自定义指标 | 比较性能 |
| 产物 | 模型、图表、预测 | 保存输出 |
实验组织
project/
├── experiments/
│ ├── baseline/ # 初始实验
│ ├── feature-engineering/ # 数据改进
│ ├── architecture/ # 模型更改
│ └── hyperparameter/ # 调优运行
├── data/
│ ├── raw/ # 原始数据(版本控制)
│ ├── processed/ # 清洗后数据
│ └── features/ # 特征存储
└── models/
├── staging/ # 候选模型
└── production/ # 部署模型
MLflow模式
基础实验日志记录
import mlflow
# 设置实验(如果不存在则创建)
mlflow.set_experiment("my-classification-project")
with mlflow.start_run(run_name="baseline-v1"):
# 记录参数
mlflow.log_param("learning_rate", 0.01)
mlflow.log_param("batch_size", 32)
mlflow.log_param("epochs", 100)
# 训练循环
for epoch in range(epochs):
train_loss = train_epoch(model, train_loader)
val_loss, val_acc = evaluate(model, val_loader)
# 带步骤记录指标
mlflow.log_metrics({
"train_loss": train_loss,
"val_loss": val_loss,
"val_accuracy": val_acc
}, step=epoch)
# 记录模型
mlflow.pytorch.log_model(model, "model")
# 记录产物(图表、配置)
mlflow.log_artifact("confusion_matrix.png")
mlflow.log_artifact("config.yaml")
模型注册表工作流
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 训练运行 │───▶│ 暂存审查 │───▶│ 生产部署 │
│ 候选模型 │ │ 已验证模型 │ │ 监控模型 │
└──────────────┘ └──────────────┘ └──────────────┘
阶段:
- 无: 仅记录,未注册
- 暂存: 生产候选模型
- 生产: 活跃服务模型
- 归档: 历史参考模型
Weights & Biases模式
项目结构
import wandb
# 使用配置初始化
config = {
"learning_rate": 0.01,
"architecture": "ResNet50",
"dataset": "imagenet-subset",
"epochs": 100
}
run = wandb.init(
project="image-classification",
group="architecture-experiments", # 分组相关运行
tags=["baseline", "resnet"],
config=config,
notes="测试ResNet50基线在子集上"
)
# 带自动日志记录的训练
for epoch in range(config["epochs"]):
metrics = train_and_eval(model, train_loader, val_loader)
wandb.log(metrics)
# 记录媒体
wandb.log({"predictions": wandb.Image(pred_grid)})
wandb.log({"confusion_matrix": wandb.plot.confusion_matrix(...)})
wandb.finish()
超参数扫描
# sweep_config.yaml
program: train.py
method: bayes # 或grid、random
metric:
name: val_accuracy
goal: maximize
parameters:
learning_rate:
distribution: log_uniform_values
min: 0.0001
max: 0.1
batch_size:
values: [16, 32, 64, 128]
optimizer:
values: ["adam", "sgd", "adamw"]
early_terminate:
type: hyperband
min_iter: 10
DVC用于数据版本控制
设置和使用
# 在git仓库中初始化DVC
dvc init
# 跟踪大文件
dvc add data/training.csv
git add data/training.csv.dvc data/.gitignore
git commit -m "添加训练数据v1"
# 推送到远程存储
dvc remote add -d storage s3://bucket/dvc
dvc push
# 创建管道
dvc run -n preprocess \
-d src/preprocess.py -d data/raw \
-o data/processed \
python src/preprocess.py
# 重现管道
dvc repro
DVC管道定义
# dvc.yaml
stages:
preprocess:
cmd: python src/preprocess.py
deps:
- src/preprocess.py
- data/raw/
outs:
- data/processed/
train:
cmd: python src/train.py
deps:
- src/train.py
- data/processed/
params:
- train.epochs
- train.learning_rate
outs:
- models/model.pkl
metrics:
- metrics.json:
cache: false
可重现性检查清单
代码可重现性
- [ ] 为每个实验固定git提交
- [ ] 跟踪未提交更改(git diff)
- [ ] 版本控制笔记本(nbstripout)
- [ ] 文档化手动步骤
环境可重现性
- [ ] 锁定依赖项(pip freeze、poetry.lock)
- [ ] 指定Python版本
- [ ] 文档化CUDA/GPU要求
- [ ] 使用容器进行完全隔离
数据可重现性
- [ ] 使用DVC或类似工具版本化数据集
- [ ] 文档化数据收集过程
- [ ] 跟踪预处理步骤
- [ ] 保存训练/验证/测试分割索引
训练可重现性
- [ ] 设置随机种子(Python、NumPy、PyTorch/TF)
- [ ] 记录所有超参数
- [ ] 保存模型检查点
- [ ] 文档化非确定性操作
最佳实践
命名约定
experiment: {project}-{objective}
run: {date}-{description}-{variant}
model: {architecture}-{dataset}-{version}
示例:
experiment: fraud-detection-baseline
run: 2024-01-15-xgboost-tuning-lr001
model: xgboost-transactions-v2.3.1
比较仪表板
跟踪这些指标进行模型比较:
- 主要指标(优化的内容)
- 次要指标(约束)
- 资源使用(训练时间、内存)
- 推理性能(延迟、吞吐量)
实验文档
每个重要实验应文档化:
- 假设: 什么变化和预期结果
- 方法: 实际做了什么
- 结果: 指标和观察
- 结论: 学到了什么、下一步
参考
references/mlflow-setup.md- MLflow安装和配置references/wandb-patterns.md- 高级W&B功能和扫描references/reproducibility-checklist.md- 详细可重现性指南