一种基于Airflow的模型训练调度方法及装置与流程

文档序号:28168104发布日期:2021-12-24 23:00阅读:139来源:国知局
一种基于Airflow的模型训练调度方法及装置与流程
一种基于airflow的模型训练调度方法及装置
技术领域
1.本发明涉及智能物流技术领域,尤其涉及一种基于airflow的模型训练调度方法及装置。


背景技术:

2.airflow是一个基于python语言的数据处理任务调度和监控工作流的平台,可以用于支撑算法模型的前置离线数据处理等任务。同时,模型训练任务的调度方案也可以基于airflow实现。现有的技术中在利用airflow进行多个模型任务训练调度时,常常使用数据并行的方式进行调度。对于服务器集群来说,数据并行需要提前指定好哪些模型任务在哪台服务器上排队,这种方式需要提前设计,且一个队列跑完不能自动分配其他队列的剩余模型,从调度整体上看不够灵活,且无法根据服务器空闲程度灵活动态分配模型,从而无法充分利用算力资源。可见,现有技术存在缺陷,亟待解决。


技术实现要素:

3.本发明所要解决的技术问题在于,提供一种基于airflow的模型训练调度方法及装置,能够在任一工作流存在处理空闲时为其分配模型训练任务,进而在模型调度中实现了模型并行,有利于充分利用算法资源,提高模型调度的灵活性。
4.为了解决上述技术问题,本发明第一方面公开了一种基于airflow的模型训练调度方法,所述方法包括:
5.确定多个模型训练任务;
6.确定多个服务器节点任务;
7.确定每一所述服务器节点任务对应的子级工作流;每一所述子级工作流中均包括有同一个模型调度函数;所述模型调度函数用于在所述子级工作流存在处理空闲时,为所述子级工作流从所述多个模型训练任务中确定出当前可进行的目标模型训练任务,并根据所述目标模型训练任务为所述子级工作流生成对应的训练节点任务;
8.执行所有所述服务器节点任务对应的子级工作流以完成所述多个模型训练任务。
9.作为一种可选的实施方式,在本发明第一方面中,所述确定多个服务器节点任务,包括:
10.确定父级工作流以及对应的父级工作流参数;所述父级工作流中包括多个服务器节点任务;所述父级工作流参数中包括父级并行度参数,所述父级并行度参数用于指示所述父级工作流中可以同时执行的节点任务的数量。
11.作为一种可选的实施方式,在本发明第一方面中,所述确定每一所述服务器节点任务对应的子级工作流,包括:
12.确定每一所述服务器节点任务对应的子级工作流以及对应的子级工作流参数;所述子级工作流参数中包括子级并行度参数,所述子级并行度参数用于指示所述子级工作流中可以同时执行的节点任务的数量。
13.作为一种可选的实施方式,在本发明第一方面中,所述子级工作流中还包括统计节点任务,用于记录所述子级工作流已经执行的所述训练节点任务对应的所述模型训练任务。
14.作为一种可选的实施方式,在本发明第一方面中,所述确定每一所述服务器节点任务对应的子级工作流以及对应的子级工作流参数,包括:
15.确定多个服务器节点对应的预设工作参数;所述预设工作参数包括并行度参数;
16.在所述父级工作流中遍历所有所述服务器节点,根据每一所述服务器节点对应的预设工作参数,为每一服务器节点对应的服务器节点任务生成对应的子级工作流和子级工作流参数。
17.作为一种可选的实施方式,在本发明第一方面中,所述模型调度函数为所述子级工作流从所述多个模型训练任务中确定出当前可进行的目标模型训练任务的具体方式,包括:
18.所述模型调度函数获取模型列表;所述模型列表中包括有若干个当前未被执行的所述模型训练任务;
19.所述模型调度函数根据预设的选区规则,从所述模型列表中确定出一个目标模型训练任务,并将所述目标模型训练任务从所述模型列表中删除。
20.作为一种可选的实施方式,在本发明第一方面中,所述父级工作流还包括有多个用于获取对应的所述模型训练任务的获取节点;在所述确定父级工作流以及对应的父级工作流参数之后,所述方法还包括:
21.对于所述父级工作流中的每一所述服务器节点任务,将所有所述获取节点确定为该服务器节点任务的上游任务,以建立该服务器节点任务与所有所述获取节点的链接关系。
22.作为一种可选的实施方式,在本发明第一方面中,所述子级工作流中还包括报错节点任务,用于在所述子级工作流执行所述训练节点任务出错时,生成对应的报错信息并推送至对应的终端。
23.本发明第二方面公开了一种基于airflow的模型训练调度装置,其包括:
24.第一确定模块,用于确定多个模型训练任务;
25.第二确定模块,用于确定多个服务器节点任务;
26.第三确定模块,用于确定每一所述服务器节点任务对应的子级工作流;每一所述子级工作流中均包括有同一个模型调度函数;所述模型调度函数用于在所述子级工作流存在处理空闲时,为所述子级工作流从所述多个模型训练任务中确定出当前可进行的目标模型训练任务,并根据所述目标模型训练任务为所述子级工作流生成对应的训练节点任务;
27.执行模块,用于执行所有所述服务器节点任务对应的子级工作流以完成所述多个模型训练任务。
28.作为一种可选的实施方式,在本发明第二方面中,所述第二确定模块确定多个服务器节点任务的具体方式,包括:
29.确定父级工作流以及对应的父级工作流参数;所述父级工作流中包括多个服务器节点任务;所述父级工作流参数中包括父级并行度参数,所述父级并行度参数用于指示所述父级工作流中可以同时执行的节点任务的数量。
30.作为一种可选的实施方式,在本发明第二方面中,所述第三确定模块确定每一所述服务器节点任务对应的子级工作流的具体方式,包括:
31.确定每一所述服务器节点任务对应的子级工作流以及对应的子级工作流参数;所述子级工作流参数中包括子级并行度参数,所述子级并行度参数用于指示所述子级工作流中可以同时执行的节点任务的数量。
32.作为一种可选的实施方式,在本发明第二方面中,所述子级工作流中还包括统计节点任务,用于记录所述子级工作流已经执行的所述训练节点任务对应的所述模型训练任务。
33.作为一种可选的实施方式,在本发明第二方面中,所述第三确定模块确定每一所述服务器节点任务对应的子级工作流以及对应的子级工作流参数的具体方式,包括:
34.确定多个服务器节点对应的预设工作参数;所述预设工作参数包括并行度参数;
35.在所述父级工作流中遍历所有所述服务器节点,根据每一所述服务器节点对应的预设工作参数,为每一服务器节点对应的服务器节点任务生成对应的子级工作流和子级工作流参数。
36.作为一种可选的实施方式,在本发明第二方面中,所述模型调度函数为所述子级工作流从所述多个模型训练任务中确定出当前可进行的目标模型训练任务的具体方式,包括:
37.所述模型调度函数获取模型列表;所述模型列表中包括有若干个当前未被执行的所述模型训练任务;
38.所述模型调度函数根据预设的选区规则,从所述模型列表中确定出一个目标模型训练任务,并将所述目标模型训练任务从所述模型列表中删除。
39.作为一种可选的实施方式,在本发明第二方面中,所述父级工作流还包括有多个用于获取对应的所述模型训练任务的获取节点;所述装置还包括:
40.链接模块,用于在所述第二确定模块确定父级工作流以及对应的父级工作流参数之后,对于所述父级工作流中的每一所述服务器节点任务,将所有所述获取节点确定为该服务器节点任务的上游任务,以建立该服务器节点任务与所有所述获取节点的链接关系。
41.作为一种可选的实施方式,在本发明第二方面中,所述子级工作流中还包括报错节点任务,用于在所述子级工作流执行所述训练节点任务出错时,生成对应的报错信息并推送至对应的终端。
42.本发明第三方面公开了另一种基于airflow的模型训练调度装置,所述装置包括:
43.存储有可执行程序代码的存储器;
44.与所述存储器耦合的处理器;
45.所述处理器调用所述存储器中存储的所述可执行程序代码,执行本发明实施例第一方面公开的基于airflow的模型训练调度方法中的部分或全部步骤。
46.与现有技术相比,本发明实施例具有以下有益效果:
47.本发明实施例中,确定多个模型训练任务;确定多个服务器节点任务;确定每一所述服务器节点任务对应的子级工作流;每一所述子级工作流中均包括有同一个模型调度函数;所述模型调度函数用于在所述子级工作流存在处理空闲时,为所述子级工作流从所述多个模型训练任务中确定出当前可进行的目标模型训练任务,并根据所述目标模型训练任
务为所述子级工作流生成对应的训练节点任务;执行所有所述服务器节点任务对应的子级工作流以完成所述多个模型训练任务。可见,本发明能够利用在多个工作流中调用的同一个调度函数对多个模型训练任务进行统一的调度,从而能够在任一工作流存在处理空闲时为其分配模型训练任务,进而在模型调度中实现了模型并行,有利于充分利用算法资源,提高模型调度的灵活性。
附图说明
48.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
49.图1是本发明实施例公开的一种基于airflow的模型训练调度方法的流程示意图;
50.图2是本发明实施例公开的一种基于airflow的模型训练调度装置的结构示意图;
51.图3是本发明实施例公开的另一种基于airflow的模型训练调度装置的结构示意图;
52.图4是本发明实施例公开的具体实施方案中父级工作流的可视化示意图;
53.图5是本发明实施例公开的具体实施方案中子级工作流的可视化示意图。
具体实施方式
54.为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
55.本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、装置、产品或端没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或端固有的其他步骤或单元。
56.在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
57.本发明公开了一种基于airflow的模型训练调度方法及装置,能够利用在多个工作流中调用的同一个调度函数对多个模型训练任务进行统一的调度,从而能够在任一工作流存在处理空闲时为其分配模型训练任务,进而在模型调度中实现了模型并行,有利于充分利用算法资源,提高模型调度的灵活性。以下分别进行详细说明。
58.实施例一
59.请参阅图1,图1是本发明实施例公开的一种基于airflow的模型训练调度方法的流程示意图。其中,图1所描述的方法可以应用于相应的模型训练终端、模型训练设备或模
型训练服务器中,且该服务器可以是本地服务器,也可以是云服务器。如图1所示,该基于airflow的模型训练调度方法可以包括以下操作:
60.101、确定多个模型训练任务。
61.102、确定多个服务器节点任务。
62.103、确定每一服务器节点任务对应的子级工作流。
63.本发明实施例中,每一子级工作流中均包括有同一个模型调度函数。其中,模型调度函数用于在子级工作流存在处理空闲时,为子级工作流从多个模型训练任务中确定出当前可进行的目标模型训练任务,并根据目标模型训练任务为子级工作流生成对应的训练节点任务。可选的,子级工作流存在处理空闲可以为该子级工作流的当前处理队列中出现了处理空缺可供一个或多个模型训练任务进行处理,例如当该子级工作流的并行度参数为3,也即该子级工作流同时可以处理三个模型训练任务时,若该子级工作流仅同时处理两个任务,则可以认为该子级工作流存在处理空闲,同样,也可以为通过判断该子级工作流的当前工作任务的硬件占比与该子级工作流的硬件最大阈值之间的关系,来判断该子级工作流是否存在处理空闲,例如当该子级工作流的当前工作任务总共占用了40%的cpu,而该子级工作流的cpu最大处理阈值为80%,则此时判断到该子级工作流的当前工作任务的硬件占比小于该子级工作流的硬件最大阈值,从而确定该子级工作流存在处理空闲。
64.104、执行所有服务器节点任务对应的子级工作流以完成多个模型训练任务。
65.可见,实施本发明实施例所描述的方法能够利用在多个工作流中调用的同一个调度函数对多个模型训练任务进行统一的调度,从而能够在任一工作流存在处理空闲时为其分配模型训练任务,进而在模型调度中实现了模型并行,有利于充分利用算法资源,提高模型调度的灵活性。
66.作为一种可选的实施方式,步骤102中的,确定多个服务器节点任务,包括:
67.确定父级工作流以及对应的父级工作流参数。
68.其中,父级工作流中包括多个服务器节点任务。可选的,父级工作流参数中包括父级并行度参数,父级并行度参数用于指示父级工作流中可以同时执行的节点任务的数量。可选的,父级工作流参数中还可以包括执行时间、执行次数、执行间隔时间、执行出错重试参数等参数,本发明不做限定。
69.本发明实施例中,父级工作流或子级工作流均采用dag(directed acyclic graph,有向无环图)的形式进行建立和处理监控,其均是在airflow平台上进行的。
70.可见,通过实施该可选的实施方式,能够在父级工作流中建立多个服务器节点任务,后续再确定每一服务器节点任务对应的子级工作流,从而在整个系统架构中建立了层级的工作流模式,便于通过层级结构来管理工作流的运行。
71.作为一种可选的实施方式,确定每一服务器节点任务对应的子级工作流,包括:
72.确定每一服务器节点任务对应的子级工作流以及对应的子级工作流参数。
73.可选的,子级工作流参数中包括子级并行度参数,子级并行度参数用于指示子级工作流中可以同时执行的节点任务的数量。可选的,子级工作流参数中还可以包括执行时间、执行次数、执行间隔时间、执行出错重试参数等参数,本发明不做限定。
74.可见,通过实施该可选的实施方式,能够确定每一服务器节点任务对应的子级工作流对应的子级工作流参数,从而在层级的工作流结构中分别定义了不同层级的工作流的
工作流参数,解决了现有的airflow平台中仅能通过单一参数设定而导致的整体架构不够灵活,无法应对多样化的应用场景的问题,同时这一设置可以使得整个系统架构的层级的工作流模式中可以根据不同层级的特点来设定不同的工作流参数,如设定不同层级的工作流对应的并行度参数,有利于实现更加灵活的模型训练架构。
75.作为一种可选的实施方式,子级工作流中还包括统计节点任务,用于记录子级工作流已经执行的训练节点任务对应的模型训练任务。
76.可选的,该统计节点任务可以将记录得到的信息推送至airflow平台的xcom模块中以便于后续的查看。
77.可见,通过实施该可选的实施方式,能够通过子级工作流中的统计节点任务记录子级工作流已经执行的训练节点任务对应的模型训练任务,从而实现对子级工作流的任务执行监控。
78.作为一种可选的实施方式,确定每一服务器节点任务对应的子级工作流以及对应的子级工作流参数,包括:
79.确定多个服务器节点对应的预设工作参数。
80.可选的,预设工作参数包括并行度参数。可选的,预设工作参数也可以包括执行时间、执行次数、执行间隔时间、执行出错重试参数等参数。
81.在父级工作流中遍历所有服务器节点,根据每一服务器节点对应的预设工作参数,为每一服务器节点对应的服务器节点任务生成对应的子级工作流和子级工作流参数。
82.作为一种可选的实施方式,模型调度函数为子级工作流从多个模型训练任务中确定出当前可进行的目标模型训练任务的具体方式,包括:
83.模型调度函数获取模型列表。
84.可选的,模型列表中包括有若干个当前未被执行的模型训练任务。
85.模型调度函数根据预设的选区规则,从模型列表中确定出一个目标模型训练任务,并将目标模型训练任务从模型列表中删除。
86.作为一种可选的实施方式,父级工作流还包括有多个用于获取对应的模型训练任务的获取节点。进一步的,在上述步骤中的,确定父级工作流以及对应的父级工作流参数之后,该方法还包括:
87.对于父级工作流中的每一服务器节点任务,将所有获取节点确定为该服务器节点任务的上游任务,以建立该服务器节点任务与所有获取节点的链接关系。
88.作为一种可选的实施方式,子级工作流中还包括报错节点任务,用于在子级工作流执行训练节点任务出错时,生成对应的报错信息并推送至对应的终端。
89.本发明实施例还公开了一个上述模型训练调度方法的一个具体的实施方案,该方案为一种实现了airflow层级工作流的模型并行训练调度方案,其目的是通过协调多服务器训练多个算法模型,达到将算力资源高效配置的目标。具体的,该方案的步骤包括:
90.步骤1:对模型任务和服务器定义。具体的,确定出模型任务列表、服务器列表和并行度字典,其中并行度字典中记载了每台服务器上允许的并行度值。具体的,对每个代理区设置一个模型任务,本方案用了4个代理区模型,则存在四个代理区模型训练任务。具体的,本方案中服务器有2台,分别为10.33.77.102和10.33.40.66,则在代码里定义每个服务器各自的并行度字典,即每台服务器上最多能同时跑几个模型。可选的,并行度字典可以根据
模型任务数和服务器数自行调整,具有灵活性和扩展性。
91.步骤2:构建层级中的父级工作流parent

dag。如图4所示,整个父级工作流由10个任务节点构成。其中,push_info节点为pythonoperator类型,其用于将预执行的模型标识(本方案中为代理区编码)的排队列表推送到redis

cluster,而check_train_sample节点为hivapartitionsensor类型,check_inverse_fence_index节点为redisclusterkeysensor类型,其中,check_train_sample节点用于检测地址库也是否存在,check_inverse_fence_index节点用于检测围栏分片倒排索引的最后一天的分区是否存在。若都存在就执行下游节点任务。下游节点任务为4个get_train_sample_{代理区编码}节点,均为sparksubmitoperator类型,负责各个代理区模型的数据拉取和存储。进一步的,10_33_40_66和10_33_77_102这两个节点是带有子级工作流sub

dag的subdagoperator类型,其定义中task_id是服务器名,即两个节点的名称标识,然后配置里定义的concurrency就是步骤1中提到的并行度字典,该值就会按task_id传入子级工作流的concurrency设置,以规范每一子级工作流的并行度参数,并与父级工作流的concurrency并行度配置区分开来。最后一个pythonoperator类型的节点overall_mapping是为了将10_33_40_66和10_33_77_102这两个节点到底执行了哪些代理区模型进行统计并推送到airflow的xcom里,便于后续查看。
92.步骤3:父级工作流的参数配置。父级工作流的并行度定义在dag函数里,设置concurrency=parent_concurrency,这里parent_concurrency已经提前设置值为2了,意味着父级工作流最多可以同时执行两个节点。
93.步骤4:链路关系定义。当父级工作流中上下游都是多个节点时,需要设计多对多的链路关系。可以循环遍历下游节点,对每一个下游节点用set_upstream函数来设置上游多个节点,实现多对多的链路关系。具体的,对于4个get_train_sample_{代理区}节点,各自以check_train_sample和check_inverse_fence_index为上游任务,则有2*4=8条需要链接的节点关系。实现逻辑如下:对于每一个代理区,都将check_train_sample和check_inverse_fence_index这两个任务设置为上游任务,实现函数为set_upstream。就可以实现8条链路的可视化了。同样,10_33_40_66和10_33_77_102这2个节点与4个get_train_sample_{代理区}节点之间也需要有8条链路,实现代码如下:对10_33_40_66和10_33_77_102这2个节点循环遍历,对于其中每一个节点(以10_33_40_66为例)来说,上游upstream_operator都是完整的4个get_train_sample_{代理区}。
94.步骤5:在父级dag里调用subdag。循环遍历服务器列表,对每台服务器执行相同subdag函数操作,传入需要的参数,生成各自的子级dag工作流。具体的,首先循环遍历服务器列表,对每台服务器执行相同subdag函数操作,生成各自的子级工作流。subdag函数需要传入4个参数:parent_dag_name、server、concurrency和on_failure_callback。其中,parent_dag_name指父级工作流的名称,server指服务器节点中的某一个,concurrency是该subdag子级工作流的内部并行度,从并行度字典中取值,而on_failure_callback是节点任务失败时自定义的钉钉告警方式。
95.步骤6:构建层级中的子级工作流subdag。在父级工作流中两台服务器节点上挂载子级工作流,在airflow前端可以从“zoom into sub dag”进入子级工作流。如图5所示,子级工作流总共有三类节点,依次为pending_operator>>common_filter_operator>>
server_mapping_operator。其中,pending类是实现排队规则的核心节点,它们会遍历所有代理区,每个都调用pending函数来确认该节点以哪个代理区为处理对象,并把这个被处理的代理区编码通过xcom_push推送到xcom记录里,便于后续追踪。因为需要遍历代理区,所以这里有4个节点,但并不是所有代理区都会真正执行的,pending函数的细节会在步骤7中说明。common_filter类节点任务是sshoperator,即模型训练的主任务,这里会执行ssh语句,意思是在提前指定好的目录下,执行真正的项目脚本,该脚本实现模型训练。server_mapping节点任务是统计及记录10_33_40_66这个子级工作流到底执行了哪些代理区模型,并推送到airflow的xcom里,便于后续查看。
96.步骤7:排队调度过程。2个挂载子级dag的服务器任务节点,通过同一个pending函数,在两台服务器上实现模型任务分配的过程。具体的,pending函数首先对接收传入的代理区索引,然后逐个去redis集群里找下一个应该进入处理队列的代理区编码,也即代理区模型训练任务。其中,redis集群在代理区索引表中表里按照key=pending将剩余代理区编码code_list取出,则pending函数将code_list的第一个编码code_list[0]作为本节点的处理对象,并将从第二个到最后一个code_list[1:]重新写回redis对应的表中,供下一次判断使用。如果待处理的code_list已经为空,则给代理区编码为000000,这个节点会空执行。
[0097]
可见,本发明实施例中公开的上述方案,具有以下优点:
[0098]
(1)实现模型并行的调度模式。模型并行是根据服务器空闲状况自动将队列中的下一个模型任务分配给合适的服务器,可以充分利用算力资源,对于工业级别模型的训练来说可以减少迭代周期,加速线上更新效果;
[0099]
(2)在层级dag间实现同一个配置的不同配置值;
[0100]
(3)高灵活性。一是上下游节点的链路关系可以定义多对多的关系;二是内部并行度字典的设计,可以应对不同数量服务器集群、不同时间要求;
[0101]
(4)强扩展性。在子级工作流subdag函数里可以追加所需的各类操作节点。
[0102]
实施例二
[0103]
请参阅图2,图2是本发明实施例公开的一种基于airflow的模型训练调度装置的结构示意图。其中,图2所描述的装置可以应用于相应的模型训练终端、模型训练设备或模型训练服务器,且该服务器可以是本地服务器,也可以是云服务器,本发明实施例不做限定。如图2所示,该装置可以包括:
[0104]
第一确定模块201,用于确定多个模型训练任务。
[0105]
第二确定模块202,用于确定多个服务器节点任务。
[0106]
第三确定模块203,用于确定每一服务器节点任务对应的子级工作流。
[0107]
本发明实施例中,每一子级工作流中均包括有同一个模型调度函数。其中,模型调度函数用于在子级工作流存在处理空闲时,为子级工作流从多个模型训练任务中确定出当前可进行的目标模型训练任务,并根据目标模型训练任务为子级工作流生成对应的训练节点任务。可选的,子级工作流存在处理空闲可以为该子级工作流的当前处理队列中出现了处理空缺可供一个或多个模型训练任务进行处理,例如当该子级工作流的并行度参数为3,也即该子级工作流同时可以处理三个模型训练任务时,若该子级工作流仅同时处理两个任务,则可以认为该子级工作流存在处理空闲,同样,也可以为通过判断该子级工作流的当前
工作任务的硬件占比与该子级工作流的硬件最大阈值之间的关系,来判断该子级工作流是否存在处理空闲,例如当该子级工作流的当前工作任务总共占用了40%的cpu,而该子级工作流的cpu最大处理阈值为80%,则此时判断到该子级工作流的当前工作任务的硬件占比小于该子级工作流的硬件最大阈值,从而确定该子级工作流存在处理空闲。
[0108]
执行模块204,用于执行所有服务器节点任务对应的子级工作流以完成多个模型训练任务。
[0109]
可见,实施本发明实施例所描述的装置能够利用在多个工作流中调用的同一个调度函数对多个模型训练任务进行统一的调度,从而能够在任一工作流存在处理空闲时为其分配模型训练任务,进而在模型调度中实现了模型并行,有利于充分利用算法资源,提高模型调度的灵活性。
[0110]
作为一种可选的实施方式,第二确定模块202确定多个服务器节点任务的具体方式,包括:
[0111]
确定父级工作流以及对应的父级工作流参数。
[0112]
其中,父级工作流中包括多个服务器节点任务。可选的,父级工作流参数中包括父级并行度参数,父级并行度参数用于指示父级工作流中可以同时执行的节点任务的数量。可选的,父级工作流参数中还可以包括执行时间、执行次数、执行间隔时间、执行出错重试参数等参数,本发明不做限定。
[0113]
本发明实施例中,父级工作流或子级工作流均采用dag(directed acyclic graph,有向无环图)的形式进行建立和处理监控,其均是在airflow平台上进行的。
[0114]
可见,通过实施该可选的实施方式,能够在父级工作流中建立多个服务器节点任务,后续再确定每一服务器节点任务对应的子级工作流,从而在整个系统架构中建立了层级的工作流模式,便于通过层级结构来管理工作流的运行。
[0115]
作为一种可选的实施方式,第三确定模块203确定每一服务器节点任务对应的子级工作流的具体方式,包括:
[0116]
确定每一服务器节点任务对应的子级工作流以及对应的子级工作流参数。
[0117]
可选的,子级工作流参数中包括子级并行度参数,子级并行度参数用于指示子级工作流中可以同时执行的节点任务的数量。可选的,子级工作流参数中还可以包括执行时间、执行次数、执行间隔时间、执行出错重试参数等参数,本发明不做限定。
[0118]
可见,通过实施该可选的实施方式,能够确定每一服务器节点任务对应的子级工作流对应的子级工作流参数,从而在层级的工作流结构中分别定义了不同层级的工作流的工作流参数,解决了现有的airflow平台中仅能通过单一参数设定而导致的整体架构不够灵活,无法应对多样化的应用场景的问题,同时这一设置可以使得整个系统架构的层级的工作流模式中可以根据不同层级的特点来设定不同的工作流参数,如设定不同层级的工作流对应的并行度参数,有利于实现更加灵活的模型训练架构。
[0119]
作为一种可选的实施方式,子级工作流中还包括统计节点任务,用于记录子级工作流已经执行的训练节点任务对应的模型训练任务。
[0120]
可选的,该统计节点任务可以将记录得到的信息推送至airflow平台的xcom模块中以便于后续的查看。
[0121]
可见,通过实施该可选的实施方式,能够通过子级工作流中的统计节点任务记录
子级工作流已经执行的训练节点任务对应的模型训练任务,从而实现对子级工作流的任务执行监控。
[0122]
作为一种可选的实施方式,第三确定模块203确定每一服务器节点任务对应的子级工作流以及对应的子级工作流参数的具体方式,包括:
[0123]
确定多个服务器节点对应的预设工作参数。
[0124]
可选的,预设工作参数包括并行度参数。可选的,预设工作参数也可以包括执行时间、执行次数、执行间隔时间、执行出错重试参数等参数。
[0125]
在父级工作流中遍历所有服务器节点,根据每一服务器节点对应的预设工作参数,为每一服务器节点对应的服务器节点任务生成对应的子级工作流和子级工作流参数。
[0126]
作为一种可选的实施方式,模型调度函数为子级工作流从多个模型训练任务中确定出当前可进行的目标模型训练任务的具体方式,包括:
[0127]
模型调度函数获取模型列表。
[0128]
可选的,模型列表中包括有若干个当前未被执行的模型训练任务。
[0129]
模型调度函数根据预设的选区规则,从模型列表中确定出一个目标模型训练任务,并将目标模型训练任务从模型列表中删除。
[0130]
作为一种可选的实施方式,父级工作流还包括有多个用于获取对应的模型训练任务的获取节点。进一步的,该装置还包括:
[0131]
链接模块,用于在第二确定模块202确定父级工作流以及对应的父级工作流参数之后,对于父级工作流中的每一服务器节点任务,将所有获取节点确定为该服务器节点任务的上游任务,以建立该服务器节点任务与所有获取节点的链接关系。
[0132]
作为一种可选的实施方式,子级工作流中还包括报错节点任务,用于在子级工作流执行训练节点任务出错时,生成对应的报错信息并推送至对应的终端。
[0133]
本发明实施例还公开了一个上述模型训练调度装置的一个具体的实施方案,该方案为一种实现了airflow层级工作流的模型并行训练调度方案,其目的是通过协调多服务器训练多个算法模型,达到将算力资源高效配置的目标。具体的,该方案的步骤包括:
[0134]
步骤1:对模型任务和服务器定义。具体的,确定出模型任务列表、服务器列表和并行度字典,其中并行度字典中记载了每台服务器上允许的并行度值。具体的,对每个代理区设置一个模型任务,本方案用了4个代理区模型,则存在四个代理区模型训练任务。具体的,本方案中服务器有2台,分别为10.33.77.102和10.33.40.66,则在代码里定义每个服务器各自的并行度字典,即每台服务器上最多能同时跑几个模型。可选的,并行度字典可以根据模型任务数和服务器数自行调整,具有灵活性和扩展性。
[0135]
步骤2:构建层级中的父级工作流parent

dag。如图4所示,整个父级工作流由10个任务节点构成。其中,push_info节点为pythonoperator类型,其用于将预执行的模型标识(本方案中为代理区编码)的排队列表推送到redis

cluster,而check_train_sample节点为hivapartitionsensor类型,check_inverse_fence_index节点为redisclusterkeysensor类型,其中,check_train_sample节点用于检测地址库也是否存在,check_inverse_fence_index节点用于检测围栏分片倒排索引的最后一天的分区是否存在。若都存在就执行下游节点任务。下游节点任务为4个get_train_sample_{代理区编码}节点,均为sparksubmitoperator类型,负责各个代理区模型的数据拉取和存储。进一步
的,10_33_40_66和10_33_77_102这两个节点是带有子级工作流sub

dag的subdagoperator类型,其定义中task_id是服务器名,即两个节点的名称标识,然后配置里定义的concurrency就是步骤1中提到的并行度字典,该值就会按task_id传入子级工作流的concurrency设置,以规范每一子级工作流的并行度参数,并与父级工作流的concurrency并行度配置区分开来。最后一个pythonoperator类型的节点overall_mapping是为了将10_33_40_66和10_33_77_102这两个节点到底执行了哪些代理区模型进行统计并推送到airflow的xcom里,便于后续查看。
[0136]
步骤3:父级工作流的参数配置。父级工作流的并行度定义在dag函数里,设置concurrency=parent_concurrency,这里parent_concurrency已经提前设置值为2了,意味着父级工作流最多可以同时执行两个节点。
[0137]
步骤4:链路关系定义。当父级工作流中上下游都是多个节点时,需要设计多对多的链路关系。可以循环遍历下游节点,对每一个下游节点用set_upstream函数来设置上游多个节点,实现多对多的链路关系。具体的,对于4个get_train_sample_{代理区}节点,各自以check_train_sample和check_inverse_fence_index为上游任务,则有2*4=8条需要链接的节点关系。实现逻辑如下:对于每一个代理区,都将check_train_sample和check_inverse_fence_index这两个任务设置为上游任务,实现函数为set_upstream。就可以实现8条链路的可视化了。同样,10_33_40_66和10_33_77_102这2个节点与4个get_train_sample_{代理区}节点之间也需要有8条链路,实现代码如下:对10_33_40_66和10_33_77_102这2个节点循环遍历,对于其中每一个节点(以10_33_40_66为例)来说,上游upstream_operator都是完整的4个get_train_sample_{代理区}。
[0138]
步骤5:在父级dag里调用subdag。循环遍历服务器列表,对每台服务器执行相同subdag函数操作,传入需要的参数,生成各自的子级dag工作流。具体的,首先循环遍历服务器列表,对每台服务器执行相同subdag函数操作,生成各自的子级工作流。subdag函数需要传入4个参数:parent_dag_name、server、concurrency和on_failure_callback。其中,parent_dag_name指父级工作流的名称,server指服务器节点中的某一个,concurrency是该subdag子级工作流的内部并行度,从并行度字典中取值,而on_failure_callback是节点任务失败时自定义的钉钉告警方式。
[0139]
步骤6:构建层级中的子级工作流subdag。在父级工作流中两台服务器节点上挂载子级工作流,在airflow前端可以从“zoom into sub dag”进入子级工作流。如图5所示,子级工作流总共有三类节点,依次为pending_operator>>common_filter_operator>>server_mapping_operator。其中,pending类是实现排队规则的核心节点,它们会遍历所有代理区,每个都调用pending函数来确认该节点以哪个代理区为处理对象,并把这个被处理的代理区编码通过xcom_push推送到xcom记录里,便于后续追踪。因为需要遍历代理区,所以这里有4个节点,但并不是所有代理区都会真正执行的,pending函数的细节会在步骤7中说明。common_filter类节点任务是sshoperator,即模型训练的主任务,这里会执行ssh语句,意思是在提前指定好的目录下,执行真正的项目脚本,该脚本实现模型训练。server_mapping节点任务是统计及记录10_33_40_66这个子级工作流到底执行了哪些代理区模型,并推送到airflow的xcom里,便于后续查看。
[0140]
步骤7:排队调度过程。2个挂载子级dag的服务器任务节点,通过同一个pending函
数,在两台服务器上实现模型任务分配的过程。具体的,pending函数首先对接收传入的代理区索引,然后逐个去redis集群里找下一个应该进入处理队列的代理区编码,也即代理区模型训练任务。其中,redis集群在代理区索引表中表里按照key=pending将剩余代理区编码code_list取出,则pending函数将code_list的第一个编码code_list[0]作为本节点的处理对象,并将从第二个到最后一个code_list[1:]重新写回redis对应的表中,供下一次判断使用。如果待处理的code_list已经为空,则给代理区编码为000000,这个节点会空执行。
[0141]
可见,本发明实施例中公开的上述方案,具有以下优点:
[0142]
(1)实现模型并行的调度模式。模型并行是根据服务器空闲状况自动将队列中的下一个模型任务分配给合适的服务器,可以充分利用算力资源,对于工业级别模型的训练来说可以减少迭代周期,加速线上更新效果;
[0143]
(2)在层级dag间实现同一个配置的不同配置值;
[0144]
(3)高灵活性。一是上下游节点的链路关系可以定义多对多的关系;二是内部并行度字典的设计,可以应对不同数量服务器集群、不同时间要求;
[0145]
(4)强扩展性。在子级工作流subdag函数里可以追加所需的各类操作节点。
[0146]
实施例三
[0147]
请参阅图3,图3是本发明实施例公开的又一种基于airflow的模型训练调度装置的结构示意图。如图3所示,该装置可以包括:
[0148]
存储有可执行程序代码的存储器301;
[0149]
与存储器301耦合的处理器302;
[0150]
处理器302调用存储器301中存储的可执行程序代码,执行本发明实施例一公开的基于airflow的模型训练调度方法中的部分或全部步骤。
[0151]
实施例四
[0152]
本发明实施例公开了一种计算机存储介质,该计算机存储介质存储有计算机指令,该计算机指令被调用时,用于执行本发明实施例一公开的基于airflow的模型训练调度方法中的部分或全部步骤。
[0153]
以上所描述的装置实施例仅是示意性的,其中作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0154]
通过以上的实施例的具体描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,存储介质包括只读存储器(read

only memory,rom)、随机存储器(random access memory,ram)、可编程只读存储器(programmable read

only memory,prom)、可擦除可编程只读存储器(erasable programmable read only memory,eprom)、一次可编程只读存储器(one

time programmable read

only memory,otprom)、电子抹除式可复写只读存储器
(electrically

erasable programmable read

only memory,eeprom)、只读光盘(compact disc read

only memory,cd

rom)或其他光盘存储器、磁盘存储器、磁带存储器、或者能够用于携带或存储数据的计算机可读的任何其他介质。
[0155]
最后应说明的是:本发明实施例公开的一种基于airflow的模型训练调度方法及装置所揭露的仅为本发明较佳实施例而已,仅用于说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解;其依然可以对前述各项实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或替换,并不使相应的技术方案的本质脱离本发明各项实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1