MLflow是一个开源平台,用于管理机器学习的整个生命周期。简而言之,MLflow帮助追踪成百上千的模型、容器环境、数据集、模型参数和超参数,并在需要时重现它们。Azure将MLflow集成到其标准库中,这充分说明了MLflow的重要性以及为何需要投入精力去理解和部署它。
在大型公司中,模型往往意味着收入。数据的轻微漂移或无法解释的输出意味着损失。例如,保险公司从医院收集客户/患者数据,并利用这些数据来收取每位客户基于风险因素的最佳保费,同时也要考虑到利润底线(利润率)。如果收取的保费过低,就会带来业务损失;如果保费过高,则会导致客户流失。数据科学家和工程师的任务是构建/修复这些模型。在这种情况下,如果训练/测试/部署配置没有被记录和保存,那么重现错误的模型就变得不可能。有了MLflow,配置、数据集、脚本、环境(conda.yml)都会被记录,使用run_id/experiment_id用于在评分脚本中部署,模型在几分钟内就可以被重现。
参数 - 代码中的键值输入。
指标 - 数值。
标签和注释 - 关于运行的信息,模型的目的,或者团队名称等。
工件 - 文件、数据和模型。
源 - 要运行的脚本是什么?
版本 - 脚本版本。
运行 - 在MLflow上运行的代码实例。
实验 - 运行的集合。
mlruns文件夹和运行ID的集合。
安装MLFLOW
pip install mlflow
使用以下代码启动mlflow,r_name是运行名称:
with mlflow.start_run(run_name=r_name) as run:
每个模型运行被称为一个实验,run_name属性可以用来识别特定的运行,例如 - xgboost-exp或catboost-exp。这指示MLflow创建一个带有新run_id的文件夹,并创建子文件夹。稍后将讨论Mlruns文件夹。
记录参数/指标/工件/模型:
mlflow.log_param("l1_ratio", l1_ratio)
mlflow.log_metric("rmse", rmse)
mlflow.sklearn.log_model(lr, "model", registered_model_name="ElasticnetWineModel01")
mlflow.log_artifact(temp_name, "rmse_estimators_plots")
使用以下命令获取实验详情。filter_string可以是任何参数或指标:
df = mlflow.search_runs(filter_string="metrics.rmse < 60")
df.head()
使用记录的指标获取最佳模型:
run_id = df.loc[df['metrics.r2'].idxmin()]['run_id']
model = mlflow.sklearn.load_model("runs:/" + run_id + "/catboost-reg-model")
使用预测模型:
columns_to_keep = ["Manufacturer","Model","Prod. year","Category","Leather interior","Fuel type", "Cylinders","Gear box type",
"Drive wheels", "Doors", "Wheel", "Airbags"]
cat_features = ["Manufacturer","Model","Prod. year","Category","Leather interior","Fuel type", "Gear box type",
"Drive wheels", "Doors", "Wheel"]
features_to_predict_df = test[columns_to_keep]
features_to_predict_df[cat_features] = features_to_predict_df[cat_features].astype(str)
y_pred_log = model.predict(features_to_predict_df)
features_to_predict_df.head()
MLflow提供了一个UI来跟踪实验,使用http://localhost:5000/。使用这个mlflow UI,可以轻松地比较满足最低阈值的不同模型并验证每个模型。UI还可以用于以下操作:
每个训练好的模型都可以被访问和下载。
可以查看、排序模型指标和参数。
它提供了一个选项,以了解哪些参数一直表现良好,这有助于减少网格搜索窗口或通过网格搜索训练的时间。虽然手动排序和过滤许多迭代是一个任务,但仪表板的感觉使其变得容易。
它提供了选择和选择列的选项,例如只保留参数和指标。
它提供了一个选项,将所有运行信息下载到CSV,供那些Excel高手使用。
可以绘制指标。
一旦选择了最终模型,就可以注册并用于预测。
!mlflow ui
手头的问题是一个回归问题。
训练数据和测试数据可以从附加链接下载。函数调用mlflow,将数据分割为训练和测试,训练模型,记录指标,并返回实验ID和运行ID。
mlflow.start_run
触发mlflow运行。
Assign run_id and experiment_id to respective variables.
Use train_test_split to split the dataset.
Use catboost regressor to train the data and predict(Or any other regression model). Parameters used are:
{‘iterations’: 100,
‘learning_rate’: 0.02,
‘depth’: 2,
‘loss_function’: ‘RMSE’,
‘verbose’: 100,
‘cat_features’: [‘Manufacturer’,
‘Model’,
‘Prod. year’,
‘Category’,
‘Leather interior’,
‘Fuel type’,
‘Gear box type’,
‘Drive wheels’,
‘Doors’,
‘Wheel’]}
Log all relevant regression evaluation metrics using mlflow.log_metric.
Print training status, so as to get an update on the training status and previous model results.
Return experiment id and run id.
简要了解幕后发生了什么。当使用mlflow时,它会创建一个名为mlruns的文件夹,这是项目的存储库。
mlruns文件夹包含运行ID,为每个运行创建单独的文件夹。每个文件夹有4个子文件夹:
artifacts
metrics
params
tags
Artifacts包含模型中使用的conda环境,模型pkl文件。artifacts中的示例conda.yml文件。
channels:
- defaults
- conda-forge
dependencies:
- python=3.8.5
- pip
- pip:
- mlflow
- scikit-learn==0.23.2
- cloudpickle==1.6.0
name: mlflow-env
Metrics文件夹记录指标,如RSME/MAE,客户指标等。
[{“run_id”: “1a2bef6340dd4610841234d860c35f2d”, “artifact_path”: “catboost-reg-model”, “utc_time_created”: “2021-07-09 06:15:51.956861”, “flavors”: {“python_function”: {“model_path”: “model.pkl”, “loader_module”: “mlflow.sklearn”, “python_version”: “3.8.5”, “env”: “conda.yaml”}, “sklearn”: {“pickled_model”: “model.pkl”, “sklearn_version”: “0.23.2”, “serialization_format”: “cloudpickle”}}]