MLflow是一个 管理ML生命周期 的开源平台
前言
MLflow是一个简化机器学习开发的平台,包括跟踪实验,将代码打包成可重复的运行,以及分享和部署模型。MLflow提供了一套轻量级的API,可以与任何现有的机器学习应用程序或库(TensorFlow、PyTorch、XGBoost等)一起使用,无论你目前在哪里运行ML代码(例如在笔记本、独立的应用程序或云中)。MLflow目前的组件是:
组件 | 说明 |
---|---|
MLflow Tracking | 一个用于记录机器学习实验中的参数、代码和结果的API,并使用交互式UI进行比较。 |
MLflow Projects | 一个使用Conda和Docker的可重复运行的代码打包格式,因此你可以与他人分享你的ML代码。 |
MLflow Models | 一种模型打包格式和工具,让你轻松地将同一个模型(来自任何ML库)部署到Docker、Apache Spark、Azure ML和AWS SageMaker等批处理和实时处理平台上。 |
MLflow Model Registry | 一个集中的模型存储中心、API集合和UI界面,以协同管理MLflow模型的整个生命周期。 |
1. MLFlow部署
需要将 conda 配置到环境变量中
pip install mlflow
打开MLFlow的UI页面:http://127.0.0.1:5000
【注意】:不建议从MLflow的克隆中运行 mlflow ui 这样做会从源代码中运行开发UI。我们建议从一个不同的工作目录中运行UI,并通过 —backend-store-uri 选项指定一个后端存储。
mlflow ui
- —backend-store-uri:数据库连接,需要手动建库
- —default-artifact-root:元数据存储目录,创建文件夹mlruns,用于保存机器学习模型和其他工件
在命令行执行样例程序 python mlflow_test.py,执行 MLFlow 任务,在UI页面查看 ```powershell# 数据库用户名:root,数据库密码:123456,mlflow为数据库名
mlflow ui --backend-store-uri mysql://root:123456@localhost/mlflow --default-artifact-root file:D:\workspace\program_space\mlflow\mlruns -h 0.0.0.0 -p 8000
mlflow_test.py文件
import os from random import random, randint from mlflow import log_metric, log_param, log_artifacts
if name == “main“: print(“Running mlflow_tracking.py”)
log_param("param1", randint(0, 100))
log_metric("foo", random())
log_metric("foo", random() + 1)
log_metric("foo", random() + 2)
if not os.path.exists("outputs"):
os.makedirs("outputs")
with open("outputs/test.txt", "w") as f:
f.write("hello world!")
log_artifacts("outputs")
<a name="XVwHj"></a>
## 2. MLFlow运行项目
**mlflow **运行命令可以让你从 **本地路径 **或 **Git URI **中运行一个与 MLproject 文件打包的项目。
```powershell
// 通过本地路径执行
mlflow run examples/sklearn_elasticnet_wine -P alpha=0.4
// 通过URI执行
mlflow run https://github.com/mlflow/mlflow-example.git -P alpha=0.4
3. 模型保存和服务
为了说明模型管理,mlflow.sklearn 包可以将 scikit-learn 模型记录为 MLflow 工件,然后再次加载它们进行模型服务。在examples/sklearn_logistic_regression/train.py 中有一个训练应用的例子,你可以按如下方式运行:
$ python examples/sklearn_logistic_regression/train.py
Score: 0.666
Model saved in run <run-id>
$ mlflow models serve --model-uri runs:/<run-id>/model
$ curl -d '{"columns":[0],"index":[0,1],"data":[[1],[-1]]}' -H 'Content-Type: application/json' localhost:5000/invocations
train.py文件的内容如下:
import numpy as np
from sklearn.linear_model import LogisticRegression
import mlflow
import mlflow.sklearn
if __name__ == "__main__":
X = np.array([-2, -1, 0, 1, 2, 1]).reshape(-1, 1)
y = np.array([0, 0, 1, 1, 1, 0])
lr = LogisticRegression()
lr.fit(X, y)
score = lr.score(X, y)
print("Score: %s" % score)
mlflow.log_metric("score", score)
mlflow.sklearn.log_model(lr, "model")
print("Model saved in run %s" % mlflow.active_run().info.run_uuid)
4. 生产环境部署
如果你想让 Tracking 服务器在重启后仍能正常运行,并且对故障有弹性,那么把它作为一个 systemd服务 运行是非常有用的。
你需要进入 /etc/systemd/system 文件夹,创建一个名为 mlflow-tracking.service 的新文件,内容如下:
[Unit]
Description=MLflow tracking server
After=network.target
[Service]
Restart=on-failure
RestartSec=30
ExecStart=/bin/bash -c 'PATH=/path_to_your_conda_installation/envs/mlflow_env/bin/:$PATH exec mlflow server --backend-store-uri postgresql://mlflow:mlflow@localhost/mlflow --default-artifact-root file:/home/your_user/mlruns -h 0.0.0.0 -p 8000'
[Install]
WantedBy=multi-user.target
激活并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable mlflow-tracking
sudo systemctl start mlflow-tracking
检查服务状态是否正常:
sudo systemctl status mlflow-tracking