面向深度学习的服务器无感知计算集群调度方法及产品转让专利

申请号 : CN202310165783.8

文献号 : CN115934362B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘譞哲金鑫马郓谷典典

申请人 : 北京大学

摘要 :

本申请实施例涉及集群调度技术领域,公开了一种面向深度学习的服务器无感知计算集群调度方法及产品,包括:获取新增作业;基于调度队列中每个作业对应的截止时间,确定第一调度方案;基于调度队列中每个作业的边际回报,对第一调度方案中的每个作业分配的资源量进行分配,得到第二调度方案;基于第二调度方案,确定调度队列中每个作业对应的资源;调用集群中调度队列中每个作业对应的资源对所述每个作业进行训练。本申请的方法中开发人员无需关注系统资源配置的细节,且通过基于作业的截止时间和边际回报,对所有作业进行动态资源分配,在保证调度队列中进行训练的作业的截止时间满足率的同时,充分利用集群资源,有效提升作业的性能。

权利要求 :

1.一种面向深度学习的服务器无感知计算集群调度方法,其特征在于,包括:获取新增作业,将所述新增作业添加至调度队列;

按照所述调度队列中每个作业对应的截止时间,对所述调度队列中的作业进行排序;

在每个预设时间段内,向所述调度队列中每个作业分配预设数量的资源量,所述预设时间段为所述调度队列中每个作业对应的截止时间之前的单位时间段;

若在所述预设时间段内,所述调度队列中每个作业能够在所述每个作业对应的截止时间内完成训练,将所述预设时间段内的所述调度队列中每个作业对应的资源量,作为第一调度方案;

按照所述第一调度方案中每个作业的边际回报,对所述第一调度方案中的作业进行排序,得到候选第二调度方案;

分配迭代:基于集群的空闲资源量,向所述候选第二调度方案中的目标作业分配一个资源量,按照所述候选第二调度方案中每个作业的边际回报,对所述候选第二调度方案中的作业进行排序,得到更新的候选第二调度方案,所述目标作业为所述候选第二调度方案中边际回报最大的作业;

重复上述分配迭代过程,直至集群的空闲资源量全部进行分配,将所述更新的候选第二调度方案作为所述第二调度方案;

基于所述第二调度方案,确定所述调度队列中每个作业对应的资源;调用集群中所述调度队列中每个作业对应的资源对所述每个作业进行训练;

其中,所述每个作业的边际回报,按照如下方式获取:

确定每个作业分配的第一资源量以及第一运行时间,所述第一资源量为所述第一调度方案中的每个作业分配的资源量,所述第一运行时间为每个作业基于所述每个作业分配的第一资源量完成训练的时间;将所述每个作业分配的第一资源量与所述第一运行时间的乘积,作为所述每个作业的第一边际值;

确定每个作业分配的第二资源量以及第二运行时间,所述第二资源量为在所述第一资源量上加一个资源量,所述第二运行时间为每个作业基于所述每个作业分配的第二资源量完成训练的时间;将所述每个作业分配的第二资源量与所述第二运行时间的乘积,作为所述每个作业的第二边际值;

将每个作业的所述第一边际值与所述第二边际值的差值,作为所述每个作业的边际回报。

2.根据权利要求1所述的面向深度学习的服务器无感知计算集群调度方法,其特征在于,获取新增作业,包括:获取待训练作业以及所述待训练作业的截止时间;

获取每个预设时间段内集群的空闲资源量,以及,基于所述待训练作业的截止时间获取所述待训练作业的满足份额,所述满足份额为在所述待训练作业的截止时间内完成对所述待训练作业训练所需的最小资源量;

在所述空闲资源量大于所述待训练作业的满足份额的情况下,将所述待训练作业作为所述新增作业。

3.根据权利要求1所述的面向深度学习的服务器无感知计算集群调度方法,其特征在于,基于所述第二调度方案,确定所述调度队列中指定作业对应的资源,所述指定作业为所述调度队列中的任意一个作业,包括:基于所述集群中的资源,确定集群资源树;

基于所述集群资源树,枚举得到多个集群资源子树,所述多个集群资源子树的资源量和/或资源种类不同;

获取资源量大于或等于指定作业对应的资源量的所述集群资源子树,作为所述指定作业的候选集群资源子树,所述指定作业对应的资源量为2的n次幂,n大于或等于1;

获取资源量最小的所述指定作业的候选集群资源子树中的集群资源,作为所述指定作业对应的资源。

4.一种面向深度学习的服务器无感知计算集群调度装置,其特征在于,包括:获取模块,用于获取新增作业,将所述新增作业添加至调度队列;

排序模块,用于按照所述调度队列中每个作业对应的截止时间,对所述调度队列中的作业进行排序;

渐进填充模块,用于在每个预设时间段内,向所述调度队列中每个作业分配预设数量的资源量,所述预设时间段为所述调度队列中每个作业对应的截止时间之前的单位时间段;

第一资源分配模块,用于若在所述预设时间段内,所述调度队列中每个作业能够在所述每个作业对应的截止时间内完成训练,将所述预设时间段内的所述调度队列中每个作业对应的资源量,作为第一调度方案;

候选第二调度模块,用于按照所述第一调度方案中每个作业的边际回报,对所述第一调度方案中的作业进行排序,得到候选第二调度方案;

分配迭代模块,用于分配迭代:基于集群的空闲资源量,向所述候选第二调度方案中的目标作业分配一个资源量,按照所述候选第二调度方案中每个作业的边际回报,对所述候选第二调度方案中的作业进行排序,得到更新的候选第二调度方案,所述目标作业为所述候选第二调度方案中边际回报最大的作业;

重复模块,用于重复上述分配迭代过程,直至集群的空闲资源量全部进行分配,将所述更新的候选第二调度方案作为所述第二调度方案;

训练执行模块,用于基于所述第二调度方案,确定所述调度队列中每个作业对应的资源;调用集群中所述调度队列中每个作业对应的资源对所述每个作业进行训练;

第一边际值确定模块,用于确定每个作业分配的第一资源量以及第一运行时间,所述第一资源量为所述第一调度方案中的每个作业分配的资源量,所述第一运行时间为每个作业基于所述每个作业分配的第一资源量完成训练的时间;将所述每个作业分配的第一资源量与所述第一运行时间的乘积,作为所述每个作业的第一边际值;

第二边际值确定模块,用于确定每个作业分配的第二资源量以及第二运行时间,所述第二资源量为在所述第一资源量上加一个资源量,所述第二运行时间为每个作业基于所述每个作业分配的第二资源量完成训练的时间;将所述每个作业分配的第二资源量与所述第二运行时间的乘积,作为所述每个作业的第二边际值;

边际回报确定模块,用于将每个作业的所述第一边际值与所述第二边际值的差值,作为所述每个作业的边际回报。

5.一种电子设备,其特征在于,包括存储器、处理器及存储在存储器上的计算机程序,所述处理器执行所述计算机程序以实现权利要求1‑3中任一所述的一种面向深度学习的服务器无感知计算集群调度方法中的步骤。

6.一种计算机可读存储介质,其上存储有计算机程序/指令,其特征在于,该计算机程序/指令被处理器执行时实现权利要求1‑3中任一所述的一种面向深度学习的服务器无感知计算集群调度方法中的步骤。

说明书 :

面向深度学习的服务器无感知计算集群调度方法及产品

技术领域

[0001] 本申请实施例涉及集群调度技术领域,具体而言,涉及一种面向深度学习的服务器无感知计算集群调度方法及产品。

背景技术

[0002] 随着深度学习在日常应用程序和服务中的应用越来越广泛,智能化已经成为在计算环境下软件的核心特征和基本能力,而高质量的深度学习模型则是智能化的重要支撑。因此,软件开发人员除了编写核心业务功能逻辑,往往还需要利用分布式机器学习系统来进行模型训练任务。当前的深度学习训练平台大多都遵循以服务器为中心的模式,其中深度学习开发人员以物理机、虚拟机、容器等机器实例的形式请求硬件资源以运行深度学习训练作业。
[0003] 然而,现有以服务器为中心的方案不具备弹性,无法在保证满足作业的训练截止时间(即保证在特定的截止时间之前完成作业)的同时,灵活地扩展深度学习作业的资源以提供性能保证。例如,一些生产环境为了在定期发布产品时及时将产品上线,要求模型在上线时间之前完成训练。尽管一些工作尝试考虑作业截止时间,但这些工作仍然采用以服务器为中心的模式,缺乏弹性地扩展或收缩作业资源的灵活性以优化集群范围的资源利用率并满足截止时间。因此,如何在提升作业的截止时间满足率同时,充分利用集群资源,成为当前领域内亟待解决的问题。

发明内容

[0004] 本申请实施例在于提供一种面向深度学习的服务器无感知计算集群调度方法及产品,旨在解决如何在提升作业的截止时间满足率同时,充分利用集群资源的问题。
[0005] 本申请实施例第一方面提供了一种面向深度学习的服务器无感知计算集群调度方法,包括:
[0006] 获取新增作业,将所述新增作业添加至调度队列;
[0007] 基于所述调度队列中每个作业对应的截止时间,确定所述调度队列中每个作业分配的资源量,作为第一调度方案;
[0008] 基于所述调度队列中每个作业的边际回报,对所述第一调度方案中的每个作业分配的资源量进行分配,得到第二调度方案;
[0009] 基于所述第二调度方案,确定所述调度队列中每个作业对应的资源;调用集群中所述调度队列中每个作业对应的资源对所述每个作业进行训练。
[0010] 在一种可选的实施方式中,获取新增作业,包括:
[0011] 获取待训练作业以及所述待训练作业的截止时间;
[0012] 获取集群的空闲资源量,以及,基于所述待训练作业的截止时间获取所述待训练作业的满足份额,所述满足份额为在所述待训练作业的截止时间内完成对所述待训练作业训练所需的最小资源量;
[0013] 在所述空闲资源量大于所述待训练作业的满足份额的情况下,将所述待训练作业作为所述新增作业。
[0014] 在一种可选的实施方式中,基于所述调度队列中每个作业对应的截止时间,确定所述调度队列中每个作业分配的资源量,作为第一调度方案,包括:
[0015] 按照所述调度队列中每个作业对应的截止时间,对所述调度队列中的作业进行排序;
[0016] 在每个预设时间段内,向所述调度队列中每个作业分配预设数量的资源量,所述预设时间段为所述调度队列中每个作业对应的截止时间之前的单位时间段;
[0017] 若在所述预设时间段内,所述调度队列中每个作业能够在所述每个作业对应的截止时间内完成训练,将所述预设时间段内的所述调度队列中每个作业对应的资源量,作为所述第一调度方案。
[0018] 在一种可选的实施方式中,基于所述调度队列中每个作业的边际回报,对所述第一调度方案中的每个作业分配的资源量进行分配,得到第二调度方案,包括:
[0019] 按照所述第一调度方案中每个作业的边际回报,对所述第一调度方案中的作业进行排序,得到候选第二调度方案;
[0020] 分配迭代:基于集群的空闲资源量,向所述候选第二调度方案中的目标作业分配一个资源量,按照所述候选第二调度方案中每个作业的边际回报,对所述候选第二调度方案中的作业进行排序,得到更新的候选第二调度方案,所述目标作业为所述候选第二调度方案中边际回报最大的作业;
[0021] 重复上述分配迭代过程,直至集群的空闲资源量全部进行分配,将所述更新的候选第二调度方案作为所述第二调度方案。
[0022] 在一种可选的实施方式中,所述每个作业的边际回报,按照如下方式获取:
[0023] 确定每个作业分配的第一资源量以及第一运行时间,所述第一资源量为所述第一调度方案中的每个作业分配的资源量,所述第一运行时间为每个作业基于所述每个作业分配的第一资源量完成训练的时间;将所述每个作业分配的第一资源量与所述第一运行时间的乘积,作为所述每个作业的第一边际值;
[0024] 确定每个作业分配的第二资源量以及第二运行时间,所述第二资源量为在所述第一资源量上加一个资源量,所述第二运行时间为每个作业基于所述每个作业分配的第二资源量完成训练的时间;将所述每个作业分配的第二资源量与所述第二运行时间的乘积,作为所述每个作业的第二边际值;
[0025] 将每个作业的所述第一边际值与所述第二边际值的差值,作为所述每个作业的边际回报。
[0026] 在一种可选的实施方式中,基于所述第二调度方案,确定所述调度队列中指定作业对应的资源,所述指定作业为所述调度队列中的任意一个作业,包括:
[0027] 基于所述集群中的资源,确定集群资源树;
[0028] 基于所述集群资源树,枚举得到多个集群资源子树,所述多个集群资源子树的资源量和/或资源种类不同;
[0029] 获取资源量大于或等于指定作业对应的资源量的所述集群资源子树,作为所述指定作业的候选集群资源子树,所述指定作业对应的资源量为2的n次幂,n大于或等于1;
[0030] 获取资源量最小的所述指定作业的候选集群资源子树中的集群资源,作为所述指定作业对应的资源。
[0031] 本申请实施例第二方面提供了一种面向深度学习的服务器无感知计算集群调度装置,包括:
[0032] 获取模块,用于获取新增作业,将所述新增作业添加至调度队列;
[0033] 第一资源分配模块,用于基于所述调度队列中每个作业对应的截止时间,确定所述调度队列中每个作业分配的资源量,作为第一调度方案;
[0034] 第二资源分配模块,用于基于所述调度队列中每个作业的边际回报,对所述第一调度方案中的每个作业分配的资源量进行分配,得到第二调度方案;
[0035] 训练执行模块,用于基于所述第二调度方案,确定所述调度队列中每个作业对应的资源;调用集群中所述调度队列中每个作业对应的资源对所述每个作业进行训练。
[0036] 在一种可选的实施方式中,所述获取模块,包括:
[0037] 待训练作业获取子模块,用于获取待训练作业以及所述待训练作业的截止时间;
[0038] 满足份额获取子模块,获取集群的空闲资源量,以及,基于所述待训练作业的截止时间获取所述待训练作业的满足份额,所述满足份额为在所述待训练作业的截止时间内完成对所述待训练作业训练所需的最小资源量;
[0039] 新增作业获取子模块,用于在所述空闲资源量大于所述待训练作业的满足份额的情况下,将所述待训练作业作为所述新增作业。
[0040] 在一种可选的实施方式中,所述第一资源分配模块,包括:
[0041] 排序子模块,用于按照所述调度队列中每个作业对应的截止时间,对所述调度队列中的作业进行排序;
[0042] 渐进填充子模块,用于在每个预设时间段内,向所述调度队列中每个作业分配预设数量的资源量,所述预设时间段为所述调度队列中每个作业对应的截止时间之前的单位时间段;
[0043] 第一资源分配子模块,用于若在所述预设时间段内,所述调度队列中每个作业能够在所述每个作业对应的截止时间内完成训练,将所述预设时间段内的所述调度队列中每个作业对应的资源量,作为所述第一调度方案。
[0044] 在一种可选的实施方式中,所述第二资源分配模块,包括:
[0045] 候选第二调度子模块,用于按照所述第一调度方案中每个作业的边际回报,对所述第一调度方案中的作业进行排序,得到候选第二调度方案;
[0046] 分配迭代子模块,用于分配迭代:基于集群的空闲资源量,向所述候选第二调度方案中的目标作业分配一个资源量,按照所述候选第二调度方案中每个作业的边际回报,对所述候选第二调度方案中的作业进行排序,得到更新的候选第二调度方案,所述目标作业为所述候选第二调度方案中边际回报最大的作业;
[0047] 重复子模块,用于重复上述分配迭代过程,直至集群的空闲资源量全部进行分配,将所述更新的候选第二调度方案作为所述第二调度方案。
[0048] 在一种可选的实施方式中,所述第二资源分配模块,还包括:
[0049] 第一边际值确定子模块,用于确定每个作业分配的第一资源量以及第一运行时间,所述第一资源量为所述第一调度方案中的每个作业分配的资源量,所述第一运行时间为每个作业基于所述每个作业分配的第一资源量完成训练的时间;将所述每个作业分配的第一资源量与所述第一运行时间的乘积,作为所述每个作业的第一边际值;
[0050] 第二边际值确定子模块,用于确定每个作业分配的第二资源量以及第二运行时间,所述第二资源量为在所述第一资源量上加一个资源量,所述第二运行时间为每个作业基于所述每个作业分配的第二资源量完成训练的时间;将所述每个作业分配的第二资源量与所述第二运行时间的乘积,作为所述每个作业的第二边际值;
[0051] 边际回报确定子模块,用于将每个作业的所述第一边际值与所述第二边际值的差值,作为所述每个作业的边际回报。
[0052] 在一种可选的实施方式中,所述训练执行模块,包括:
[0053] 资源树获取子模块,用于基于所述集群中的资源,确定集群资源树;
[0054] 资源子树枚举子模块,用于基于所述集群资源树,枚举得到多个集群资源子树,所述多个集群资源子树的资源量和/或资源种类不同;
[0055] 资源子树获取子模块,用于获取资源量大于或等于指定作业对应的资源量的所述集群资源子树,作为所述指定作业的候选集群资源子树,所述指定作业对应的资源量为2的n次幂,n大于或等于1;
[0056] 资源获取子模块,用于获取资源量最小的所述指定作业的候选集群资源子树中的集群资源,作为所述指定作业对应的资源。
[0057] 本申请实施例第三方面提供了一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,所述处理器执行所述计算机程序以实现第一方面中任一所述的一种面向深度学习的服务器无感知计算集群调度方法中的步骤。
[0058] 本申请实施例第四方面提供了一种计算机可读存储介质,其上存储有计算机程序/指令,该计算机程序/指令被处理器执行时实现第一方面中任一所述的一种面向深度学习的服务器无感知计算集群调度方法中的步骤。
[0059] 本申请实施例第五方面提供了一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现第一方面中任一所述的一种面向深度学习的服务器无感知计算集群调度方法中的步骤。
[0060] 有益效果:
[0061] 本申请提供了一种面向深度学习的服务器无感知计算集群调度方法及产品,包括:获取新增作业,将所述新增作业添加至调度队列;基于所述调度队列中每个作业对应的截止时间,确定所述调度队列中每个作业分配的资源量,作为第一调度方案;基于所述调度队列中每个作业的边际回报,对所述第一调度方案中的每个作业分配的资源量进行分配,得到第二调度方案;基于所述第二调度方案,确定所述调度队列中每个作业对应的资源;调用集群中所述调度队列中每个作业对应的资源对所述每个作业进行训练。本申请的方法具有以下优点:
[0062] (1)本申请的方案中,开发人员只需要提供新增作业的算法信息,无需关注系统资源配置的细节,系统按照本申请的方法可以自动进行资源分配和调度,大幅度降低了模型训练任务的开发复杂度,降低了开发人员的学习成本。
[0063] (2)本申请的方案通过基于作业的截止时间和边际回报,对所有作业进行动态资源分配,从而在保证调度队列中进行训练的作业的截止时间满足率的同时,充分利用集群资源,有效提升作业的性能。

附图说明

[0064] 为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0065] 图1是本申请一实施例提出的一种面向深度学习的服务器无感知计算集群调度方法流程图;
[0066] 图2是本申请一实施例提出的一种第一调度方案获取流程图;
[0067] 图3是本申请一实施例提出的一种集群资源树示例图;
[0068] 图4是本申请一实施例提出的一种面向深度学习的服务器无感知计算集群调度装置示意图;
[0069] 图5是本申请一实施例提出的一种电子设备示意图。

具体实施方式

[0070] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0071] 相关技术中,现有以服务器为中心的方案不具备弹性,无法在保证满足作业的训练截止时间(即保证在特定的截止时间之前完成作业)的同时,灵活地扩展深度学习作业的资源以提供性能保证。例如,一些生产环境为了在定期发布产品时及时将产品上线,要求模型在上线时间之前完成训练。尽管一些工作尝试考虑作业截止时间,但这些工作仍然采用以服务器为中心的模式,缺乏弹性地扩展或收缩作业资源的灵活性以优化集群范围的资源利用率并满足截止时间。
[0072] 有鉴于此,本申请实施例提出一种面向深度学习的服务器无感知计算集群调度方法,图1示出了一种面向深度学习的服务器无感知计算集群调度方法流程图,如图1所示,包括如下步骤:
[0073] S101、获取新增作业,将所述新增作业添加至调度队列。
[0074] S102、基于所述调度队列中每个作业对应的截止时间,确定所述调度队列中每个作业分配的资源量,作为第一调度方案。
[0075] S103、基于所述调度队列中每个作业的边际回报,对所述第一调度方案中的每个作业分配的资源量进行分配,得到第二调度方案。
[0076] S104、基于所述第二调度方案,确定所述调度队列中每个作业对应的资源;调用集群中所述调度队列中每个作业对应的资源对所述每个作业进行训练。
[0077] 本申请实施例中,所述调度队列为正在进行训练的所有作业;所述新增作业为基于所述新增作业的相关信息以及集群状态信息,判断满足添加至所述调度队列的条件的待训练作业,其中,所述新增作业添加至所述调度队列中,保证调度队列中的所有正在训练的作业以及所述新增作业均能在每个作业对应的截止时间内完成训练。
[0078] 本申请实施例中,所述作业对应的截止时间(deadline)为开发人员在将作业提交时提供的作业信息,需要保证在特定的截止时间之前完成作业的训练,在一种可选的实施方式中,所述截止时间可以为截止日期,也可以为预期时间段,具体截止时间的形式可根据实际情况确定,本申请在此不作限制。
[0079] 本申请实施例中,本申请实施例通过服务器无感知的声明式应用编程接口,屏蔽资源配置细节,例如集群资源数量、集群资源类型、通信策略等,使得开发人员只需在所述服务器无感知的声明式应用编程接口对作业提供作业信息,其中所述作业信息为开发人员提供的作业相关的算法信息,如数据集、超参数、截止时间等。所述每个作业分配的资源量为集群中用于支持每个作业进行训练任务的集群资源的数量,其中,所述集群包含多个具体的集群资源,用于按照调度方案分配给每个作业的调度方案向所述每个作业分配特定的集群计算资源,其中,在一种可选的实施方式中,所述集群为GPU集群,所述集群资源为所述集群中具体的GPU。
[0080] 本申请实施例中,所述边际回报用于表征每个作业在增加集群资源时的边际收益,具体而言,在对集群资源向调度队列中每个作业进行分配时,对于每个作业,每增加一个集群资源量时,该作业的吞吐量并非是呈线性增加的,而是形成一条缩放曲线,该缩放曲线是凹形的,表明所述深度学习训练作业所分配的集群资源量越大,继续增加集群资源量时,对于该作业的训练吞吐量的增长越小。因此,本申请引入边际回报作为生成第二分配方案的标准,所述第二分配方案用于保证在集群中存在空闲资源时,优先将空闲资源量分配给具有最大边际收益的作业,从而加速作业的训练过程,为后续到来的新增作业预留集群资源,提升深度学习作业性能。
[0081] 为了使本领域技术人员更好的理解本申请实施例提供的方案,接下来对本申请的方法进行详细描述。
[0082] 具体实施步骤S101时,首先获取待训练作业以及所述待训练作业的截止时间,其中,所述待训练作业为开发人员提交的需要进行训练的作业,开发人员在提交所述待训练作业时,还需要提供所述待训练作业的作业信息,所述作业信息为所述待训练作业的算法信息以及所述待训练作业的截止时间,例如,所述作业信息为待训练模型、训练超参数、终止条件、作业预期截止时间、数据集、优化器等信息,需要说明的是,所述待训练作业的作业信息可根据实际情况确定,上述示例只是为了使本领域技术人员更好的理解本申请的方案而提供的其中一种情况,对于待训练作业的作业信息,本申请不作限制。
[0083] 由于加入调度队列的新增作业会触发集群资源的分配,导致调度队列中的作业对应的资源量发生改变,因此需要在对待训练作业进行判断,确定所述待训练作业作为新增作业加入调度队列时,是否能够保证该待训练作业以及调度队列中已接收的其他正在训练的作业均能在截止时间之前完成。为了进行上述判断,本申请引入待训练作业的满足份额这一概念,所述满足份额为在所述待训练作业的截止时间内完成对所述待训练作业训练所需的最小资源量。
[0084] 具体来说,首先获取集群状态信息,其中,所述集群状态信息为当前时刻的集群在对调度队列中的作业进行训练时,集群资源的使用信息,所述集群状态信息至少包括空闲资源量。随后,预先运行所述调度队列中的作业,获取作业的缩放曲线,基于所述缩放曲线以及所述待训练作业的截止时间,获取所述待训练作业的满足份额,所述满足份额为在所述待训练作业的截止时间内完成对所述待训练作业训练所需的最小资源量。
[0085] 在所述空闲资源量大于或等于所述待训练作业的满足份额的情况下,说明该待训练作业的资源使用达到最小值,当待训练作业加入调度队列后,通过集群的空闲资源即可完成待训练作业在截止时间内完成训练,不会影响正在训练的作业对应的集群资源,因此可以保证待训练作业以及已接收的调度队列中的作业均能在对应的截止时间内完成训练。此时,将所述待训练作业作为所述新增作业。
[0086] 在所述空闲资源量小于所述待训练作业的满足份额的情况下,说明当待训练作业加入调度队列后,通过集群的空闲资源不能完成待训练作业在截止时间内完成训练,需要从其他正在训练的作业对应的集群资源中获取集群资源,因此在等于调度队列中的作业对应的集群资源进行分配时,可能会导致至少一个作业违背其对应的截止时间的要求。此时,所述待训练作业不会被接收。
[0087] 在一种可选的实施方式中,通过渐进式填充的方法来确定所述待训练作业的满足份额。具体而言,首先获取待训练作业,将所述待训练作业与所述调度队列组合为准入判断队列;随后,按照所述准入判断队列中每个作业对应的截止时间进行排序;在每个预设时间段内,向所述准入判断队列中每个作业分配预设数量的资源量,所述预设时间段为所述准入判断队列中每个作业对应的截止时间之前的单位时间段;若在所述预设时间段内,所述准入判断队列中每个作业能够在所述每个作业对应的截止时间内完成训练,将所述待训练作业作为所述新增作业,并将所述准入判断队列中待训练作业对应的资源量作为所述满足份额。需要说明的是,由于在截止时间之前的每个预设时间段内,集群中空闲资源量可能不同,因此,在每个预设时间段内,作业的所述满足份额在每个预设时间段内可以为不同数值。
[0088] 具体实施步骤S102时,对于基于满足份额确定的新增作业,将所述新增作业添加至所述调度队列中,对调度队列中每个作业对应的集群资源进行分配,保证调度队列中每个作业在对应的集群资源量的训练下能够在其截止时间前完成训练任务。因此,基于所述调度队列中每个作业对应的截止时间,确定所述调度队列中每个作业分配的资源量,作为第一调度方案。
[0089] 在一种可选的实施方式中,采用渐进式填充的方法确定所述调度队列中每个作业分配的资源量。具体而言,图2示出了一种第一调度方案获取流程图,如图2所示,按照如下步骤执行:
[0090] S102‑1、按照所述调度队列中每个作业对应的截止时间进行排序。
[0091] 按照所述调度队列中每个作业对应的截止时间进行排序。其中,所述调度队列中的每个作业包括新增作业和已接收的其他作业。
[0092] S102‑2、在每个预设时间段内,向所述调度队列中每个作业分配预设数量的资源量。
[0093] 按照所述调度队列中每个作业对应的截止时间进行排序,在每个预设时间段内,向所述调度队列中每个作业分配预设数量的资源量,例如,在每个预设时间段内,向所述调度队列中每个作业分配1个资源量的资源,判断在该预设时间段内,调度队列中每个作业基于1个资源量的资源能否在每个作业对应的截止时间之前完成训练,其中,每个预设时间段内向每个作业分配的资源量取自集群的空闲资源量,所述预设时间段为所述调度队列中每个作业对应的截止时间之前的单位时间段。需要说明的是,所述预设时间段和所述预设数量可根据实际情况确定,本申请在此不作限制。
[0094] S102‑3、若在所述预设时间段内,所述调度队列中每个作业能够在所述每个作业对应的截止时间内完成训练,将所述预设时间段内的所述调度队列中每个作业对应的资源量,作为所述第一调度方案。
[0095] 若在所述预设时间段内,所述调度队列中每个作业能够在所述每个作业对应的截止时间内能够完成训练,说明该预设时间段内对于每个作业的资源分配方案可以保证包含了新增作业的调度队列中的所有作业均满足截止时间,因此将所述预设时间段内的所述调度队列中每个作业对应的资源量,作为所述第一调度方案。
[0096] 在一种可选的实施方式中,若在每个所述预设时间段内,在集群的空闲资源量用完时,所述调度队列中每个作业中至少有一个不能够在截止时间内能够完成训练,或,在所有的预设时间段内,所述调度队列中存在至少一个作业不能够在所述每个作业对应的截止时间内完成训练,说明该预设时间段内对于每个作业的资源分配方案不能够保证包含了新增作业的调度队列中的所有作业均满足截止时间,此时所述预设时间段内的所述调度队列中每个作业对应的资源量不能够作为所述第一调度方案,即不接收该新增作业。
[0097] 至此完成了基于每个作业的截止时间对集群资源的分配,所得到的第一调度方案可以保证在调度队列中加入新增作业后,对调度队列中的所有作业对应的资源量可以使包含新增作业在内的调度队列中的所有作业在截止时间前完成训练任务,从而提升了作业的截止时间满足率。
[0098] 具体实施步骤S103时,基于所述调度队列中每个作业的边际回报,对所述第一调度方案中的每个作业分配的资源量进行分配,得到第二调度方案。在对集群资源向调度队列中每个作业进行分配时,对于每个作业,每增加一个集群资源量时,该作业的吞吐量并非是呈线性增加的,而是形成一条缩放曲线,该缩放曲线是凹形的,表明所述深度学习训练作业所分配的集群资源量越大,继续增加集群资源量时,对于该作业的训练吞吐量的增长越小。因此,本申请引入边际回报作为生成第二分配方案的标准,所述第二分配方案用于保证在集群中存在空闲资源时,优先将空闲资源量分配给具有最大边际收益的作业。
[0099] 在一种可选的实施方式中,本申请实施例通过贪心算法,考虑所述每个作业的边际回报,保证优先将空闲资源量分配给具有最大边际收益的作业。具体而言,首先获取第一调度方案中每个作业的边际回报,所述边际回报的获取方式如下:
[0100] 首先根据获取的第一调度方案,确定每个作业分配的第一资源量以及第一运行时间,所述第一资源量为所述第一调度方案中的每个作业分配的资源量,所述第一运行时间为每个作业基于所述每个作业分配的第一资源量完成训练的时间,将所述每个作业分配的第一资源量与所述第一运行时间相乘,所得的乘积作为所述每个作业的第一边际值。例如,所述第一调度方案中存在作业A、B、C,对应分配的第一资源量为A:1个集群资源、B:2个集群资源、C:1个集群资源,基于所述第一资源量的第一运行时间分别为t1、t2、t3,则所述作业A、B、C对应的第一边际值分别为(1·t1)、(2·t2)、(1·t3)。
[0101] 随后,确定每个作业分配的第二资源量以及第二运行时间,所述第二资源量为在所述第一资源量上加一个资源量,所述第二运行时间为每个作业基于所述每个作业分配的第二资源量完成训练的时间,再将所述每个作业分配的第二资源量与所述第二运行时间相乘,作为所述每个作业的第二边际值。例如,所述作业为A、B、C,对应分配的第二资源量为A:2个集群资源、B:3个集群资源、C:2个集群资源,基于所述第二资源量的第二运行时间分别为t1’、t2’、t3’,则所述作业A、B、C对应的第二边际值分别为(2·t1’)、(3·t2’)、(2·t3’)。
[0102] 最后,将每个作业的所述第一边际值与所述第二边际值的差值,作为所述每个作业的边际回报。例如,所述作业A、B、C对应的第一边际值分别为(1·t1)、(2·t2)、(1·t3),所述作业A、B、C对应的第二边际值分别为(2·t1’)、(3·t2’)、(2·t3’),则所述作业A、B、C对应的边际回报分别为(2·t1’‑1·t1)、(3·t2’‑2·t2)、(2·t3’‑1·t3)。
[0103] 如上所述,边际回报表征了对集群资源向调度队列中每个作业进行分配时,对于每个作业,每增加一个集群资源量时吞吐量的变化,由于缩放曲线为凹形的,每个作业分配集群资源后所带来的吞吐量的回报递减,因此在增加一个资源量后,对于每个作业的边际回报会减小。
[0104] 在得到了第一调度方案中每个作业的边际回报之后,对所述第一调度方案中的作业按照所述边际回报的大小进行排序,得到候选第二调度方案,该候选第二方案中作业的顺序即表征了不同作业的边际收益的大小,为了保证将集群中的空闲资源优先分配给具有最大边际收益的作业,执行如下分配迭代过程:
[0105] 基于集群的空闲资源量,向所述候选第二调度方案中的目标作业分配一个资源量,该目标作业为候选第二调度方案中边际回报最大的作业。此时,由于该目标作业又分配了一个资源量,导致其边际回报发生改变,此时将具有该目标作业的候选第二调度方案按照所述候选第二调度方案中每个作业的边际回报,对所述候选第二调度方案中的作业进行排序,得到更新的候选第二调度方案,由于上一次的目标作业的边际回报发生了改变,其他的作业未发生改变,因此候选第二调度方案中边际回报最大的作业(即当前的目标作业)经排序后发生改变。随后重复上述过程,向当前的目标作业分配一个资源量,再次更新候选第二调度方案的顺序,重复上述分配迭代过程,直至集群的空闲资源量全部进行分配完成,表明迭代结束,将所述更新的候选第二调度方案作为所述第二调度方案。
[0106] 例如,所述候选第二调度方案包含三个作业,按照其边际回报排序为A‑B‑C,集群空闲资源量为3,其中目标作业为A;向A增加一个资源量得到A1,此时的候选第二调度方案基于边际回报重新排序为B‑A1‑C,集群空闲资源量为2,目标作业变为B;向B增加一个资源量得到B1,此时的候选第二调度方案基于边际回报重新排序为A1‑C‑B1,集群空闲资源量为1,目标作业变为A1;向A1增加一个资源量得到A2,此时的候选第二调度方案基于边际回报重新排序为C‑B1‑A2,集群空闲资源量为0,目标作业变为C。此时所有集群空闲资源分配完成,迭代结束,将更新的候选第二调度方案C‑B1‑A2作为所述第二调度方案。
[0107] 通过上述贪心算法,以每个作业的边际回报作为基准对集群资源进行分配,保证集群空闲资源在每次分配时均分配给邮局最大边际收益的作业,从而提升了所有作业在训练过程中整体保证最大的性能提升。至此得到的第二调度方案,确定了每个作业所需的集群资源数量,集群在执行训练任务时,可根据第二调度方案弹性调整每个作业使用的集群资源量,即让每个作业具有弹性伸缩能力。接下来执行步骤S104,确定所述每个作业对应的具体集群资源。
[0108] 具体实施步骤S104时,基于所述集群中的资源,确定集群资源树,其中,所述集群资源树为集群中的资源拓扑结构,图3示出了一种集群资源树示例图,如图3所示,所述集群资源树为包含了集群中的所有集群资源(GPU)的多层分层树,以图3为例,包括根节点、CPU、PCIeSwitch(高速串行计算机扩展总线接口)以及GPU构成的不同层。其中不同的集群资源(GPU)通过不同带宽的不同类型链路连接,集群资源树的叶节点表示所述集群资源(GPU)。
[0109] 集群资源树中与第二调度方案中作业对应的资源量相同的一部分可用于表示调度队列中作业的对应资源,将这样集群资源树的一部分作为集群资源子树。为了获取所有可能存在的集群资源组成情况(具有不同资源量和/或资源种类的集群资源子树),则需要基于所述集群资源树,枚举得到多个集群资源子树,所述多个集群资源子树的资源量和/或资源种类不同。在一种可选的实施方式中,本申请采用最佳拟合的方法,确定指定作业对应的资源。
[0110] 具体而言,首先获取资源量大于或等于指定作业对应的资源量的所述集群资源子树,作为所述指定作业的候选集群资源子树;随后获取资源量最小的所述指定作业的候选集群资源子树中的集群资源,作为所述指定作业对应的资源。例如,若所述指定作业的资源量为4,则先获取所有集群资源子树中资源量大于或等于4的集群资源子树,随后获取所有集群资源子树中资源量大于或等于4的集群资源子树中资源量最小的集群资源子树,将该集群资源子树中的资源作为分配给该指定作业的资源。
[0111] 在一种可选的实施方式中,所述指定作业对应的资源量为2的n次幂,n大于或等于1。由于当指定作业对应的资源量可以为任意整数时,一个作业可以只占用一个集群资源子树的一部分,该集群资源子树剩余的部分则成为资源碎片,当产生资源碎片时,即使集群包含的资源比所需的更多也可能找不到符合作业要求的完整集群资源子树。此时会出现分配给指定作业的资源来自于不止一个集群资源子树(即资源碎片组成)的情况,这会导致该指定作业在进行训练时的带宽降低,使得训练性能大幅下降。为了避免上述问题,本申请限制所述指定作业对应的资源量为2的n次幂,n大于或等于1,这样作业不会只占用一个集群资源子树的一部分,只能占用一个资源子树,从而避免资源碎片的产生,保证每个作业基于对应的资源进行训练时具有最大的带宽,有效提升了训练性能。通过上述确定指定作业对应的资源的方法,可以与资源分配的第一调度方案以及第二调度方案的确定过程解耦,单独的确定每个作业对应的集群资源子树。
[0112] 在确定所述调度队列中每个作业对应的资源之后,调用集群中所述调度队列中每个作业对应的资源对所述每个作业进行训练。具体而言,根据第二调度方案以及该作业对应的资源,将正在运行的作业的参数发送给即将运行该作业的工作节点(即该作业对应的集群资源),然后每个已接收作业的工作节点根据接收到的参数重新启动作业。此外,对于每一个调度队列中的作业,调整每个工作节点的本地批大小,以保持相同的全局批大小。
[0113] 在一种可选的实施方式中,如果正在运行的作业因对应的全部集群资源被分配给其他作业时,将暂停该正在运行的作业的训练进程,同时会在磁盘保存当先训练进度得到的模型参数,直到该作业重新启动。
[0114] 需要说明的是,本申请实施例的方法不会删除集群资源上的CUDA(ComputeUnified Device Architecture,统一计算设备架构)的上下文,并保持所有通信进程组处于活动状态,从而减少集群资源运行过程中,改变每个作业对应的集群资源而带来的时间成本。本申请实施例的方法在集群资源上运行时,不受限于深度学习框架和集群资源(GPU)的设备型号,具体的深度学习框架和集群资源(GPU)的设备型号可根据实际情况确定,本申请在此不作限制。
[0115] 本申请提供了一种面向深度学习的服务器无感知计算集群调度方法,包括:获取新增作业,将所述新增作业添加至调度队列;基于所述调度队列中每个作业对应的截止时间,确定所述调度队列中每个作业分配的资源量,作为第一调度方案;基于所述调度队列中每个作业的边际回报,对所述第一调度方案中的每个作业分配的资源量进行分配,得到第二调度方案;基于所述第二调度方案,确定所述调度队列中每个作业对应的资源;调用集群中所述调度队列中每个作业对应的资源对所述每个作业进行训练。本申请的方法具有以下优点:
[0116] (1)本申请的方案中,开发人员只需要提供新增作业的算法信息,无需关注系统资源配置的细节,系统按照本申请的方法可以自动进行资源分配和调度,大幅度降低了模型训练任务的开发复杂度,降低了开发人员的学习成本。
[0117] (2)本申请的方案通过基于作业的截止时间和边际回报,对所有作业进行动态资源分配,从而在保证调度队列中进行训练的作业的截止时间满足率的同时,充分利用集群资源,有效提升作业的性能。
[0118] 基于同一发明构思,本申请实施例公开一种面向深度学习的服务器无感知计算集群调度装置,图4示出了一种面向深度学习的服务器无感知计算集群调度装置示意图,如图4所示,包括:
[0119] 获取模块,用于获取新增作业,将所述新增作业添加至调度队列;
[0120] 第一资源分配模块,用于基于所述调度队列中每个作业对应的截止时间,确定所述调度队列中每个作业分配的资源量,作为第一调度方案;
[0121] 第二资源分配模块,用于基于所述调度队列中每个作业的边际回报,对所述第一调度方案中的每个作业分配的资源量进行分配,得到第二调度方案;
[0122] 训练执行模块,用于基于所述第二调度方案,确定所述调度队列中每个作业对应的资源;调用集群中所述调度队列中每个作业对应的资源对所述每个作业进行训练。
[0123] 在一种可选的实施方式中,所述获取模块,包括:
[0124] 待训练作业获取子模块,用于获取待训练作业以及所述待训练作业的截止时间;
[0125] 满足份额获取子模块,获取集群的空闲资源量,以及,基于所述待训练作业的截止时间获取所述待训练作业的满足份额,所述满足份额为在所述待训练作业的截止时间内完成对所述待训练作业训练所需的最小资源量;
[0126] 新增作业获取子模块,用于在所述空闲资源量大于所述待训练作业的满足份额的情况下,将所述待训练作业作为所述新增作业。
[0127] 在一种可选的实施方式中,所述第一资源分配模块,包括:
[0128] 排序子模块,用于按照所述调度队列中每个作业对应的截止时间,对所述调度队列中的作业进行排序;
[0129] 渐进填充子模块,用于在每个预设时间段内,向所述调度队列中每个作业分配预设数量的资源量,所述预设时间段为所述调度队列中每个作业对应的截止时间之前的单位时间段;
[0130] 第一资源分配子模块,用于若在所述预设时间段内,所述调度队列中每个作业能够在所述每个作业对应的截止时间内完成训练,将所述预设时间段内的所述调度队列中每个作业对应的资源量,作为所述第一调度方案。
[0131] 在一种可选的实施方式中,所述第二资源分配模块,包括:
[0132] 候选第二调度子模块,用于按照所述第一调度方案中每个作业的边际回报,对所述第一调度方案中的作业进行排序,得到候选第二调度方案;
[0133] 分配迭代子模块,用于分配迭代:基于集群的空闲资源量,向所述候选第二调度方案中的目标作业分配一个资源量,按照所述候选第二调度方案中每个作业的边际回报,对所述候选第二调度方案中的作业进行排序,得到更新的候选第二调度方案,所述目标作业为所述候选第二调度方案中边际回报最大的作业;
[0134] 重复子模块,用于重复上述分配迭代过程,直至集群的空闲资源量全部进行分配,将所述更新的候选第二调度方案作为所述第二调度方案。
[0135] 在一种可选的实施方式中,所述第二资源分配模块,还包括:
[0136] 第一边际值确定子模块,用于确定每个作业分配的第一资源量以及第一运行时间,所述第一资源量为所述第一调度方案中的每个作业分配的资源量,所述第一运行时间为每个作业基于所述每个作业分配的第一资源量完成训练的时间;将所述每个作业分配的第一资源量与所述第一运行时间的乘积,作为所述每个作业的第一边际值;
[0137] 第二边际值确定子模块,用于确定每个作业分配的第二资源量以及第二运行时间,所述第二资源量为在所述第一资源量上加一个资源量,所述第二运行时间为每个作业基于所述每个作业分配的第二资源量完成训练的时间;将所述每个作业分配的第二资源量与所述第二运行时间的乘积,作为所述每个作业的第二边际值;
[0138] 边际回报确定子模块,用于将每个作业的所述第一边际值与所述第二边际值的差值,作为所述每个作业的边际回报。
[0139] 在一种可选的实施方式中,所述训练执行模块,包括:
[0140] 资源树获取子模块,用于基于所述集群中的资源,确定集群资源树;
[0141] 资源子树枚举子模块,用于基于所述集群资源树,枚举得到多个集群资源子树,所述多个集群资源子树的资源量和/或资源种类不同;
[0142] 资源子树获取子模块,用于获取资源量大于或等于指定作业对应的资源量的所述集群资源子树,作为所述指定作业的候选集群资源子树,所述指定作业对应的资源量为2的n次幂,n大于或等于1;
[0143] 资源获取子模块,用于获取资源量最小的所述指定作业的候选集群资源子树中的集群资源,作为所述指定作业对应的资源。
[0144] 基于同一发明构思,本申请实施例公开了一种电子设备,图5示出了本申请实施例公开的电子设备示意图,如图5所示,电子设备100包括:存储器110和处理器120,存储器110与处理器120之间通过总线通信连接,存储器110中存储有计算机程序,该计算机程序可在处理器120上运行,以实现本申请实施例公开的面向深度学习的服务器无感知计算集群调度方法中的步骤。
[0145] 基于同一发明构思,本申请实施例公开了一种计算机可读存储介质,其上存储有计算机程序/指令,该计算机程序/指令被处理器执行时实现本申请实施例公开的面向深度学习的服务器无感知计算集群调度方法中的步骤。
[0146] 基于同一发明构思,本申请还提供了一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现本申请实施例公开的面向深度学习的服务器无感知计算集群调度方法中的步骤。
[0147] 本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0148] 本申请实施例是参照根据本申请实施例的方法、装置、电子设备和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0149] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0150] 这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0151] 尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
[0152] 最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
[0153] 以上对本申请所提供的一种面向深度学习的服务器无感知计算集群调度方法及产品,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。