21.3 实验管理
概念:为什么实验管理不是”锦上添花”
训练一个机器学习模型不是”写一段代码,跑一次就完事”。你通常会尝试几十甚至上百组不同的配置:学习率从 0.0001 试到 0.1,batch size 从 8 试到 128,LoRA 的 r 值从 4 试到 64。每组配置跑一次训练,产生一个”实验”。
如果没有实验管理系统,你的处境就像一个厨师做了 50 道菜,但没有记下任何一道菜的配方和试吃评价——一周后你完全不记得第 37 道菜为什么比第 12 道好吃。1
实验管理(Experiment Tracking)要解决的核心问题是可复现性(Reproducibility):三个月后,你能否精确复现当时那个效果最好的模型?这需要记录三样东西:
- 参数(Parameters):训练时用了什么配置(学习率、batch size、模型架构、随机种子)
- 指标(Metrics):训练结果如何(准确率、损失值、F1 分数、推理速度)
- 产物(Artifacts):训练生成了什么(模型文件、评估图表、配置文件)
生活比喻:实验管理就像科学家的实验记录本。中学化学课老师要求你记录”用了多少克试剂、加热到多少度、观察到什么现象”——ML 实验管理是完全一样的道理,只是多了代码和自动化。2
教学:MLflow 三行代码入门
MLflow 是目前最流行的开源实验管理工具,由 Databricks 公司开发和维护。它的核心设计哲学是”轻量级”:不需要搭服务器,不需要学新语言,三行 Python 代码就能开始记录实验。
import mlflow
# 记录训练配置(超参数)
mlflow.log_param("learning_rate", 2e-4)
mlflow.log_param("lora_r", 16)
mlflow.log_param("model", "Qwen2.5-7B")
# 记录训练结果(指标)
mlflow.log_metric("accuracy", 0.89)
mlflow.log_metric("f1_score", 0.87)
# 记录训练产物(文件)
mlflow.log_artifact("confusion_matrix.png")
mlflow.log_artifact("config.yaml")
然后终端运行 mlflow ui,浏览器里就能看到所有实验的对比界面——按准确率排序、筛选、可视化。3
MLflow 的实验组织结构:
- Experiment(实验):一个大的研究方向,比如”情感分类 v2”。你可以把相关的训练都放在同一个 Experiment 下面。
- Run(运行):一次具体的训练。每个 Run 有自己的参数、指标和产物。
- Tag(标签):给 Run 打标签,方便搜索。比如
dataset: "production-v3"或status: "promising"。
对于更复杂的超参数搜索,MLflow 支持父子 Run 结构:父 Run 是一次超参数搜索任务(比如 Grid Search),下面的每个子 Run 是一组具体参数的训练结果。这样你可以对比”学习率 0.001 的 10 个 batch size 变体”和”学习率 0.01 的 10 个 batch size 变体”之间的系统性差异。4
自动日志:如果你用的是 Scikit-learn、PyTorch、XGBoost 等主流框架,MLflow 支持一行 mlflow.sklearn.autolog() 自动记录几乎所有相关信息——不需要手动写 log_param 和 log_metric。对初学者来说这是最省力的入口。5
工具对比:MLflow vs. Weights & Biases
| 维度 | MLflow | Weights & Biases (W&B) |
|---|---|---|
| 类型 | 开源,可自建服务器 | 云服务,有免费层 |
| 上手速度 | 需要本地安装和启动 | 注册账号即可用 |
| 可视化 | 基础图表 | 高级交互图表 |
| 超参数搜索 | 手动对比 | 自动 Sweep(智能搜索) |
| 团队协作 | 需要自己部署共享服务器 | 原生支持团队共享 |
| 适用场景 | 个人项目、企业内部部署 | 研究团队、需要高级可视化 |
选择建议:如果你是个人学习或小团队,MLflow 的本地部署完全够用——不需要任何云服务。如果你的团队超过 5 人且需要实时共享实验进度,W&B 的协作体验更好。两者不是替代关系,很多团队同时使用:MLflow 做本地快速迭代,W&B 做团队大盘展示。6
模型版本管理:从实验到上线
实验管理的终点不是”找到最好的那个实验”——而是把那个实验产出的模型注册、版本化、部署上线。这就是模型注册表(Model Registry)的工作。
生活比喻:模型注册表就像一个餐厅的菜单管理系统。实验阶段相当于厨师在研发新菜(各种配方版本都要记录),注册表阶段相当于把确定下来的菜品正式加入菜单——标注了”当前供应”(Production)、“试营业”(Staging)、“已下架”(Archived)。客人点菜时(API 请求),服务员直接从”当前供应”里调取。7
模型注册表的核心操作:
- 注册:把实验产出的模型文件注册为命名版本(如
sentiment-classifierv1.0) - 标注状态:Staging(待上线测试)、Production(正式服务)、Archived(归档)
- 版本对比:v1.2 和 v1.3 在相同测试集上的效果对比
- 快速回退:如果 v1.3 上线后出现问题,一键切回 v1.2
MLflow 内置了模型注册表。你不需要额外工具——从实验记录到模型上线,都在 MLflow 中完成。HuggingFace Hub(详见 Ch10)也提供了类似的模型版本管理功能,而且和 transformers 库无缝集成:model = AutoModel.from_pretrained("yourname/yourmodel") 一行代码就能加载已注册的模型。8
注意事项
不要过度记录。不是所有实验都值得永久保存。一个简单的判断标准:如果你能清楚地回答”这个实验的数据来自哪里、参数是什么、结果怎么样”,就已经够了。记录 50 个指标不如记录 5 个真正重要的指标并写一段文字说明”这次实验的核心发现是什么”。
实验命名是门艺术。run_37 和 test_final_v3_real_final 都是糟糕的名字。好的命名规则:[任务]-[关键变化]-[日期],比如 sentiment-lora_r16-0701。一个月后你看到这个名字,还能大致想起这次实验做了什么。
本地 MLflow 的坑。默认情况下 MLflow 把实验数据存到本地的 mlruns/ 文件夹。如果你换了一台电脑,这些数据不会自动跟着走。如果有团队协作需求,需要部署一个共享的 Tracking Server(MLflow 支持用 MySQL/PostgreSQL 做后端存储,S3 做 artifact 存储)。
模型版本的”语义版本”。给模型版本号不要随便递增。参考语义版本规范:主版本.次版本.补丁(如 v1.2.3)。改动训练数据 → 主版本 +1;改动模型架构或超参数 → 次版本 +1;修复 bug(如数据预处理错误)→ 补丁 +1。这样任何人看到版本号就能大致判断变动的范围。
关联
- LLM 可观测性 (LLM Observability) — 实验管理是训练阶段的记录,LLM 可观测性是部署后的监控,两者是 MLOps 的前后两环
- 深挖 LangSmith — LangChain 生态的实验追踪和评估平台,侧重 LLM/Agent 场景
- 21.2 MLOps成熟度模型 — 实验管理是 Level 1 自动化的核心组件
- 第11章 · 模型微调 — 微调是实验管理的主要上游,每次微调都对应一次实验记录
← 上一节:21.2 MLOps成熟度模型 | 下一节:21.4 小型团队MLOps最低可行方案 →
注释
-
MLflow, “MLflow Tracking”, https://mlflow.org/docs/latest/tracking.html, 2025 ↩
-
UW-Madison Data Science, “MLflow 101: Local Experiment Tracking for Beginners”, https://uw-madison-datascience.github.io/ML-X-Nexus/Toolbox/MLOps/mlflow-101.html, 2025 ↩
-
MLflow, “MLflow Tracking Quickstart”, https://mlflow.org/docs/latest/getting-started/intro-quickstart/index.html, 2025 ↩
-
MLflow, “Organizing Runs with Experiments”, https://mlflow.org/docs/latest/tracking.html#organizing-runs-in-experiments, 2025 ↩
-
MLflow, “Automatic Logging”, https://mlflow.org/docs/latest/tracking.html#automatic-logging, 2025 ↩
-
Databricks, “MLflow vs Weights & Biases”, https://www.databricks.com/blog, 2024 ↩
-
MLflow, “Model Registry”, https://mlflow.org/docs/latest/model-registry.html, 2025 ↩
-
HuggingFace, “Model Hub Documentation”, https://huggingface.co/docs/hub/models, 2025 ↩