MLflow 是一个开源的机器学习生命周期管理工具,实验跟踪(Experiment Tracking) 是它最核心的功能之一,用来记录模型训练过程中的参数、指标、模型、日志等,方便对比和复现。
| 概念 | 说明 |
|---|---|
| Experiment | 一组实验的集合(比如“XGBoost 调参实验”) |
| Run | 一次实验执行(一次训练) |
| Parameter | 超参数(如 learning_rate) |
| Metric | 评估指标(如 accuracy、loss) |
| Artifact | 任何文件(模型、图片、日志) |
| Tracking URI | MLflow 记录数据的位置(本地 / 远程) |
pip install mlflowimport mlflow
import mlflow.sklearn
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 设置实验名
mlflow.set_experiment("iris_experiment")
# 开始一次 run
with mlflow.start_run():
# 数据
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 参数
C = 0.5
solver = "lbfgs"
mlflow.log_param("C", C)
mlflow.log_param("solver", solver)
# 模型
model = LogisticRegression(C=C, solver=solver)
model.fit(X_train, y_train)
# 指标
acc = accuracy_score(y_test, model.predict(X_test))
mlflow.log_metric("accuracy", acc)
# 保存模型
mlflow.sklearn.log_model(model, "model")
print(f"Accuracy: {acc}")运行后,MLflow 会自动记录:
C, solveraccuracymlflow ui浏览器打开:
http://127.0.0.1:5000你可以看到:
mlflow.log_param("lr", 0.01)
mlflow.log_params({
"epochs": 10,
"batch_size": 32
})
mlflow.log_metric("loss", 0.32)
mlflow.log_metrics({
"train_acc": 0.9,
"val_acc": 0.85
})⚠️ metric 可以多次记录(用于画曲线)
mlflow.sklearn.log_model(model, "model")
mlflow.pytorch.log_model(model, "model")
mlflow.tensorflow.log_model(model, "model")mlflow.log_artifact("confusion_matrix.png")
mlflow.log_artifact("config.yaml")mlflow.set_experiment("xgboost_experiment")mlflow.start_run(run_name="lr_c0.5")with mlflow.start_run(run_name="parent"):
with mlflow.start_run(run_name="child", nested=True):
...mlflow.set_tracking_uri("./mlruns")远程启动:
mlflow server \
--backend-store-uri sqlite:///mlflow.db \
--default-artifact-root ./artifacts \
--host 0.0.0.0客户端:
mlflow.set_tracking_uri("http://remote-server:5000")✅ 对比不同模型
✅ 对比不同超参数
✅ 复现实验结果
✅ 模型版本管理
MLflow 实验跟踪 = 自动记录“你做了什么、效果如何、模型在哪”
如果你愿意,我也可以:
你现在用的是 sklearn / PyTorch / 还是深度学习框架?