MLflow节点

综述

MLflow 是一个MLops领域一个优秀的开源项目, 用于管理机器学习的生命周期,包括实验、可再现性、部署和中心模型注册。

MLflow 组件用于执行 MLflow 任务,目前包含Mlflow Projects, 和MLflow Models。(Model Registry将在不就的将来支持)。

  • MLflow Projects: 将代码打包,并可以运行到任务的平台上。
  • MLflow Models: 在不同的服务环境中部署机器学习模型。
  • Model Registry: 在一个中央存储库中存储、注释、发现和管理模型 (你也可以在你的MLflow project 里面自行注册模型)。

目前 Mlflow 组件支持的和即将支持的内容如下中:

  • [x] MLflow Projects
    • [x] BasicAlgorithm: 基础算法,包含LogisticRegression, svm, lightgbm, xgboost
    • [x] AutoML: AutoML工具,包含autosklean, flaml
    • [x] Custom projects: 支持运行自己的MLflow Projects项目
  • [ ] MLflow Models
    • [x] MLFLOW: 直接使用 mlflow models serve 部署模型。
    • [x] Docker: 打包 DOCKER 镜像后部署模型。
    • [x] Docker Compose: 使用Docker Compose 部署模型,将会取代上面的Docker部署。
    • [ ] Seldon core: 构建完镜像后,使用Seldon Core 部署到k8s集群上, 可以使用Seldon Core的生成模型管理能力。
    • [ ] k8s: 构建完镜像后, 部署到k8s集群上。
    • [ ] MLflow deployments: 内置的允许MLflow 部署模块, 如内置的部署到Sagemaker等。
  • [ ] Model Registry
    • [ ] Register Model: 注册相关工件(模型以及相关的参数,指标)到模型中心

创建任务

  • 点击项目管理-项目名称-工作流定义,点击“创建工作流”按钮,进入 DAG 编辑页面;
  • 拖动工具栏的 任务节点到画板中。

任务样例

首先介绍一些DS通用参数

  • 节点名称 :设置任务的名称。一个工作流定义中的节点名称是唯一的。
  • 运行标志 :标识这个节点是否能正常调度,如果不需要执行,可以打开禁止执行开关。
  • 描述 :描述该节点的功能。
  • 任务优先级 :worker 线程数不足时,根据优先级从高到低依次执行,优先级一样时根据先进先出原则执行。
  • Worker 分组 :任务分配给 worker 组的机器执行,选择 Default,会随机选择一台 worker 机执行。
  • 环境名称 :配置运行脚本的环境。
  • 失败重试次数 :任务失败重新提交的次数。
  • 失败重试间隔 :任务失败重新提交任务的时间间隔,以分钟为单位。
  • 延迟执行时间 :任务延迟执行的时间,以分钟为单位。
  • 超时告警 :勾选超时告警、超时失败,当任务超过"超时时长"后,会发送告警邮件并且任务执行失败。
  • 前置任务 :选择当前任务的前置任务,会将被选择的前置任务设置为当前任务的上游。

以下是一些MLflow 组件的常用参数

  • MLflow Tracking Server URI :MLflow Tracking Server 的连接, 默认 http://localhost:5000
  • 实验名称 :任务运行时所在的实验,若实验不存在,则创建。若实验名称为空,则设置为Default, 与 MLflow 一样。

MLflow Projects

BasicAlgorithm

mlflow-conda-env

任务参数

  • 注册模型 :是否注册模型,若选择注册,则会展开以下参数。
    • 注册的模型名称 : 注册的模型名称,会在原来的基础上加上一个模型版本,并注册为Production。
  • 数据路径 : 文件/文件夹的绝对路径, 若文件需以.csv结尾(自动切分训练集与测试集), 文件夹需包含train.csv和test.csv(建议方式,用户应自行构建测试集用于模型评估)。 详细的参数列表如下:
  • 算法 :选择的算法,目前基于 scikit-learn 形式支持 lr, svm, lightgbm, xgboost
  • 参数搜索空间 : 运行对应算法的参数搜索空间, 可为空。如针对lightgbm 的 max_depth=[5, 10];n_estimators=[100, 200] 则会进行对应搜索。约定传入后会以;切分各个参数,等号前的名字作为参数名,等号后的名字将以python eval执行得到对应的参数值

AutoML

mlflow-automl

任务参数

  • 注册模型 :是否注册模型,若选择注册,则会展开以下参数。
    • 注册的模型名称 : 注册的模型名称,会在原来的基础上加上一个模型版本,并注册为Production。
  • 数据路径 : 文件/文件夹的绝对路径, 若文件需以.csv结尾(自动切分训练集与测试集), 文件夹需包含train.csv和test.csv(建议方式,用户应自行构建测试集用于模型评估)。
  • 参数 : 初始化AutoML训练器时的参数,可为空, 如针对 flaml 设置time_budget=30;estimator_list=['lgbm']。约定传入后会以; 切分各个参数,等号前的名字作为参数名,等号后的名字将以python eval执行得到对应的参数值。详细的参数列表如下:
  • AutoML工具 : 使用的AutoML工具,目前支持 autosklearn , flaml

Custom projects

mlflow-custom-project.png

任务参数

  • 参数 : mlflow run中的 --param-list 如 -P learning_rate=0.2 -P colsample_bytree=0.8 -P subsample=0.9
  • 运行仓库 : MLflow Project的仓库地址,可以为github地址,或者worker上的目录, 如MLflow project位于子目录,可以添加 # 隔开, 如 https://github.com/mlflow/mlflow#examples/xgboost/xgboost_native
  • 项目版本 : 对应项目中git版本管理中的版本,默认 master

现在你可以使用这个功能来运行github上所有的MLflow Projects (如 MLflow examples )了。你也可以创建自己的机器学习库,用来复用你的研究成果,以后你就可以使用DolphinScheduler来一键操作使用你的算法库。

MLflow Models

常用参数:

  • 部署模型的URI :MLflow 服务里面模型对应的URI, 支持 models:/<model_name>/suffix 格式 和 runs:/ 格式。
  • 监听端口 :部署服务时的端口。

MLFLOW

mlflow-models-mlflow

Docker

mlflow-models-docker

DOCKER COMPOSE

mlflow-models-docker-compose

  • 最大CPU限制 :如 1.0 或者 0.5, 与 docker compose 一致。
  • 最大内存限制 :如 1G 或者 500M, 与 docker compose 一致。

环境准备

conda 环境配置

你需要进入admin账户配置一个conda环境变量(请提前安装anaconda 或者安装miniconda )。

mlflow-conda-env

后续注意配置任务时,环境选择上面创建的conda环境,否则程序会找不到conda环境。

mlflow-set-conda-env

MLflow service 启动

确保你已经安装MLflow,可以使用pip install mlflow进行安装。

在你想保存实验和模型的地方建立一个文件夹,然后启动 mlflow service。

mkdir mlflow
cd mlflow
mlflow server -h 0.0.0.0 -p 5000 --serve-artifacts --backend-store-uri sqlite:///mlflow.db

运行后会启动一个MLflow服务。

可以通过访问 MLflow service (http://localhost:5000) 页面查看实验与模型。

mlflow-server