周捷光 开源社KAIYUANSHE
摘要
Apache DolphinScheduler 3.1.0发版后,添加了诸多AI组件,帮助用户在Apache DolphinScheduler上更方便地构建机器学习工作流。本文介绍如何建立DolphinScheduler与一些机器学习的环境,并以实验案例介绍MLflow组件和DVC组件的使用。
01
DolphinScheduler与机器学习环境
01
实用项目
所有的代码可在 https://github.com/jieguangzh...获取
git clone https://github.com/jieguangzh...
git checkout dev
02
安装环境
Conda
略,按照官网安装即可,并将conda路径加入到环境变量
执行安装相关包, 安装后mlflow
, dvc
命令会安装到conda的bin目录下。
pip install mlflow==1.30.0 dvc
Java8环境
sudo apt-get update
sudo apt-get install openjdk-8-jdk
java -version
配置Java环境变量, ~/.bashrc 或者 ~/.zshrc
# 确认你的jdk的目录是否为这个,配置环境变量
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
Apache DolphinScheduler 3.1.0
下载DolphinScheduler 3.1.0
进入以下目录(可以在其他目录安装,为了方便复现,本文在以下目录安装)
cd first-example/install\_dolphinscheduler
install DolphinScheduler
wget https://dlcdn.apache.org/dolp...
tar -zxvf apache-dolphinscheduler-3.1.0-bin.tar.gz
rm apache-dolphinscheduler-3.1.0-bin.tar.gz
配置DolphinScheduler中的Conda环境和Python环境
配置conda环境和默认python环境
cp common.properties apache-dolphinscheduler-3.1.0-bin/standalone-server/conf
echo "export PATH=$(which conda)/bin:\\$PATH" >> apache-dolphinscheduler-3.1.0-bin/bin/env/dolphinscheduler\_env.sh
echo "export PYTHON\_HOME=$(dirname $(which conda))/python" >> apache-dolphinscheduler-3.1.0-bin/bin/env/dolphinscheduler\_env.sh
dolphinscheduler-mlflow
配置在使用MLFLOW组件时会引用Github上的dolphinscheduler-mlflow项目,如网络无法畅通链接,可以按一下步骤替换仓库源
首先执行
git clone https://github.com/apache/dolphinscheduler-mlflow.git
然后修改common.properties中
ml.mlflow.preset_repository
字段值为下载后的绝对路径即可
启动DolphinScheduler
start DolphinScheduler
cd apache-dolphinscheduler-3.1.0-bin
bash bin/dolphinscheduler-daemon.sh start standalone-server
可以通过以下命令查看日志
tail -500f standalone-server/logs/dolphinscheduler-standalone.log
启动后,稍等一会服务启动即可进入DolphinScheduler的页面
打开 http://localhost:12345/dolphinscheduler/ui,可以看到DolphinScheduler页面
账号:admin
,密码:dolphinscheduler123
MLflow
MLflow Tracking Server启动比较简单,可简单通过命令docker run --name mlflow -p 5000:5000 -d jalonzjg/mlflow:latest
启动即可
打开 http://localhost:5000,可以看到MLflow模型和实验管理的页面
该镜像的Dockerfile可见 first-example/docker-mlflow/Dockerfile
02
组件介绍
本文主要用到以下5个类型的组件:
01
Shell组件
SHELL组件用于运行shell类型任务。
02
Python组件
PYTHON组件用于运行python类型任务。
03
Conditions组件
CONDITIONS是一个条件节点,根据上游任务运行状态,判断应该运行哪个下游任务。
04
MLFLOW组件
MLFLOW组件用于在DolphinScheduler上运行MLflow Project和基于 dolphinscheduler-mlflow库实现针对分类场景的预置算法和AutoML功能,部署MLflow tracking server上的模型。
05
DVC组件
DVC组件用于在DolphinScheduler上进行机器学习中的数据的版本管理,如将特定数据注册为特定版本,下载特定版本的数据。
以上五个组件中,
- SHELL组件和PYTHON组件为基础组件,可以运行广泛的任务;
- CONDITIONS为逻辑组件,可以动态控制工作流的运行逻辑;
- MLFLOW组件和DVC组件为机器学习类型组件,可以用于方便在工作流上方便使用机器学习场景特性能力。
03
机器学习Workflow
Workflow包含三个部分:
- 第一部分为前置的一些准备,比如数据下载,数据版本管理仓库建立等,为一次性准备工作;
- 第二部分为训练模型工作流:包含数据预处理,训练模型和模型评估;
- 第三部分为部署流程工作流:包含模型部署,接口测试。
01
前置准备工作流
创建一个目录用于存放过程中的所有的数据 mkdir /tmp/ds-ml-example
在项目一开始,我们需要下载实验数据和进行dvc仓库的初始化用于数据版本管理
以下所有命令皆在dolphinscheduler-ml-tutorial/first-example
目录下运行
因为我们通过pydolphinscheduler
提交工作流,所以安装一下 pip install apache-dolphinscheduler==3.1.0
Workflow(download-data):
下载实验数据 命令: pydolphinscheduler yaml -f pyds/download_data.yaml
依次执行以下两个任务
install-dependencies
: 安装下载脚本中需要的python依赖包download-data
: 下载数据集到/tmp/ds-ml-example/raw
Workflow(dvc\_init\_local):
初始化DVC数据版本管理仓库 命令: pydolphinscheduler yaml -f pyds/init_dvc_repo.yaml
依次执行以下任务
create_git_repo
: 本地创建一个空的git仓库init_dvc
: 将仓库转为dvc类型仓库,用于进行数据版本管理condition
: 判断init_dvc
任务执行情况,若成功则执行report_success_message
,否则执行report_error_message
02
训练模型工作流
在训练模型阶段,包含了数据预处理,模型训练,模型评估相关工作。
Workflow(download-data):
数据预处理
命令: pydolphinscheduler yaml -f pyds/prepare_data.yaml
依次执行以下任务
data_preprocessing
: 进行数据预处理,这里为了演示,只做了简单的截断处理upload_data
: 上传数据到仓库中,并注册为特定版本好 v1
下图为git仓库中的信息
Workflow(train\_model):
训练模型
命令: pydolphinscheduler yaml -f pyds/train_model.yaml
依次执行以下任务
clean_exists_data
: 删除可能重复实验时产生的历史数据/tmp/ds-ml-example/train_data
pull_data
: 拉取v1版本的数据到/tmp/ds-ml-example/train_data
train_automl
: 使用MLFLOW
组件的AutoML
功能训练分类模型,并注册到MLflow Tracking Server中,若当前模型版本F1为最高,则注册为Production版本。inference
: 传入要批量推理的小部分数据,使用mlflow
CLI 进行批量推理evaluate
: 获取inference推理的结果,对模型再次进行简单的评估,包括新数据的指标,预测的label分布等。
其中train\_automl运行完成后可以在MLflow Tracking Server ( http://localhost:5000 ) 中看到对应的实验结果以及模型情况
其中evaluate任务运行完,可以查看对应的日志:
03
部署工作流
Workflow(deploy\_model):
部署模型
运行:pydolphinscheduler yaml -f pyds/deploy.yaml
依次运行以下任务:
kill-server
: 关闭之前的服务deploy-model
: 部署模型test-server
: 测试服务
该工作流定义如果手动启动,界面如下,即输入端口号和模型版本号即可。
04
整合工作流
在实际使用中,在工作流稳定迭代后,需要将整个流程串起来,比如说拿到新版本的数据,训练模型,如果模型效果更好,则部署模型。
如下,我们切换到production版本 git checkout first-example-production
两个版本差异:
- 多了一个train\_and\_deploy.yaml 的工作流定义,用于串联各个工作流
- 修改预处理脚本得到v2版本数据
- 将每个子工作流的定义中,是否运行的flag改为
false
,由train_and_deploy.yaml
统一运行.
运行:pydolphinscheduler yaml -f pyds/train_and_deploy.yaml
下图中每个任务皆为子工作流任务,对应上面介绍的的三个工作流。
如下,运行完成后,得到新版模型version2,并且已经注册为Production
04
总结
本文介绍了如何上手Apache DolphinScheduler构建机器学习工作流,希望能给大家带来一些收获:
- 了解如果构建Apache DolphinScheduler, Conda, MLflow 服务环境;
- 能够快速运行一个机器学习工作流。
转载自丨海豚调度
编辑丨王梦玉
*图片来源网络,侵权请联系
相
关
阅
读
投身开源,需要持之以恒的热爱与贡献 —— Apache Spark Committer 姜逸坤
开源码力圆桌文字稿
Jina AI 正式将 DocArray 捐赠给Linux基金会
开源社简介
开源社成立于 2014 年,是由志愿贡献于开源事业的个人成员,依 “贡献、共识、共治” 原则所组成,始终维持厂商中立、公益、非营利的特点,是最早以 “开源治理、国际接轨、社区发展、开源项目” 为使命的开源社区联合体。开源社积极与支持开源的社区、企业以及政府相关单位紧密合作,以 “立足中国、贡献全球” 为愿景,旨在共创健康可持续发展的开源生态,推动中国开源社区成为全球开源体系的积极参与及贡献者。
2017 年,开源社转型为完全由个人成员组成,参照 ASF 等国际顶级开源基金会的治理模式运作。近八年来,链接了数万名开源人,集聚了上千名社区成员及志愿者、海内外数百位讲师,合作了近百家赞助、媒体、社区伙伴。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。