MLflow基础与实践指南

MLflow是一个开源平台,用于管理机器学习的整个生命周期。简而言之,MLflow帮助追踪成百上千的模型、容器环境、数据集、模型参数和超参数,并在需要时重现它们。Azure将MLflow集成到其标准库中,这充分说明了MLflow的重要性以及为何需要投入精力去理解和部署它。

为什么需要MLflow?

在大型公司中,模型往往意味着收入。数据的轻微漂移或无法解释的输出意味着损失。例如,保险公司从医院收集客户/患者数据,并利用这些数据来收取每位客户基于风险因素的最佳保费,同时也要考虑到利润底线(利润率)。如果收取的保费过低,就会带来业务损失;如果保费过高,则会导致客户流失。数据科学家和工程师的任务是构建/修复这些模型。在这种情况下,如果训练/测试/部署配置没有被记录和保存,那么重现错误的模型就变得不可能。有了MLflow,配置、数据集、脚本、环境(conda.yml)都会被记录,使用run_id/experiment_id用于在评分脚本中部署,模型在几分钟内就可以被重现。

MLflow跟踪的关键概念

参数 - 代码中的键值输入。

指标 - 数值。

标签和注释 - 关于运行的信息,模型的目的,或者团队名称等。

工件 - 文件、数据和模型。

源 - 要运行的脚本是什么?

版本 - 脚本版本。

运行 - 在MLflow上运行的代码实例。

实验 - 运行的集合。

mlruns文件夹和运行ID的集合。

MLflow的实际操作

安装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比较模型

MLflow提供了一个UI来跟踪实验,使用http://localhost:5000/。使用这个mlflow UI,可以轻松地比较满足最低阈值的不同模型并验证每个模型。UI还可以用于以下操作:

每个训练好的模型都可以被访问和下载。

可以查看、排序模型指标和参数。

它提供了一个选项,以了解哪些参数一直表现良好,这有助于减少网格搜索窗口或通过网格搜索训练的时间。虽然手动排序和过滤许多迭代是一个任务,但仪表板的感觉使其变得容易。

它提供了选择和选择列的选项,例如只保留参数和指标。

它提供了一个选项,将所有运行信息下载到CSV,供那些Excel高手使用。

可以绘制指标。

一旦选择了最终模型,就可以注册并用于预测。

!mlflow ui

基本MLFLOW功能

手头的问题是一个回归问题。

训练数据和测试数据可以从附加链接下载。函数调用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”}}]
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485