python dag调度系统开发_基于机器学习的DAG调度平台

什么是DAG?

有向无环图

树形结构:除根节点,每个节点有且仅有一个上级节点,下级节点不限。根节点没有上级节点。

图结构:每个节点上级、下级节点数不限。

DAG调度平台的定义及场景

任务调度是在各行各业是个基础问题,当任务复杂同时存在任务复杂依赖的时候,就需要DAG调度。如:机器学习的可视化建模(PAI平台、第四范式),数据的抽取、转换、加载(ETL),在业务复杂情况下就需要DAG的调度管理等

接下来说说基于机器学习的DAG调度平台

系统架构

构图:

系统架构说明

DAG调度平台主要的职责是:

1.接受机器学习web传过来的yaml文件(dag定义文件)

2.解析yaml文件,变成结构化数据存储到mysql数据库

3.开始调度dag定义各个算子任务

4.算子执行引擎根据算子类型分发到各个环境进行执行

名词说明

yaml:类型XML的数据描述语言,语法更加简单

算子:机器学习的DAG中各个节点即为算子,在算子执行引擎中称为算子任务。算子背后是python实现的一些算法组件

1.机器学习前端交互

机器学习平台前端主要是将机器学习的流程装成一个dag,定义各个算子的出入参,以及算子的配置参数,组装成一个yaml文件,传给DAG调图平台(Azkaban是zip方式交互,Airflow是通过py文件定义,Oozie通过xml)。

一个完整的DAG定义应包含以下算子:

数据读取/数据预处理

特征功能

模型训练

模型预测

模型评估

模型部署

下图是个简化版的DAG定义,除去了模型部署算子

2.DAG调度平台各模块介绍

dag engine(图引擎):

负责解析传入的yaml文件。根据yaml的配置生成算子的出入参以及运行配置信息保存到数据库。同时负责任务的调用。

opertor engine(算子执行引擎):

负责算子执行,根据算子类型分发到不同的执行器中。统一的启停接口,日志查询接口,任务状态查询接口

executor(执行器):

local executor(本地执行器):

执行单机的python任务,执行单机文件方式的机器学习算法。当没有大数据平台的时候,只能通过本地执行器执行DAG

dc executor(分布式计算平台执行器):

将python算法发送至大数据计算平台,使用大数据平台资源运行算子。

base executor (执行器接口):

以后的执行器实现需要实现这个基类,方便拓展。

3.分布式计算平台交互

针对不同的的计算平台实现base executor去自定义扩充。本系统通过dc executor实现,

分布式计算平台需要将python code通过http接口发送过去进行执行。

部署架构图

separation方式

mixture方式

实现细节

yaml定义格式

dag:

operator_list: [algo_local_read_file_45_1517360824080,algo_local_split_data_45_1517360836712,algo_local_model_2c_l_45_1517362008544,algo_local_model_predict_45_1517362016532,algo_local_model_2c_eval_45_1517362022452,algo_local_model_gbdt_111_1517801573063]

operator_rels:

algo_local_read_file_45_1517360824080: [{"target":"algo_local_split_data_45_1517360836712","source_index":0,"target_index":0}]

algo_local_split_data_45_1517360836712: [{"target":"algo_local_model_2c_l_45_1517362008544","source_index":0,"target_index":0},{"target":"algo_local_model_gbdt_111_1517801573063","source_index":1,"target_index":0}]

algo_local_model_predict_45_1517362016532: [{"target":"algo_local_model_2c_eval_45_1517362022452","source_index":0,"target_index":0}]

algo_local_model_gbdt_111_1517801573063: [{"target":"algo_local_model_predict_45_1517362016532","source_index":0,"target_index":0}]

algo_local_model_2c_l_45_1517362008544: [{"target":"algo_local_model_predict_45_1517362016532","source_index":0,"target_index":1}]

operator_details:

algo_local_read_file_45_1517360824080:

algo_name: algo_local_read_file

data_type: 本地python

type: 数据源

cn_name: 读文件

coordinate:

x: 137

y: 69

params:

data_id: 40

algo_local_split_data_45_1517360836712:

algo_name: algo_local_split_data

data_type: 本地python

type: 数据预处理

cn_name: 拆分组件

coordinate:

x: 226

y: 164

params:

split_type: 1

ext1: 0.8

ext2: null

algo_local_model_2c_l_45_1517362008544:

algo_name: algo_local_model_2c_l

data_type: 本地python

type: 模型算法

cn_name: 逻辑回归二分类

coordinate:

x: 130

y: 262

params:

x_cols: [LIMIT_BAL,SEX,EDUCATION,MARRIAGE,AGE,PAY_0,PAY_2,PAY_3,PAY_4,PAY_5,PAY_6,BILL_AMT1,BILL_AMT2,BILL_AMT3,BILL_AMT4,BILL_AMT5,BILL_AMT6,PAY_AMT1,PAY_AMT2,PAY_AMT3,PAY_AMT4,PAY_AMT5,PAY_AMT6]

y_col: next_month

pre_value: 1

penalty: l2

C: 1

max_iter: 100

senior: true

class_weight: null

dual: false

fit_intercept: true

intercept_scaling: 1

multi_class: ovr

n_jobs: 1

random_state: null

solver: liblinear

tol: 0.0001

verbose: 0

warm_start: false

algo_local_model_predict_45_1517362016532:

algo_name: algo_local_model_predict

data_type: 本地python

type: 模型预测

cn_name: 模型预测

coordinate:

x: 258

y: 396

params:

x_cols: [LIMIT_BAL,SEX,EDUCATION,MARRIAGE,AGE,PAY_0,PAY_2,PAY_3,PAY_4,PAY_5,PAY_6,BILL_AMT1,BILL_AMT2,BILL_AMT3,BILL_AMT4,BILL_AMT5,BILL_AMT6,PAY_AMT1,PAY_AMT2,PAY_AMT3,PAY_AMT4,PAY_AMT5,PAY_AMT6]

algo_local_model_2c_eval_45_1517362022452:

algo_name: algo_local_model_2c_eval

data_type: 本地python

type: 模型评估

cn_name: 二分类评估

coordinate:

x: 270

y: 503

params:

y_col: next_month

pre_col: predict_result

pre_value: 1

algo_local_model_gbdt_111_1517801573063:

algo_name: algo_local_model_gbdt

data_type: 本地python

type: 模型算法

cn_name: GBDT

coordinate:

x: 432.1111111111111

y: 295.3333333333333

params:

x_cols: [LIMIT_BAL,SEX,EDUCATION,MARRIAGE,AGE,PAY_0,PAY_2,PAY_3,PAY_4,PAY_5,PAY_6,BILL_AMT1,BILL_AMT2,BILL_AMT3,BILL_AMT4,BILL_AMT5,BILL_AMT6,PAY_AMT1,PAY_AMT2,PAY_AMT3,PAY_AMT4,PAY_AMT5,PAY_AMT6]

y_col: next_month

pre_value: 1

n_estimators: 10

max_depth: 5

senior: true

criterion: friedman_mse

init: null

learning_rate: 0.1

loss: deviance

max_features: null

max_leaf_nodes: null

min_impurity_decrease: 0

min_impurity_split: null

min_samples_leaf: 1

min_samples_split: 2

min_weight_fraction_leaf: 0

presort: auto

random_state: null

subsample: 1

verbose: 0

warm_start: false

params:

translate: [41,-20]

scale: 0.9

dag engine实现逻辑

1.当前节点,采用广度优先遍历获取所有需要执行的算子(节点)信息。

2.轮询所有算子(节点),判断上算子(节点)是否全部执行完成,执行完成开始执行当前算子(节点)。

3.发送请求到operator engine开始执行当前算子(节点)任务。

operator engine实现逻辑

1.主进程接受task请求,添加任务执行队列、任务监听队列。

2.任务执行进程轮询接受到的队列,根据不同任务类型调用不同executor

3.任务监听进程轮询接受到的队列,调用不同executor查询任务执行状态,是任务执行的最终状态(成功、失败)回调dag engine

local executor实现逻辑

1.local executor接受任务,发送到队列中。

2.local worker进程池(cpu数*2个进程),轮询获取队列中任务,使用importlib的python去执行对应算子。

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

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

相关文章

轻量级人脸识别算法

1 概述 轻量级人脸识别算法

python元组与列表的区别、简答题_细解python面试题(一)元组和列表的区别

可能略去了一些内容。1、列表VS元组在python编程中,我们经常搞不懂列表和元组的区别,或者哪些函数可以用于列表,哪些用于元组,那么跟随本文我们来深入的探索。2、元组元组是值的集合,我们用圆括号来申明它。元组中的类…

Yolo家族算法分析

1 历史简介 2 YOLO算法思想 YOLO算法的基本思想: (1)将图片划分为SSS \times SSS个网格; (2)计算每个边界框和置信度; (3)计算每个网格属于某个类别的概率; &…

u8 附件上传后存放路径_织梦DedeCms附件按月份保存的修改方法

正常情况下,dedecms织梦系统的图片附件是按日保存的,一天一个文件夹, 时间长了, 这样在allimg中就会生成很多文件夹, 不方便管理.虽然,dedecms织梦的后台设置有”附件保存形式”的先项, 但功能太弱,如果是在后台上传和…

推荐系统--矩阵分解(2)

推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 3 BiasSVD:考虑偏置 有一些用户会给出偏高的评分,有一些物品也会收到偏高的评分,比如电影观众为…

tga文件怎么打开_教你win10系统怎么打开stp文件

stp文件怎么打开呢?近来有很多小伙伴反映有朋友发送了一个stp文件给它,搞了半天也没能打开。其实打开stp文件很简单,不过前提是需要有绘图软件。我给大家整理了打开stp文件的图文教程,赶紧来瞧瞧吧有些朋友在使用win10系统的过程中…

python爬取电子病历_一种基于中文电子病历的实体识别方法技术

本发明专利技术提供了一种基于中文电子病历的实体识别方法,涉及医疗实体识别技术领域。针对目前国内缺少公开中文电子病历标注语料库的缺陷,本发明专利技术通过构建整理医学词典,提出了一种半自动语料库标注方法,节省了人工标注的…

推荐系统--矩阵分解(4)

推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 7 基于情感分析的矩阵分解 7.1 引入 【摘要】推荐系统旨在基于丰富的信息预测用户的偏好,例如用户评分、人口统计和评论…

yarn 卸载包_0609-6.1.0-如何卸载CDH6.1

1.文档编写目的Fayson在两年前的文章中介绍过CDH的卸载,参考《如何卸载CDH(附一键卸载github源码)》。除非你是使用Cloudera官方提供的一键安装脚本安装的CDH,否则并没有现成的一键卸载的脚本供使用。为了更好的理解CDH的卸载,这里再次简单介…

推荐系统--矩阵分解(3)

推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 5 TimeSVD:增加时间因素 物品的受欢迎度随着时间而改变,例如,电影可以因外部事件(如新电影中演员…

python安装不了是什么问题_安装不上python的模块怎么办?别怕,我这有妙招!

之前我们介绍过如何在Python中安装第三方的包:Python以第三方包丰富而著称,你想要的功能几乎都可以通过pip命令安装,避免什么都要自己重新造轮子尬尴。但是pip安装有两个常见问题,第一是下载慢,第二是无法安装。慢的原…

推荐系统--矩阵分解(5)

推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 8 基于隐式反馈的矩阵分解 8.1 引入 相对于显示反馈的评分数据,隐式反馈有以下几方面的特征: 只有正反馈&…

xss跨站脚本攻击_网络安全xss跨站脚本攻击原理

以下在未经授权的网站操作均为违法行为XSS跨站脚本攻击xss的危害网络钓鱼,盗取各类账号密码我们先来看一下下面的案例:先来记住一下下面中的表我们来做一个转发上面页面显示已经登录,但是突然页面中提醒再此登录此时,我们并没有多…

推荐系统--联邦学习下的矩阵分解(6)

推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 9 应用于联邦学习的矩阵分解 这个部分主要参考以下两篇论文: 2008-Collaborative Filtering for Implicit Feedback Dat…

python类的特殊方法汇总_Python笔记001-类的特殊方法

Python笔记001-类的特殊方法以下是我学习《流畅的Python》后的个人笔记,现在拿出来和大家共享,希望能帮到各位Python学习者。首次发表于: 微信公众号:科技老丁哥,ID: TechDing,敬请关注。本篇主要知识点:类…

什么是联邦学习

联邦学习 1.1 联邦学习的概念 历史:联邦学习最早在 2016 年由谷歌提出,原本用于解决安卓手机终端用户在本地更新模型的问题; 本质:联邦学习本质上是一种分布式机器学习技术,或机器学习框架。 目标:联邦学…

循环自增_大学C语言—循环结构及应用

基础知识常见循环结构及形式for循环for(设置初始值;循环条件判断;设置循环增减量){语句1;语句2;…… 语句n;}while循环while(条件判断){语句1;语句2;……语句n;}do-while循环d…

论文写作的辅助工具

1 英文翻译 translate.google.cn 2 英文句子 我们以前的做法是要求每个同学收集一些经典的句子,现在有一个网站已经把这个工作做好了,这个可以解决60%句子问题,接下来就是写作的逻辑 https://www.phrasebank.manchester.ac.uk/ 3 画图工具…

dac0832控制电机驱动流程图_某驱动电机控制器拆解实拍照片

小编作为一个电控专业100%小白,机缘巧合获得某纯电动汽车驱动电机控制器一台,拆解之,权为业内人士参考之用,文中显得外行、用词不对及谬误之处还请各位大神不吝赐教!外观标牌背面拆解固定托架侧面拆解固定托架拆解固定…

推荐系统--安全联邦矩阵分解(7)

相关论文: Secure Federated Matrix Factorization 论文源代码见: https://github.com/Di-Chai/FedMF 1 摘要 为了保护用户隐私和满足法律法规,联邦(机器)学习近年来获得了广泛的关注。 联邦学习的关键原则是在不需要知道每个用…