当 Apache DolphinScheduler 遇上 MLOps,机器学习模型部署到生产环境更快、更安全

b44442247387b64f57bd48538463ae9c.png

作者 | 周捷光 白鲸开源 高级算法工程师

导读:MLOps,即机器学习模型运营化已经是一个成熟的概念了。可以将其理解为用于机器学习的 DevOps,这个概念让数据科学家和 IT 团队能够通过监控、验证和管理机器学习模型,来进行协作并提高模型开发和部署的速度。总之,MLOps 可以帮助用户更快地试验和开发模型,更快地将模型部署到生产环境,并进行质量保证。

本次演讲分为四个部分:

  • Apache DolphinScheduler 与 MLOps 的碰撞

  • Apache DolphinScheduler ⽬前⽀持的机器学习任务类型

  • Jupyter 组件和 MLflow 组件的使⽤

  • Apache DolphinScheduler 与 MLOps 结合的计划

Apache DolphinScheduler

01

Apache DolphinScheduler 与 MLOps 的碰撞

什么是 MLOps?

DS

18c46c0fdfb66e15cc050069f7d6d081.png

MLOps 是机器学习时代的 DevOps。它的主要作⽤就是连接模型构建团队和业务,运维团队,建⽴起⼀个标准化的模型开发、部署与运维流程,使得企业组织能更好地利⽤机器学习能⼒来促进业务增⻓。

8cc7d8e625ea4479539d3d26bbd5360a.png

在实际⽣产中,ML代码可能只是整个系统的⼩部分代码,所需要的其他相关的元素是很庞⼤且很复杂的。

MLOps  Landscape

DS

ed93ba14c3a663d99767c19601b23524.png

当前的MLops系统划分虽然不尽相同,但是核⼼是类似的,⼤致可以分成以下四个阶段的⼯作:

  • 数据管理

  • 建模

  • 部署

  • 监控

MLOps 案例

DS

c89eb57951248fb5f053c6b436f62fb7.png

DolphinScheduler在MLOps定位

DS

  • 支持调度执行ML任务的能力

  • 支持执行用户使用各种框架训练任务的特性

  • 支持调度执行主流MLOps项目的能力

  • 提供out-of-box的主流MLOps项目来让用户更方便的使用对应能力

  • 支持编排各个模块搭建机器学习平台的能力

  • 依据MLOps项目特性跟业务的适配程度,在不同的模块中可以使用不同项目的能力。

02

Apache DolphinScheduler 目前支持的 ML 任务类型

  • Jupyter Task Plugin

  • MLflow Task Plugin

  • OpenMLDB Task Plugin

d8bf40eb1597f133ec3c3467f416e8e9.png

Jupyter Task Plugin

DS

Jupyter Notebook 简介

Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。

Papermill 是一个可以参数化和执行Jupyter Notebook的工具。

组件介绍

0dbcc4398f9b7ce292d111d451fed9b2.png

  • Conda Env Name: Conda环境名称。

  • Input Note Path: 输入的jupyter note模板路径。

  • Output Note Path: 输出的jupyter note路径。

  • Parameters: 对接jupyter note参数化的JSON格式参数。

  • Kernel: Jupyter notebook 内核。

MLflow Task Plugin

DS

MLflow 简介

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

f4c64388f6656452a854aaaacf31ad92.png

组件介绍-MLflow Projects

23656e43cd2134b25e92741a66286242.png

Custom projects

Custom projects: 支持运行自己的

MLflow Projects项目

  • MLflow Tracking Server URI

  • 实验名称 :任务运行时所在的实验

  • 参数 : mlflow run中的 --param-list

  • 运行仓库 : MLflow Project的仓库地址

  • 项目版本 : 对应项目中git版本管理中的版本,默认 master

ba29992a8562bf0f558de9f9dcee8a65.png

BasicAlgorithm

BasicAlgorithm:包含LogisticRegression

svm, lightgbm, xgboost

  • MLflow Tracking Server URI

  • 实验名称 :任务运行时所在的实验

  • 注册模型 :是否注册模型

  • 注册的模型名称 : 注册的模型名称

  • 数据路径 : 文件/文件夹的绝对路径

  • 参数 : 初始化模型时的参数

  • 算法 :选择的算法,支持 LR, SVM, LightGBM, XGBoost.

  • 参数搜索空间 : 运行对应算法的参数搜索空间

该功能预置算法实现由

https://github.com/apache/dolphinscheduler-mlflow 提供

f2dfc53d5ca3a70c6198cefea303e40f.png

AutoML

AutoML: AutoML工具,支持 autosklearn 

flaml

  • MLflow Tracking Server URI

  • 实验名称 :任务运行时所在的实验

  • 注册模型 :是否注册模型

  • 注册的模型名称 : 注册的模型名称

  • 数据路径 : 文件/文件夹的绝对路径

  • 参数 : 初始化AutoML训练器时的参数

  • AutoML工具 : 目前支持 autosklearn , flaml

该功能预置算法实现由 https://github.com/apache/dolphinscheduler-mlflow 提供

MLflow Models

MLFLOW: 直接读取模型地址,启动inference服务

  • MLflow Tracking Server URI

  • 部署模型的URI :MLflow 服务里面模型对应的URI

  • 部署端口 :部署服务时的端口

DOCKER: 将模型打包成DOCKER镜像后运行

  • MLflow Tracking Server URI

  • 部署模型的URI :MLflow 服务里面模型对应的URI

  • 部署端口 :部署服务时的端口

Docker Compose: 使用Docker Compose 部署模型

  • MLflow Tracking Server URI

  • 部署模型的URI :mlflow 服务里面模型对应的uri

  • 部署端口 :部署服务时的端口

  • 最大cpu限制 :容器占用的最大CPU

  • 最大内存限制 :容器占用的最大内存限制

OpenMLDB Task Plugin

DS

0cfe408b16619efe411f8f9bb8f4c5cb.png

03

Jupyter 组件和 MLflow 组件的使⽤

Jupyter 组件使用

DS

环境配置

在common.properties 中即可配置conda环境变量

13afc18b60e355438ff91178b78fe4ea.png

创建一个conda环境,用于执行Jupyter Notebook:

f92c3f0d8600c8121449f17a1415ae1a.png

如何调起 Jupyter 任务运行 Notebook?

  1. 准备一个Jupyter Notebook

  2. 使用DolphinScheduler创建Jupyter任务

  3. 运行工作流

以下为一个使用SVM和iris数据集训练分类模型的Notebook

Notebook接收以下四个参数

  1. experiment_name:记录到MLflow服务中心的实验名称

  2. C:SVM参数

  3. kernel:SVM参数

  4. model_name:注册到MLflow模型中心的模型名字

1fefa7fdef137e1bd9c6e94e25c62257.png

39371d5c573a03d0006998e11e440d80.png

拖拽Jupyter任务组件到画布,创建一个任务,如下:

该任务会运行

Notebook: /home/lucky/WhaleOps/jupyter/MLOps/training_iris_svm.ipynb,并将运行结果保留在路径 /home/lucky/WhaleOps/jupyter/MLOps/training_iris_svm/03.ipynb 中。

并且运行时参数 C 设置为"1.0", kernel 设置为 "linear",

运行的conda环境为kernel: "jupyter_test"。

f5b1877f27b7fea917a3f93f862f50bc.png

我们可以再复制出两个相同的任务,并使用不同的参数。因此我们得到了三个不同参数的Jupyter任务,如下:

9cf3a55156a7ecadfec3652449f5152b.png

创建完成后,我们可以在工作流定义中看到我们新建的工作流(该工作流包含了3个Jupyter任务),点击红色箭头后,可以执行改工作流(也可以点击绿色箭头,设定定时任务满足实现定时运行工作流的需求)

d8e9d4dce67b8b8328395a17f146fe15.png

工作流运行后,可以点击任务实例查看每个任务的执行情况,点击红色箭头指向的按钮即可查看每个任务执行的日志。

8ac29e4f1582e460409e3036beccebf4.png

1e89cb2f458249ccfc7835b7ee6b2b98.png

使用场景

  • 数据探索与分析

  • 训练模型

  • 定期线上数据监控

MLflow 组件使用

DS

环境配置

  • conda 环境配置

0034830228ac3892a5434710771e4686.png

创建完环境后,后续每个任务都可以在Environment Name中选择我们刚创建的环境。

72bd404cdfa42d600b05b4b4cb6245ad.png

  • MLflow Service

安装MLflow, 使用 pip install mlflow 进行安装,即可启动 MLflow service。

55dda0263203d0409e10006864bd8344.png

更稳健的启动方式:

  • 使用Docker Compose(如 https://github.com/Toumash/mlflow-docker)

  • 使用helm (如 https://artifacthub.io/packages/helm/cetic/mlflow)

使用MLflow任务训练模型

DS

配置完环境后,如何使用MLflow训练任务?

  1. 准备一个数据集

  2. 使用DolphinScheduler创建MLflow训练任务

  3. 运行工作流

以下是一个iris的csv格式的数据集

f19c67593d33b1f7af40e5ebac4e3c37.png

举例创建工作流如下,包含两个MLflow任务

735062435606a851d96b917eec427160.png

任务一: 使用svm训练iris分类模型,并设置如下参数,其中,超参数搜索空间用于调参使用,若不填,则不搜索超参数。

f6434d887c110ada5da4206aec9a6a79.png

任务二:使用AutoML方法训练模型,AutoML工具使用flaml,并设置搜索时间为60秒,并只允许使用 lgbm, xgboost 作为estimator。

554a99fe7c405129c9a9d2eef85c6d93.png

创建完工作流后,我们可以点击红色箭头指向的按钮来立即执行工作流。

4292c6d9f9f99546fee7f72eba22d93b.png

工作流中的任务实例

2a6122ff5b8119d1724904aed7b7b8c2.png

执行后的任务实例详情

02129696abae23617f48fc1c292d742d.png

使用MLflow 部署任务

DS

  1. 选择要部署的模型版本

  2. 使用DolphinScheduler创建MLflow部署任务

  3. 简单测试接口

上文中我们已经注册了在MLflow模型中心中注册了一些模型,我们可以打开 127.0.0.1:5000中看到模型的版本,如下

451ce7811cced0e93f67e0e5c606a855.png

选择部署模型版本

创建一个MLflow Models的任务,指定模型未 iris_model, 版本为 Production (生产版本),设置监听端口为7000

a242b4e7317fd75ca2ff55012c3d5aad.png

确定模型URI和监听端口

0ecf52aeaade85a6fb661b31090008ed.png

具体运行机制

5db9f30ecca9256d3101168a5b7cd59e.png

测试运行结果,可自定义

Jupyter + MLflow 联合使用

DS

训练完模型后自动部署,以下为例子:

引用我们上面创建的工作流(Jupyter训练模型,MLflow部署模型)作为子工作流,并串联一起形成一个新的工作流即可。

7287b4e740873b451d0bf38e8d890731.png

0a722edacfe751f46b6fdfe38ba062a2.png

b72a24504ef72d2f3dbc4429027d30b4.png

思考:Jupyter+MLflow还能做些什么?再加上OpenMLDB呢?

04

Apache DolphinScheduler 与 MLOps 结合的计划

MLOps  Landscape

DS

dae9fb0a90cc2fbb5ffadaed94f69566.png

上图为机器学习相关工具和平台的展示图,Apache DolphinScheduler 未来将有选择地支持其中一些使用范围较广,使用价值较高的工具和平台。

未来MLOps组件支持

DS

0742a5b5edc15f4374bbd7a6f42f764f.png

未来,Apache DolphinScheduler 将支持的MLOps组件主要分为三个模块,包括数据治理、模型和部署,涉及到的组件主要有 DVC(Data Version Control),集成Kubeflow建模,提供Seldon Core、BentoML、Kubeflow等部署工具,以适用不同场景使用需求。

如何集成更多工具,让Apache DolphinScheduler更好地服务用户,是我们长期的思考话题,欢迎更多对MLOps或开源感兴趣的小伙伴参与共建!

参与贡献

随着国内开源的迅猛崛起,Apache DolphinScheduler 社区迎来蓬勃发展,为了做更好用、易用的调度,真诚欢迎热爱开源的伙伴加入到开源社区中来,为中国开源崛起献上一份自己的力量,让本土开源走向全球。

d76715cb56ced53552a4dacebf08250b.png

参与 DolphinScheduler 社区有非常多的参与贡献的方式,包括:

554fce1c5bf82070844dde81720f1c1f.png

贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。

社区汇总了以下适合新手的问题列表:https://github.com/apache/dolphinscheduler/issues/5689

非新手问题列表:https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22

如何参与贡献链接:https://dolphinscheduler.apache.org/zh-cn/docs/development/contribute.html

来吧,DolphinScheduler开源社区需要您的参与,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是巨大的。

参与开源可以近距离与各路高手切磋,迅速提升自己的技能,如果您想参与贡献,我们有个贡献者种子孵化群,可以添加社区小助手微信(Leonard-ds) ,手把手教会您( 贡献者不分水平高低,有问必答,关键是有一颗愿意贡献的心 )。

添加小助手微信时请说明想参与贡献。

来吧,开源社区非常期待您的参与。

更多精彩推荐

‍☞日均 6000+ 实例,TB 级数据流量,Apache DolphinScheduler 如何做联通医疗大数据平台的“顶梁柱”‍

☞达人专栏 | 还不会用 Apache Dolphinscheduler?大佬用时一个月写出的最全入门教程【二】

☞Apache Dolphinscheduler 5月Meetup:6个月重构大数据平台,帮你避开调度升级改造/集群迁移踩过的坑

☞金融任务实例实时、离线跑批,Apache DolphinScheduler 在新网银行的三大应用场景与五大优化

☞中国联通改造 Apache DolphinScheduler 资源中心,实现计费环境跨集群调用与数据脚本一站式访问

☞又是一年开源之夏,八大课题项目奖金等你来拿!

我知道你在看

c0bca3784412c123b9a82f49aba2c8e1.png

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DolphinScheduler社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值