MLflow:MLOps 入门
Source: Dev.to
请提供您希望翻译的正文内容,我将按照要求保留源链接、格式和技术术语,仅翻译文本部分。
介绍
在机器学习模型中取得优秀的指标并非易事。想象一下,因为不记得使用了哪些超参数而无法复现结果。
我们的目标是摆脱“训练了一个模型,结果不错”这种状态,进入 MLOps 的世界,在那里可以:
- 跟踪实验
- 比较运行
- 存储制品
- 自信地重复过程
MLOps 是在 ML 项目中应用 DevOps 原则的实践。它涉及管理 ML 项目的 生命周期,从开发和训练阶段的 可复现性 到 部署 与监控。
在传统软件开发中,代码版本控制(例如 Git)通常就足够了。而在机器学习中,结果取决于 代码 + 数据 + 超参数。
专用工具可以在实验过程变得混乱之前,简化模型的审计和协作。缺乏结构化的历史记录会阻碍任何 AI 项目的可复现性和可扩展性。
什么是 MLflow?
MLflow 帮助实施 MLOps,以组织机器学习项目的生命周期。即使在一个简单的项目中,它也会为每次训练创建所有操作的历史记录。
在实际使用中,MLflow 能帮助回答以下问题:
- 哪个参数组合产生了最佳指标?
- 我何时运行了训练以及结果是什么?
- 该次运行的训练模型保存在哪里?
MLflow 的出现是为了标准化这种管理。在本文档中,我们将关注三种基本的记录类型:
| 类型 | 描述 |
|---|---|
| 参数 | 配置输入(例如:learning_rate、n_estimators) |
| 指标 | 性能结果(例如:accuracy、log_loss) |
| 制品 | 二进制输出(例如:保存为 .pkl 或 .onnx 的模型) |
MLflow 将随意的实验转变为可审计且标准化的记录系统。
简单的 MLflow 配置
Backend Store
SQLite (mlflow.db) – 保存元数据(实验、runs、参数、指标)。
Artifact Store
File store (mlruns/) – 保存制品(模型、图表等)。
安装
pip install mlflow
启动服务器
mlflow server \
--backend-store-uri sqlite:///mlflow.db \
--default-artifact-root ./mlruns \
--host 0.0.0.0 \
--port 5000
参数说明
| 参数 | 描述 |
|---|---|
mlflow server | 启动 MLflow 服务 |
--backend-store-uri | SQLite 轻量,适合首次迭代 |
--default-artifact-root | 存放制品的目录 |
--host 和 --port | 服务器可用的地址(UI 也使用) |
当我们使用 SQLite + 文件存储时,MLflow 目录中会出现两个主要组件:
mlflow.db– 包含元数据的 SQLite 数据库(实验、runs、参数、指标)。mlruns/– 包含制品及运行内容的文件夹(模型、图表等)。
与 Python 的集成
mlflow 库可以 几乎不改动代码 地连接到服务器。只需设置 URI 并使用 mlflow.start_run()。
import mlflow
import mlflow.sklearn
from sklearn.metrics import accuracy_score, recall_score
# 连接到跟踪服务器
mlflow.set_tracking_uri("http://localhost:5000")
mlflow.set_experiment("Customer_Churn_Experiment")
with mlflow.start_run():
# ----- 模型训练 -----
# model = ... (此处编写你的训练代码)
# 记录参数
mlflow.log_param("max_depth", 10)
mlflow.log_param("n_estimators", 100)
# 评估
y_pred = model.predict(X_test)
acc = accuracy_score(y_test, y_pred)
rec = recall_score(y_test, y_pred)
# 记录指标
mlflow.log_metric("accuracy", acc)
mlflow.log_metric("recall", rec)
# 记录工件(模型)
mlflow.sklearn.log_model(model, "random_forest_model")
首次运行时会发生什么?
- 实验
Customer_Churn_Experiment会自动创建。 - 会记录一次 run。
- 参数、指标和工件会被发送到跟踪服务器。
可视化结果
在 MLflow UI 中您将看到:
- 已跟踪的参数和指标
- 包含各自工件的运行列表
我记录的参数和指标示例:
| 参数 | 值 |
|---|---|
n_estimators | 100 |
max_depth | 10 |
| 指标 | 值 |
|---|---|
accuracy | 0.85 |
recall | 0.78 |
这使得可以在不依赖终端 print 的情况下比较不同的运行。
用例:超参数比较
我进行了第二次交互,修改了 max_depth 和 n_estimators。虽然预期会有改进,但在检查 UI 时发现 accuracy 指标下降了。
经验教训
| 支柱 | MLflow 显示的内容 |
|---|---|
| 可追溯性 | 实证证明超参数的更改导致了过拟合 |
| 技术比较 | UI 允许直观地比较两个运行 |
| 可复现性 | 前一个版本的制品已记录并准备部署 |
一般优势
- 划时代的突破:改变我们在模型生命周期中管理可追溯性的方式。
- 易于检查:可以直接通过命令行查询 SQLite。
- 高级 MLOps 的基础:跟踪只是第一步;随后是 Model Registry 和 Model Serving。
掌握实验追踪是未来实现 Continuous Training (CT) 的基石。
仓库
此项目的完整代码可在我的 GitHub 上获取:
mlops‑tel(将 SEU_USUARIO 替换为您的用户名)。
co-churn-predict
你呢:在日常工作中已经使用 MLflow 了吗?在你看来,确保模型完全可复现的最大挑战是什么?
让我们在评论区讨论!