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

news2024/11/28 14:33:53

 点亮 ⭐️ 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/85388.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第36篇 网络(六)UDP

导语 这一节讲述UDP编程的知识。UDP&#xff08;UserDatagram Protocol即用户数据报协议&#xff09;是一个轻量级的&#xff0c;不可靠的&#xff0c;面向数据报的无连接协议。对于UDP我们不再进行过多介绍&#xff0c;如果你对UDP不是很了解&#xff0c;而且不知道它有什么用…

web网页设计期末课程大作业——电影介绍5页HTML+CSS制作

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 精彩专栏推荐&#x1f4…

深入理解计算机系统——第十一章 Network Programming

深入理解计算机系统——第十一章 Network Programming11.1 The Client-Server Programming Model11.2 Networks11.3 The Global IP Internet11.3.1 IP Addresses11.3.2 Internet Domain Names11.3.3 Internet Connections11.4 The Sockets Interface11.4.1 Socket Address Stru…

项目要求移动端适配和 分段视觉映射在ECharts框架里的运用【高级ECharts技术】

移动端适配 满足多个查询时的优先级: 请注意,可以同时满足多个查询,并且它们都将由mergeOption合并,mergeOption稍后由merge定义(即更高的优先级)。 默认查询: 如果媒体中有一项不写入查询,则表示“默认值”。也就是说,如果不符合所有规则,则采用此选项。 容器尺寸实…

web前端期末大作业:基于HTML+CSS+JavaScript奥迪企业bootstrap响应式网站

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

在 VMware Workstation 中安装 ESXi 7.x

安装 VMware ESXi 7.x 在 VMware 中安装 VMware ESXi配置 ESXi 客户机网络本文介绍如何在虚拟机中安装 VMware ESXi。在虚拟机中安装ESXi提供了一种无需专用硬件即可尝试该产品的方法。 在 VMware 中安装 VMware ESXi 从 VMware 下载中心下载 ESXi 7.x ISO映像注意:如果有选择…

Java基础之SPI机制

Java基础之SPI机制一、SPI机制的简单示例1、案例分层2、接口3、实现类4、测试类5、结果二、SPI机制的缺陷一、SPI机制的简单示例 1、案例分层 resources 接下来可以在resources下新建META-INF/services/目录&#xff0c;然后新建接口全限定名的文件&#xff1a;com.example.d…

.net开发安卓入门 -记录两个问题处理办法

文章目录问题1、 Could not find 3 Android X assemblies, make sure to install the following NuGet packages解决办法1&#xff1a;解决办法2&#xff1a;问题2、Java.Lang.IllegalArgumentException: com.lhd. iml6yu: Targeting S (version 31 and above) requires that o…

计算机毕业设计 基于HTML+CSS+JavaScript响应式网站健身7页,适配手机端,响应式页面,页面精美,使用bootstrap 框架

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

PEMN~

搬来个来自美国东大的哦~~ 为了处理更复杂的任务&#xff0c;近年来神经网络的规模也在不断变大&#xff0c;如何高效的储存和传输神经网络变得十分重要。另一方面&#xff0c;随着彩票假说&#xff08;Lottery Ticket Hypothesis (LTH)&#xff09;的提出&#xff0c;随机稀疏…

基于java+springboot+mybatis+vue+mysql的私人健身与教练预约管理系统

项目介绍 21世纪&#xff0c;我国就已普及互联网信息&#xff0c;互联网对人们生活中带来了无限的便利。像大部分机构都在开发自己的管理系统&#xff0c;由传统的管理模式向互联网发展&#xff0c;如今开发自己的系统是时代发展的必然产物。那么开发私人健身与教练预约管理系…

[附源码]Python计算机毕业设计电影票购票系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等…

微服务框架 SpringCloud微服务架构 分布式事务 38 动手实践 38.9 Saga 模式

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 分布式事务 文章目录微服务框架分布式事务38 动手实践38.9 Saga 模式38.9.1 Saga 模式38.9.2 四种模式对比38 动手实践 38.9 Saga 模式 38…

删除压缩包密码

压缩包设置了加密&#xff0c;需要输入压缩包密码才能够顺利解压文件出来。但是有些时候&#xff0c;一些文件只需要一段时间内要加密&#xff0c;之后文件不需要加密了&#xff0c;每次解压文件的时候还是需要输入压缩包密码才行&#xff0c;就很麻烦&#xff0c;那么RAR压缩包…

快速搭建 单体SpringCloudAlibaba 微服务

本章主要讲述快速构建一套springcloud alibaba微服务&#xff0c;一切从简 nacos官网 https://nacos.io/zh-cn/docs/quick-start.html 1.下载启动nacos注册中心 Git地址 https://github.com/alibaba/nacos/releases 1.1 nacos自带默认数据库 derby&#xff0c;集群情况下持久…

JVM(内存划分+类加载+GC)

目录 &#x1f432; 1. JVM 内存划分 &#x1f432; 2. JVM 类加载 &#x1f984; 2.1 类型加载是干啥的 &#x1f984; 2.2 类加载的简略流程 &#x1f984; 2.3 什么时候会进行类加载 &#x1f984; 2.4 双亲委派模型 &#x1f432; 3. GC 垃圾回收机制 &…

图像的OTSU阈值化、双阈值化、半阈值化的原理及OpenCV代码实现

本文的基础是OpenCV的函数threshold()&#xff0c;关于函数threshold()的详细介绍&#xff0c;大家可以参考下面这篇博文&#xff1a; https://www.hhai.cc/thread-162-1-1.html 一、图像的OTSU阈值化 在阈值化处理中&#xff0c;OTSU是一种常用的算法&#xff0c;中文译为大津…

JavaEE-多线程初阶2

✏️作者&#xff1a;银河罐头 &#x1f4cb;系列专栏&#xff1a;JavaEE &#x1f332;“种一棵树最好的时间是十年前&#xff0c;其次是现在” 目录Thread类及常见方法获取当前线程引用休眠当前线程线程的状态线程的所有状态线程状态多线程的意义多线程带来的的风险-线程安全…

Python课程设计题目

文章目录1.基于Python的XX管理系统。2.基于Python的XX工具开发1.基于Python的XX管理系统。 实例要求&#xff1a;采用面向对象或是字典保存实例的属性信息。 功能要求&#xff1a;提供增加&#xff0c;删除&#xff0c;修改&#xff0c;单个查询&#xff0c;查询所有&#xff…

NFC标签 “ PN29_S

产品参数产品参数 产品型号 PN29_S 产品尺寸 (mm) 9546.45.4 显示技术 E ink 显示区域 (mm) 29(H)66.9(V) 分辨率 (像素) 296128 像素尺寸(mm) 0.2270.226 显示颜色 黑/白 视觉角度 180 工作温度 0℃ - 50℃ 电池 无需电池 工作频率 13.56 MHZ NF…