DolphinScheduler 快速构建 Hugging Face 文本分类工作流,基于工作流的机器学习训练部署太强了!...

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

https://github.com/apache/dolphinscheduler

d28a257932c27f0881f1117462343443.png

01.

d3d18a99f7a77938aa54c06168c56a04.png

摘要

Hugging Face transformers 是一个用于构建、训练和部署最先进的NLP 模型的开源项目。

本文介绍如何基于DolphinScheduler和Hugging Face transformers来构建可复用的高效文本分类的工作流,并使用MLflow管理实验和模型。

最终产物:可以指定工作流运行参数一键训练和管理模型,并且通过MLflow来关联模型部署,选择模型名字和版本,对接部署工作流。

02.

92e5b28ce1644b1e5b57c13108ab1a98.png

安装

01

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

02

Apache DolphinScheduler 3.1.1

详细安装可见官网:https://dolphinscheduler.apache.org/en-us/docs/latest/user_doc/guide/installation/standalone.html

下载DolphinScheduler 3.1.1

# 进入需要安装DolphinScheduler的目录
mkdir dolphinscheduler && cd "$_"
## install DolphinScheduler
wget https://mirrors.tuna.tsinghua.edu.cn/apache/dolphinscheduler/3.1.1/apache-dolphinscheduler-3.1.1-bin.tar.gz
tar -zxvf apache-dolphinscheduler-3.1.1-bin.tar.gz
rm apache-dolphinscheduler-3.1.1-bin.tar.gz

启动DolphinScheduler

## start DolphinScheduler
cd apache-dolphinscheduler-3.1.1-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

41ea2bcddd3d0586b00c0014c09d3c09.png

03

MLflow

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

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

f776b9d46543a5fc1cf488ffb2ccddaa.png

03.

1ab749b377090694e7a7c6f88f33b415.png

工作流创建

01

环境准备

拉取代码

git clone https://github.com/jieguangzhou/Dolphinscheduler-NLP-Workflow.git
cd Dolphinscheduler-NLP-Workflow

创建环境transformers-textclassification ,安装依赖,用于运行工作流。

conda create -n transformers-textclassification python==3.8 -y
conda activate transformers-textclassification
pip install -r requirements.txt

配置ds任务执行环境,如下图所示,让Python组件执行的环境为transformers-textclassification Conda环境。

3a05cc5267c4087ac537807643eb1a07.png

# 请按服务器实际情况修改conda路径
export PATH="~/anaconda3/bin:$PATH"
source activate transformers-textclassification
PYTHON_HOME=$(which python)

02

提交工作流

运行以下命令提交工作流:

# 配置python gateway的连接信息
bash init_pyds.sh
# 提交工作流
python pyds.py

03

工作流定义

工作流包含两个,训练模型工作流部署模型工作流。本文将重点介绍如何构建可复用的模型训练工作流。

训练模型工作流

模型训练的工作流包含了三个任务:

  • data_preprocessing: 数据预处理,主要为文本数据中的切词等操作,具体实现见data_preprocessing.py

  • training:模型训练,主要为训练文本分类模型,具体实现见 [training.py](http://training.py)

  • mlflow_track: 将训练出来的模型文件,执行参数,和评估指标,记录到mlflow tracking server中,具体实现见mlflow_track.py

da3ee12dd26e3919740acd0d752c863f.png

在构建完工作流后,可以在如下UI界面启动工作流,其中

  • dataset_name: 数据集名字

  • pretrained_model: 要使用的预训练的模型

  • remote_server_uri: mlflow tracking server地址

db21cbb11460a2cf5effd001fa6e4b93.png


部署模型工作流

部署模型的工作流包含4个任务

  • fetch_model: 从mlflow tracking server中拉取指定版本的模型文件,详见 fetch_model.py

  • check_service: 检测模型服务是否开启,若否,则报错,成功则继续往下运行

  • update_model: 使用fetch_model拉取的模型文件,更新模型服务

  • test_service: 更新完成后,运行服务测试

3ae9bec526e159029e6b73fd40bf1d31.png

在构建完工作流后,可以在如下UI界面启动工作流,其中

  • remote_server_uri: mlflow tracking server地址

  • model_name: 部署的模型的名字

  • model_version: 部署的模型的版本号

b192dd11d2e1d398598c218e67ac84ae.png

04.

65b1917c697ae3d72706ac41d5200ad8.png

工作流运行

01

模型训练

接下来会用数据集dataset_name=yelp_review_full 训练模型,在工作流执行页面中分别依次(如需要并行多个一起跑,请确认GPU资源足够,并且修改脚本指定GPU资源)使用预训练模型bert-base-cased , microsoft/deberta-base , roberta-base 运行工作流。

如使用roberta-base 时启动界面如下图所示

3158c957a92945e0ba1561f20ee0c062.png

待三个工作流执行完成后,可在mlflow tracking server中查看3个试验相关的指标,如图所示:

d177fd770c8ad6c16fda988e5a3b30e7.png

分别对应模型的三个版本如下

356ddc459e48e9102ab6e8da1f222b58.png

我们可以选择效果最好的模型三(roberta-base , acc为0.62),并将其注册为Production ,用于接下来的模型部署。

b0a81c99d9ccaeb17ad8912c03ba76a1.png

02

模型部署

启动一个模型服务,大家可以根据自己喜好来封装模型服务,如打包成Docker,或者使用更强大的模型部署框架如*BentoML*,Seldon Core等。

# 启动服务
uvicorn predict_service:app

运行工作流,如图所示

e06085d6a8ffbccdba386bd2cbd0300a.png

工作流如下图运行完成

20c52a284ad1a7c002d51f30f6322bd8.png

其中模型服务端,在工作流运行期间分别收到以下请求。

0f0e733e5984f51fd23c0b1829a73c9c.png

05.

54e4069a2e1b5520637e0d1edddecaa9.png

总结

本文主要介绍了在Apache DolphinScheduler使用Hugging Face的transformers 库构建文本分类的工作流。

基于工作流的形式来执行机器学习训练任务与将全部代码写在一个脚本(或者写在一个Jupyter Notebook)的优点在于:

  1. 可以基于DolphinScheduler调度系统的特性,稳定执行机器学习各个任务,容错机制,调度机制以及支持丰富的执行任务类型可以更好地运行机器学习工作流,包括模型训练,模型部署等工作流。

  2. 工作流的复用,以及工作流内的任务复用,能够提高算法团队研发效率。如上述的模型训练工作流,以及模型部署工作流,针对各自团队的特性进行适配,即可长期使用。

  3. 制作完成的工作流,可以使用DolphinScheduler的接口来可以对接企业内部系统,以DolphinScheduler作为AI平台的底层调度系统,再在业务侧的系统实现对应的调用。

参与贡献

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

04902ace82115ede2850c7aa71e0e9b7.png

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

0445218bf356581bd024ead7ca57e408.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/community/development/contribute.html

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

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

ef1b5002b916d5976aa6c7388a481023.jpeg

添加社区小助手微信(Leonard-ds) 

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

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

< 🐬🐬 >

更多精彩推荐

DolphinScheduler 登陆 AWS AMI 应用市场!

☞DolphinScheduler 机器学习工作流预测今年 FIFA 世界杯冠军大概率是荷兰!

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

☞突破单点瓶颈、挑战海量离线任务,Apache Dolphinscheduler在生鲜电商领域的落地实践

Apache DolphinScheduler 获评「2022 年度优秀开源技术团队」

☞【Meetup讲师】您有一张社区认证讲师证书未领取,点击领取!

最佳实践 | 如何基于GitHub Actions创建 DolphinScheduler Python API的CI/CD?

我知道你在看7419c4177be4b4bbb7590be57f62ef16.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DolphinScheduler社区

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

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

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

打赏作者

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

抵扣说明:

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

余额充值