手把手教你上手Apache DolphinScheduler机器学习工作流

 点亮 ⭐️ Star · 照亮开源之路

https://github.com/apache/dolphinscheduler

77425f889e259cead47ed57cd0c8b49a.jpeg

摘要

Apache DolphinScheduler 3.1.0发版后,添加了诸多AI组件,帮助用户在Apache DolphinScheduler上更方便地构建机器学习工作流。

本文介绍如何建立DolphinScheduler与一些机器学习的环境,并以实验案例介绍MLflow组件和DVC组件的使用。


01

DolphinScheduler与机器学习环境

01

实用项目

所有的代码可在 https://github.com/jieguangzhou/dolphinscheduler-ml-tutorial获取

git clone https://github.com/jieguangzhou/dolphinscheduler-ml-tutorial.git
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/dolphinscheduler/3.1.0/apache-dolphinscheduler-3.1.0-bin.tar.gz
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

29b04963e25a4ca2920aaef48ca8b5bd.png

MLflow

MLflow Tracking Server启动比较简单,可简单通过命令docker run --name mlflow -p 5000:5000 -d jalonzjg/mlflow:latest 启动即可

打开 http://localhost:5000,可以看到MLflow模型和实验管理的页面

9186c79e3f8153b50951bfe59e13b00e.png

该镜像的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

依次执行以下两个任务

  1. install-dependencies: 安装下载脚本中需要的python依赖包

  2. download-data: 下载数据集到 /tmp/ds-ml-example/raw

5abb070281856ef070ae91ec1125f897.png

Workflow(dvc_init_local): 初始化DVC数据版本管理仓库

命令: pydolphinscheduler yaml -f pyds/init_dvc_repo.yaml

依次执行以下任务

  1. create_git_repo: 本地创建一个空的git仓库

  2. init_dvc: 将仓库转为dvc类型仓库,用于进行数据版本管理

  3. condition: 判断init_dvc任务执行情况,若成功则执行report_success_message,否则执行report_error_message

baee95376033674eadb6bf0313c3344e.png


02

训练模型工作流

在训练模型阶段,包含了数据预处理,模型训练,模型评估相关工作。

Workflow(download-data): 数据预处理

命令:  pydolphinscheduler yaml -f pyds/prepare_data.yaml

02afaeecf9cfe31d511d80841dc7eb7c.png

依次执行以下任务

  1. data_preprocessing: 进行数据预处理,这里为了演示,只做了简单的截断处理

  2. upload_data: 上传数据到仓库中,并注册为特定版本好 v1

下图为git仓库中的信息

999fd73e497aa4f5af927f3061343c58.png

Workflow(train_model): 训练模型

命令: pydolphinscheduler yaml -f pyds/train_model.yaml

依次执行以下任务

  1. clean_exists_data: 删除可能重复实验时产生的历史数据 /tmp/ds-ml-example/train_data

  2. pull_data: 拉取v1版本的数据到 /tmp/ds-ml-example/train_data

  3. train_automl: 使用MLFLOW组件的AutoML功能训练分类模型,并注册到MLflow Tracking Server中,若当前模型版本F1为最高,则注册为Production版本。

  4. inference: 传入要批量推理的小部分数据,使用mlflow CLI 进行批量推理

  5. evaluate: 获取inference推理的结果,对模型再次进行简单的评估,包括新数据的指标,预测的label分布等。

2e0ac8d7feb339723f64c47349239e7e.png

其中train_automl运行完成后可以在MLflow Tracking Server ( http://localhost:5000 ) 中看到对应的实验结果以及模型情况

051422c856e259f4146e5bb4ce090f91.png

04c1993640b79f7e537b88a7b96e3de3.png


其中evaluate任务运行完,可以查看对应的日志:

934bca56134d7138e7e2630c0354f614.png


03

部署工作流

Workflow(deploy_model): 部署模型

运行:pydolphinscheduler yaml -f pyds/deploy.yaml

依次运行以下任务:

  1. kill-server: 关闭之前的服务

  2. deploy-model: 部署模型

  3. test-server: 测试服务

92f6acd85899a30b00a4056bcc23b185.png

该工作流定义如果手动启动,界面如下,即输入端口号和模型版本号即可。

07410467a0ff99039c7d6f53b515cd73.png


04

整合工作流

在实际使用中,在工作流稳定迭代后,需要将整个流程串起来,比如说拿到新版本的数据,训练模型,如果模型效果更好,则部署模型。

如下,我们切换到production版本 git checkout first-example-production

两个版本差异:

  1. 多了一个train_and_deploy.yaml 的工作流定义,用于串联各个工作流

  2. 修改预处理脚本得到v2版本数据

  3. 将每个子工作流的定义中,是否运行的flag改为false,由 train_and_deploy.yaml 统一运行.

运行:pydolphinscheduler yaml -f pyds/train_and_deploy.yaml

下图中每个任务皆为子工作流任务,对应上面介绍的的三个工作流。

c1076382274de0dffc982968fac2ae0b.png

如下,运行完成后,得到新版模型version2,并且已经注册为Production

4cb67cf0c8ab0f13b3cf358ff9537ce8.png

d17aaf3ab60fc2a11bfbf901b83fc479.png


04

总结

本文介绍了如何上手Apache DolphinScheduler构建机器学习工作流,希望能给大家带来一些收获:

  1. 了解如果构建Apache DolphinScheduler, Conda, MLflow 服务环境;

  2. 能够快速运行一个机器学习工作流。

< 🐬🐬 >

活动推荐

836681bcf5a1d03fb34f03851c5da515.png

海豚调度&Linkis强强结合

探索计算治理难题的终极密码

2022 年 12 月 1 晚 20:00-21:30,Apache DolphinScheduler&Apache Linkis(Incubating) 线上Meetup活动即将来袭!来自DolphinScheduler和Linkis社区的核心贡献者将带来两个项目整合的技术分享,聚焦解决计算治理难题的方法,干货满满,欢迎报名参加!

c68f5970f7e20fd4210d6388516a2484.png扫码报名

b5e21fb049b62cacc623a8bbdbf51044.jpeg

添加小助手入交流群

点击阅读原文报名!

我知道你在看9fb378453383a3baf9fb799c0ad2753b.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
编写QQ机器人可以使用Python的脚本语言,并使用QQ机器人框架(例如CoolQ)来实现。以下是一个简单的步骤,手把手你编写QQ机器人。 首先,你需要安装QQ机器人框架(CoolQ)和Python开发环境。然后,创建一个新的Python脚本文件,例如`qqbot.py`。 在脚本中,首先导入QQ机器人框架的相关模块,例如: ```python from qqbot import QQBotSlot as qqbotslot, RunBot ``` 然后,通过定义一个QQBot插件类来实现自己的机器人逻辑。例如: ```python class MyQQBot(qqbotslot): @staticmethod def onQQMessage(bot, contact, member, content): # 在这里处理收到的QQ消息 if '你好' in content: bot.SendTo(contact, '你好,请问有什么可以帮助您的?') elif '天气' in content: # 在这里添加获取天气信息的逻辑 bot.SendTo(contact, '今天天气晴朗') ``` 在这个例子中,`onQQMessage`方法会在收到QQ消息时被触发,我们可以根据收到的消息内容来做出不同的响应。 最后,在脚本的底部添加启动机器人的代码: ```python if __name__ == '__main__': RunBot() ``` 保存并运行脚本文件,你的QQ机器人就可以开始工作了。 当你的脚本运行时,它会不断监听QQ消息,并根据你在插件类中定义的逻辑进行相应的回复。 当然,这只是一个简单的示例,你可以根据自己的需求进一步扩展和定制你的QQ机器人。你可以添加更多的消息处理逻辑,例如根据关键词回复不同的内容,或者连接其他API获取更丰富的数据,并将其发送给你的QQ联系人。 希望以上的步骤能帮助你手把手地编写QQ机器人!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DolphinScheduler社区

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

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

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

打赏作者

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

抵扣说明:

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

余额充值