ML实验追踪器 ml-experiment-tracker

这个技能提供机器学习实验的系统化追踪、版本控制和可重复性指导,使用工具如MLflow、Weights & Biases和DVC,帮助数据科学家和工程师管理模型开发过程,确保实验可重现和高效比较。关键词:机器学习,实验追踪,版本控制,可重复性,MLflow,W&B,DVC,模型开发,数据科学。

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

名称: ml-实验追踪器 描述: 使用MLflow、Weights & Biases和DVC等工具指导机器学习实验日志记录、版本控制和可重复性,以实现系统化模型开发。 许可证: MIT

ML 实验追踪器

这个技能提供系统化机器学习实验的指导,包括适当的追踪、版本控制和可重复性实践。

核心能力

  • 实验追踪: MLflow、Weights & Biases (wandb)、Neptune、Comet
  • 数据版本控制: DVC、Delta Lake、LakeFS
  • 模型注册表: 训练模型的版本控制
  • 可重复性: 环境、代码、数据和超参数追踪

实验追踪基础

追踪内容

每个实验应记录:

类别 项目 原因
代码 Git 提交哈希、分支、差异 重现确切的代码状态
数据 数据集版本、哈希、血统 了解使用了哪些数据
环境 Python 版本、依赖项、硬件 重现运行时环境
超参数 所有配置值 理解变化之处
指标 损失、准确率、自定义指标 比较性能
产物 模型、图表、预测 保存输出

实验组织

项目/
├── 实验/
│   ├── 基线/           # 初始实验
│   ├── 特征工程/       # 数据改进
│   ├── 架构/           # 模型变化
│   └── 超参数/         # 调优运行
├── 数据/
│   ├── 原始/           # 原始数据(版本化)
│   ├── 处理/           # 清洗数据
│   └── 特征/           # 特征存储
└── 模型/
    ├── 暂存/           # 候选模型
    └── 生产/           # 部署模型

MLflow 模式

基本实验日志记录

import mlflow

# 设置实验(如果不存在则创建)
mlflow.set_experiment("我的分类项目")

with mlflow.start_run(run_name="基线-v1"):
    # 记录参数
    mlflow.log_param("学习率", 0.01)
    mlflow.log_param("批量大小", 32)
    mlflow.log_param("轮次", 100)

    # 训练循环
    for epoch in range(轮次):
        train_loss = train_epoch(model, train_loader)
        val_loss, val_acc = evaluate(model, val_loader)

        # 记录带步数的指标
        mlflow.log_metrics({
            "训练损失": train_loss,
            "验证损失": val_loss,
            "验证准确率": val_acc
        }, step=epoch)

    # 记录模型
    mlflow.pytorch.log_model(model, "模型")

    # 记录产物(图表、配置)
    mlflow.log_artifact("混淆矩阵.png")
    mlflow.log_artifact("config.yaml")

模型注册表工作流

┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│   训练       │───▶│   暂存       │───▶│   生产       │
│   运行       │    │   审核       │    │   部署       │
└──────────────┘    └──────────────┘    └──────────────┘
      │                    │                    │
      ▼                    ▼                    ▼
   候选模型           验证模型           监控模型

阶段:

  • : 仅记录,未注册
  • 暂存: 生产候选
  • 生产: 主动服务
  • 归档: 历史参考

Weights & Biases 模式

项目结构

import wandb

# 使用配置初始化
config = {
    "学习率": 0.01,
    "架构": "ResNet50",
    "数据集": "imagenet子集",
    "轮次": 100
}

run = wandb.init(
    project="图像分类",
    group="架构实验",  # 分组相关运行
    tags=["基线", "resnet"],
    config=config,
    notes="在子集上测试ResNet50基线"
)

# 带自动日志的训练
for epoch in range(config["轮次"]):
    metrics = train_and_eval(model, train_loader, val_loader)
    wandb.log(metrics)

    # 记录媒体
    wandb.log({"预测": wandb.Image(pred_grid)})
    wandb.log({"混淆矩阵": 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 预处理 \
    -d src/preprocess.py -d data/raw \
    -o data/processed \
    python src/preprocess.py

# 重现管道
dvc repro

DVC 管道定义

# dvc.yaml
stages:
  预处理:
    cmd: python src/preprocess.py
    deps:
      - src/preprocess.py
      - data/raw/
    outs:
      - data/processed/

  训练:
    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)
  • [ ] 记录所有超参数
  • [ ] 保存模型检查点
  • [ ] 记录非确定性操作

最佳实践

命名约定

实验: {项目}-{目标}
运行: {日期}-{描述}-{变体}
模型: {架构}-{数据集}-{版本}

示例:
实验: 欺诈检测-基线
运行: 2024-01-15-xgboost调优-lr001
模型: xgboost-交易-v2.3.1

比较仪表板

为模型比较追踪这些指标:

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

实验文档

每个重要实验应记录:

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

参考文献

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