MLflow:机器学习生命周期管理平台
用途
当你需要跟踪机器学习实验(参数、指标、产物)、管理带版本与阶段转换的模型注册表、将模型部署到本地或云端平台、通过项目配置复现实验、比较模型版本与性能指标、以团队工作流协作开展机器学习项目,或与任意机器学习框架集成(框架无关)时,可以使用 MLflow。
安装
安装 MLflow:
pip install mlflow
安装带扩展的版本:
pip install mlflow[extras] # 包含 SQLAlchemy、boto3 等
启动 MLflow UI:
mlflow ui
访问地址为 http://localhost:5000
主要能力
-
实验与运行:实验是相关运行的逻辑容器,运行是机器学习代码的单次执行(包含参数、指标、产物)。可创建/设置实验,启动运行并记录参数、指标与模型,运行 ID 会自动生成。
-
记录参数:支持记录单个参数、多个参数(log_params),以及嵌套参数(以字典形式记录)。
-
记录指标:可在训练循环中按 step 记录指标,支持一次记录多个指标(log_metrics),也可记录最终指标。
-
记录产物:支持记录文件(log_artifact)、目录(log_artifacts)、文本文件,以及将字典以 JSON 形式记录(log_dict)。
-
记录模型:支持 PyTorch、Scikit-learn、Keras/TensorFlow、HuggingFace Transformers 等框架的模型记录。
-
自动日志(Autologging):通过 mlflow.autolog() 启用后,训练过程中的指标、参数和模型会自动记录。
-
模型注册表:支持版本管理与阶段转换。
-
搜索运行:可通过 MlflowClient 以编程方式搜索运行,支持过滤字符串(如 metrics.accuracy > 0.9)和排序。
使用方式
基本跟踪示例:
import mlflow
with mlflow.start_run(): mlflow.log_param("learning_rate", 0.001) mlflow.log_param("batch_size", 32) model = train_model() mlflow.log_metric("train_loss", 0.15) mlflow.log_metric("val_accuracy", 0.92) mlflow.sklearn.log_model(model, "model")
自动日志示例:
import mlflow from sklearn.ensemble import RandomForestClassifier
mlflow.autolog() model = RandomForestClassifier(n_estimators=100, max_depth=5) model.fit(X_train, y_train)
搜索运行示例:
from mlflow.tracking import MlflowClient
client = MlflowClient() experiment_id = client.get_experiment_by_name("my-experiment").experiment_id runs = client.search_runs( experiment_ids=[experiment_id], filter_string="metrics.accuracy > 0.9", order_by=["metrics.accuracy DESC"], max_results=10 )
部署
本地服务模型:
mlflow models serve -m "models:/my-classifier/Production" -p 5001
测试端点:
curl http://127.0.0.1:5001/invocations -H 'Content-Type: application/json' -d '{ "inputs": [[1.0, 2.0, 3.0, 4.0]] }'
部署到云端:
mlflow sagemaker deploy -m "models:/my-classifier/Production" --region-name us-west-2 mlflow azureml deploy -m "models:/my-classifier/Production"
配置
启动带后端存储的跟踪服务器:
mlflow server
--backend-store-uri postgresql://user:password@localhost/mlflow
--default-artifact-root s3://my-bucket/mlflow
--host 0.0.0.0
--port 5000
客户端配置:
import mlflow mlflow.set_tracking_uri("http://localhost:5000")
或使用环境变量:export MLFLOW_TRACKING_URI=http://localhost:5000
适用场景
- 跟踪机器学习实验的参数、指标与产物
- 管理模型注册表与版本、阶段转换
- 将模型部署到本地、云端或 serving 平台
- 复现实验、比较模型版本与性能
- 团队协作开展机器学习项目
- 与任意机器学习框架集成
最佳实践
- 用实验组织不同任务,避免所有模型放在一个实验中
- 使用描述性的运行名称
- 记录全面的元数据(超参数、系统信息、数据信息)
- 跟踪模型血缘(如引用父运行 ID)
- 部署时使用模型注册表,而非硬编码运行 ID
限制与注意事项
- 版本相关细节可能已过时,应以所安装版本的官方文档为准
- 若指令中的函数、标志或端点在已安装版本中缺失,应查阅该版本文档并告知用户,不要臆造 API
- 不要公开暴露服务或凭据;在开通云资源前确认成本
- 涉及花钱、占用共享 GPU 或云配额、触碰个人或患者数据、或不可撤销的操作前应先询问
- 若输入、标识符或参数不明确,应询问用户或明确说明假设后再运行
资源
文档:https://mlflow.org/docs/latest GitHub:https://github.com/mlflow/mlflow 示例:https://github.com/mlflow/mlflow/tree/master/examples 社区:https://mlflow.org/community