机器学习实验跟踪器 ml-experiment-tracker

这个技能提供机器学习实验的系统化指导,专注于跟踪、版本控制和可重现性实践,帮助开发者高效管理模型开发过程。关键词:机器学习、实验跟踪、MLflow、Weights & Biases、DVC、可重现性、模型版本控制、数据版本控制。

机器学习 0 次安装 0 次浏览 更新于 3/7/2026

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

比较仪表板

跟踪这些指标进行模型比较:

  • 主要指标(优化的内容)
  • 次要指标(约束)
  • 资源使用(训练时间、内存)
  • 推理性能(延迟、吞吐量)

实验文档

每个重要实验应文档化:

  1. 假设: 什么变化和预期结果
  2. 方法: 实际做了什么
  3. 结果: 指标和观察
  4. 结论: 学到了什么、下一步

参考

  • references/mlflow-setup.md - MLflow安装和配置
  • references/wandb-patterns.md - 高级W&B功能和扫描
  • references/reproducibility-checklist.md - 详细可重现性指南