一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种异构感知的GPU资源分配与调度方法及系统与流程

2021-10-24 10:45:00 来源:中国专利 TAG:调度 感知 分配 异构 方法

一种异构感知的gpu资源分配与调度方法及系统
技术领域
1.本发明涉及深度学习技术领域,尤其是涉及一种异构感知的gpu资源分配与调度方法及系统。


背景技术:

2.深度学习在计算机视觉,语音识别,自然语言处理等领域获得了巨大的成功和广泛的应用,并在不断在自动驾驶等新兴领域发挥着越来越重要的作用。深度学习应用通常包含模型设计、模型训练和模型推理。其中,深度学习训练通常有计算密集的特点,随着模型规模越来越大,对模型精度的要求越来越高,更多速度更快的更新的加速器被应用到深度学习训练中。随着训练数据集规模越来越大,为了缩减训练时间,通常需要在多个gpu上执行分布式深度学习训练。
3.目前许多云服务商构建了大规模的gpu集群以满足各类深度学习训练任务对算力的需求。但是目前最常见的集群批处理任务(batch job)调度器yarn没有充分考虑深度学习任务训练时长不可预测性,任务切换成本高,任务之间干扰大等问题。为了克服这些问题,学术界和工业界提出了各类调度系统。
4.深度学习训练任务的不可预测性是有别于传统批处理任务的重要特征。在任务调度场景下,我们知道在已知任务持续时长和任务到达时间的情况下,最短作业优先可以在以最小化平均任务完成时间(jct)为目标的场景下达到最优的调度效果;在已知任务持续时长和未知任务到达时间的情况下,最短剩余时间优先(srtf)算法可以在上述场景下达到最优的调度效果。但是他们都依赖于任务执行时间的预测。在传统的批处理任务中,任务执行时间可以通过数据量和计算资源做出近似的预估,但是在深度学习训练任务中,任务的执行时间常常难以做出合理的预测。由于深度学习任务训练常常是迭代式向前推进的,学术界通过假设任务loss曲线可以被收敛以及捕捉之前训练中重复的执行模式,来预测任务的执行时间。这在现实的生产环境任务中是不可行的,因为这对于那些难以收敛的任务做出了过度简化的假设。
5.在深度学习训练任务持续时长不可知的背景下,(least attained service,las)最小获得服务者优先算法相比于其他调度算法更适用于当前场景。las是在1960年代中期提出的,las是不需要先验知识的抢占式调度策略。las给系统中获得服务最小的任务优先分配服务资源。在深度学习训练任务调度场景下,常常会以任务占用gpu卡的数量和持续时间来计算任务获得的服务。
6.目前,gpu集群环境中gpu型号由于采购批次不同通常很难同构存在,因此异构硬件环境将成为gpu集群的常态。举例而言,nvida v100 gpu价格为nvida k80 gpu的3倍,单精度计算性能为k80的2倍。另一方面,深度学习模型在不同加速设备上的性能表现也呈现出来异构性的特点。例如,resnet

50在v100上相比于k80获得10倍的性能提升,而a3c模型只有2倍的提升。考虑到经济性,v100不再是所有模型的最佳选择,更便宜的设备虽然相比于v100性能更低,但是经济性上,某些模型的训练中表现可能更好。现有的调度策略并没有
充分考虑。
7.鉴于上述研究背景,目前亟需一种异构感知的gpu资源分配与调度方法及系统来解决现在深度学习训练任务调度器的两个挑战:
8.一是任务持续时长不可知的前提下,基于最小获得服务者优先(least attained service,las)中权重计算未纳入对设备异构性的考虑;
9.二是任务放置到gpu上,将gpu视为同构设备,未纳入对设备异构性以及模型异构性的考虑,任务总体吞吐量存在优化的空间;


技术实现要素:

10.为解决现有技术的不足,实现提升平均任务完成时间的目的,本发明采用如下的技术方案:
11.一种异构感知的gpu资源分配与调度方法,包括如下步骤:
12.s1:在提交深度学习训练的任务前,进行预分析,通过任务在不同gpu资源的运行,解析出任务在不同gpu资源下的性能指标;
13.s2:在提交深度学习训练任务后,将任务优先级设置为最高,并提交到高优先级的q1等待队列中;
14.s3:当事件后,触发调度,放置器根据gpu异构性和任务的性能指标,为任务分配gpu资源,以提升整体吞吐量,所述事件包括任务提交,和/或任务结束,和/或可用的gpu资源发生变化;
15.s4:监控正在执行的任务,计算其优先级,根据优先级确定计算任务是否要让出gpu资源,将需要让出gpu资源的任务放入低优先级的q2等待队列,从而达到减小后续任务等待时间,减小平均任务完成时间的目的;
16.s5:监控q2等待队列中的任务等待时间是否超过饥饿阈值(starve_threshold),如果超过,则该任务的优先级设为最高,并移入q1等待队列,避免任务饥饿。
17.所述步骤s1中的性能指标,是深度学习分布式训练任务运行时,深度学习模型在单卡上占用的峰值显存、深度学习分布式训练任务在不同型号的gpu上的平均每秒迭代次数。
18.所述步骤s1中,如果深度学习分布式训练任务,从未在gpu集群中运行过,则在包含多个型号的gpu环境中,预先执行深度学习分布式训练任务,以解析出在不同型号gpu上的性能指标。
19.进一步地,所述步骤s4包括如下步骤:
20.s41:监控当前正在执行的计算任务,累计计算任务从开始执行到当前时刻的优先级,所述优先级,采用最小获得服务者优先(least attained service,las)的调度算法,公式为:
[0021][0022]
其中:
[0023]
l为任务从开始执行到当前被调度的次数;
[0024]
i

为第i

次调度;
[0025]
t
i

为在第i

次调度时计算的时长;
[0026]
n
i

为gpu数量;
[0027]
p
i

为gpu出厂性能指标,这部分根据厂商给出的指标确定。
[0028]
s42:如果优先级大于当前所有任务平均优先级乘以优先级阈值系数(priority_threshold_ratio),说明当前任务占据了过多的资源或者当前的资源占据了过长的时间,调度器暂停当前的任务,并将该任务调度到q2等待队列中,所述优先级阈值系数为浮点数,来源于系统配置。
[0029]
进一步地,所述步骤s5包括如下步骤:
[0030]
s51:监控目前q2等待队列中的任务,记录任务从入队到当前的等待时间;
[0031]
s52:如果等待时间超过了任务已经运行时间乘以饥饿阈值系数(starve_threshold_ratio),则认为任务处于饥饿状态,将任务调度到q1等待队列中,并将其优先级设为0,即最高,所述饥饿阈值系数为浮点数,来源于系统配置。
[0032]
进一步地,所述步骤s3包括如下步骤:
[0033]
s31:当事件出现后,开始调度操作,所述事件包括任务提交,和/或任务结束,和/或可用的gpu资源发生变化;
[0034]
s32:比较gpu集群中,可用gpu资源是否满足q1等待队列的队头任务所需的gpu资源,如果不满足,则跳过该任务,取下一个任务,直至找到满足条件的任务或者到达队尾,如果没有找到满足条件的任务,此轮调度操作结束;
[0035]
s33:当找到满足条件的任务时,将任务元祖(job
s
,m
s
,r
s
)提交放置器,其中,job
s
是任务名,m
s
是任务的吞吐量矩阵,r
s
是需要的gpu资源量,放置器从可用的gpu资源中寻找符合任务要求且性能最好的gpu资源,并将其标记为不可用;
[0036]
s34:放置器遍历目前所有正在执行的任务列表中的(job
i
,m
i
,r
i
),寻找r
i
小于等于r
s
的任务,根据吞吐量矩阵,计算与r
s
互换资源带来的吞吐量增长,选择增长大于0且增长最大的一个任务r
i
与job
s
替换资源,如果吞吐量增长没有大于0的任务,则直接将r
s
分配给job
s

[0037]
步骤s35:放置器将任务在首次调度或者重新迁移时分配的gpu资源信息(型号以及时刻),发送给调度器进行持久化,用于后续监控正在执行的任务的优先级的计算。
[0038]
所述步骤s31中,任务结束可用的gpu资源发生变化,是任务由于出错而让出资源,或者任务因占用服务资源过多、过久,导致任务被停止而让出资源。
[0039]
所述步骤s32中满足任务所需gpu资源,是指同时满足任务所需的gpu卡数,及分配的gpu满足任务性能数据中,峰值gpu显存的需求。
[0040]
所述步骤s33中放置器为负责将任务放置到具体设备上的模块,放置器需要充分考虑异构性,以实现对平均任务完成时间的提升。
[0041]
进一步地,所述步骤s34中,吞吐量增长的计算公式为:
[0042]
n
i
(m
ik

m
ij
) n
s
(m
sj

m
sk
)
[0043]
其中:
[0044]
m为分布式训练任务吞吐量矩阵,m
ij
表示第i个任务在型号为j的gpu上的性能表现;
[0045]
i为待替换任务;
[0046]
s为待分配任务;
[0047]
n
i
为任务i需要的gpu卡数;
[0048]
n
s
为任务s需要的gpu卡数;
[0049]
j为已经分配到任务i的gpu型号;
[0050]
k为准备分配到任务s的gpu型号。
[0051]
进一步地,所述步骤s2包括如下步骤:
[0052]
s21:提交任务到调度器时,将该任务对应的性能指标提交到调度器中,调度器持久化性能指标以便于后续计算;
[0053]
s22:调度器将刚提交任务的优先级设置为0,优先级为小于等于0的浮点数,值越大优先级越高,0为最高优先级;
[0054]
s23:调度器将刚提交任务入队到q1等待队列中。
[0055]
进一步地,所述q1等待队列的排序方法为:先按优先级从高到低排序,相同优先级的任务再按提交时间排序。
[0056]
进一步地,所述s1中的性能指标为r=(m

,g),其中,g表示深度学习分布式训练任务在一个gpu卡上的峰值内存占用,m

表示深度学习分布式训练任务在不同型号gpu上的每秒迭代次数,m

为一个向量。
[0057]
一种异构感知的gpu资源分配与调度系统,包括:调度器、放置器、探测器,采用双层反馈队列,防止任务饥饿的发生,使平均任务完成时间(job complete time,jct)最小,包括高优先级的q1等待队列和低优先级的q2等待队列,新提交的任务优先级设置为最高,并进入q1等待队列,正在执行的任务和q1等待队列中的任务,输入调度器,调度器为任务设置优先级,当可用的gpu资源发生变化后,触发调度,调度器为正在执行的任务计算其优先级,根据优先级确定正在执行的计算任务是否要让出gpu资源,将需要让出gpu资源的任务,放入q2等待队列,从而达到减小后续任务等待时间,减小平均任务完成时间的目的,调度器监控q2等待队列中的任务等待时间是否超过饥饿阈值,如果超过,则该任务的优先级设为最高,并移入q1等待队列,避免任务饥饿;探测器,负责对任务进行分析,对任务在不同型号的gpu资源下,计算吞吐量指标;放置器,根据gpu异构性为任务分配gpu资源,将任务放置到具体设备上,以提升整体吞吐量,实现对平均任务完成时间的提升。
[0058]
进一步地,所述调度器比较gpu集群中,可用gpu资源是否满足q1等待队列的队头任务所需的gpu资源,如果不满足,则跳过该任务,取下一个任务,直至找到满足条件的任务或者到达队尾,如果没有找到满足条件的任务,此轮调度操作结束;当找到满足条件的任务时,所述放置器将该可用gpu资源标记为不可用,并遍历正在执行的任务列表,找到正在执行的任务,其gpu资源量小于等于满足条件的任务的gpu资源量,根据吞吐量矩阵,计算互换gpu资源带来的吞吐量增长,选择增长大于0且增长最大的一个正在执行的任务与满足条件的任务进行资源替换,如果吞吐量增长没有大于0的正在执行的任务,则直接将可用cpu资源分配给满足条件的任务。
[0059]
本发明的优势和有益效果在于:
[0060]
本发明在las调度算法的基础上,充分考虑设备异构性来优化任务占用服务资源的计算;在任务到gpu计算设备的放置算法上,具有充分考虑设备异构性来优化整体平均任务完成时间的优点。本发明通过对深度学习训练任务进行与分析得到在不同型号的gpu上
的性能指标来确定任务的资源占用和设备放置,并通过las算法来处理持续时长不可预测问题,以达到提升平均任务完成时间的目标。
附图说明
[0061]
图1为本发明的总体架构图。
[0062]
图2为本发明中参数服务器的结构示意图。
[0063]
图3为本发明中任务状态转换流程图。
具体实施方式
[0064]
以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。
[0065]
深度学习分布式训练任务常见数据并行和模型并行。这里的深度学习分布式训练任务指的是深度学习模型在数据并行模式下的训练过程。深度学习分布式训练任务通常使用参数服务器架构,架构如图2所示。该架构包括参数服务器(parameter server)和计算服务器(worker server)。其中参数服务器存储全局模型参数,并作为服务方接受计算服务器的参数查询和更新请求,计算服务器会拉取和更新参数服务器中参数,并在本地维持一个模型副本。训练数据通常保存在分布式文件系统上,每一个计算节点都可以访问该分布式文件系统,并根据逻辑划分只迭代加载需要的训练数据。深度学习分布式训练任务根据资源情况可能会分配到一台服务器的多个gpu上,也可能分配到多台服务器的多个gpu上。
[0066]
深度学习调度器主要由探测器、调度器、放置器和gpu集群组成。探测器负责对任务进行分析,目标是获取任务在不同型号的gpu下计算吞吐量指标。调度器是最核心的组件,如图1所示,这里使用了双层反馈队列来防止任务饥饿的发生。调度目标是使得平均任务完成时间(job complete time,jct)最小。其中:
[0067]
jct=t
完成时间

t
到达时间
[0068]
双层反馈队列由q1队列和q2队列组成。q1队列是高优先级队列,q2队列是低优先级队列。所有新提交的任务进入q1队列,所有被替换的任务进入q2队列。q2队列中的任务进入饥饿状态(如图3所示)后会进入q1队列。这里不同于进程调度的是,此处的双层反馈队列中高优先级队列新的任务进来不会抢占正在运行的低优先级队列,而是等待低优先级队列达到最高资源占用量后被调度器调度到q2队列中。放置器集成了放置算法,维护和管理了下层gpu集群。放置器负责维护任务和资源映射关系,其核心是放置算法,放置算法根据任务特点以及现有资源分配情况,规划出一个合理高效的任务放置方案。
[0069]
调度器调度的粒度为深度学习分布式训练任务整体,而不对内部参数服务器和计算服务器进行更细粒度的调度和管理,调度器从gpu集群中为深度学习分布式训练任务分配计算资源后,参数服务器和计算服务器的分配由任务自身来完成,因此一个深度学习分布式训练任务,包括参数服务器、训练服务器、数据以及其依赖的硬件,在调度器中一起被抽象成一个任务的概念。
[0070]
一个深度学习分布式训练任务具有周期性迭代和任务时长不可预测的特点。
[0071]
深度学习分布式训练任务在每次迭代中,工作节点基于之前逻辑划分获得的训练数据会执行一次前向传播和反向传播的计算。由于深度学习分布式训练任务是迭代式进行
的,每一次迭代中数据加载、计算、网络同步都高度类似,因此训练过程中每一个迭代的耗时是高度相似的。因此,任务的停止和恢复可以通过模型持久化到文件系统以及从文件系统中读取模型来实现。
[0072]
深度学习分布式训练任务中存在训练前可调整的超参数。包括网络参数、优化参数、正则化参数等。在automl中,常常会通过组合多种超参数来批量训练许多个模型,其中大部分模型都会因为各种问题提前停止训练,譬如收敛速度过慢等等。可见,在automl中一个任务的执行依赖于automl搜索算法,而不仅仅依赖于任务是否会收敛。因此深度学习训练任务仅仅根据模型结构以及训练任务产生的日志来预测任务执行时长是不可靠的。因此,我们使用了las算法来避免对深度学习训练任务时长的预测。
[0073]
本发明提出了一种异构感知的gpu资源分配与调度方法及系统,在基于双层反馈队列和las算法的基础上,增加了对gpu异构性和应用异构性的考虑,优化了调度算法,提升了平均任务完成时间。其总体架构如图1所示,具体实施方式包括如下步骤:
[0074]
(1)在提交深度学习训练任务前进行预分析,从该任务在不同gpu加速器的运行日志中解析出所需的性能指标。
[0075]
一个深度学习分布式训练任务中计算节点的任务包含了数据io、cpu计算、gpu计算、网络通信等不同阶段。本发明将多个阶段当做一个整体看待。如上文所述,一个深度学习分布式训练任务具有周期性迭代特点,且训练过程中每一个迭代的耗时是高度相似的。因此可以通过在提交深度学习训练任务前进行预分析,通过在不同gpu加速器上对任务进行预执行,记录其运行日志中,并从中解析出所需的性能指标。
[0076]
本发明中,定义程序的性能指标为r=(m

,g)。其中,g表示深度学习分布式训练任务在一个卡上的峰值内存占用。m

表示深度学习分布式训练任务在不同型号gpu上的每秒迭代次数,m

为一个向量。
[0077]
(2)在提交深度学习训练任务后,将其优先级设置为最大,并提交到高优先级的q1等待队列中。
[0078]
提交任务后,性能指标为r=(m

,g)也一并提交到调度器,调度器会持久化这部分内容以便于后续计算,调度器还会为任务设置优先级。优先级的计算的公式为:
[0079][0080]
其中:
[0081]
l为任务从开始执行到当前被调度次数
[0082]
i

为第几次调度
[0083]
t
i

为在第次调度时计算时长
[0084]
n
i

为gpu数量
[0085]
p
i

为gpu性能指标,这部分根据厂商给出的指标确定
[0086]
由于任务刚刚提交,不存在任务资源占用,因此任务优先级设置为零,即最高。任务进入q1队列中。
[0087]
本发明中使用了双层反馈队列,q1队列为高优先级队列,q2为低优先级队列。
[0088]
(3)当事件(任务提交、或任务结束、或可用的gpu资源发生变化)出现后,触发调度,放置器根据gpu异构性为任务分配gpu资源以提升整体吞吐量。
[0089]
本发明设计了一个基于最小获得服务者优先(least attained service,las)的调度算法的调度器,其输入为gpu集群中正在运行的任务和队列中正在等待的任务。当有上述三个事件发生时,即开始触发算法2的执行。
[0090]
算法1给出了本发明的具体的放置策略,其中n
i
为任务i需要的gpu卡数。放置策略考虑设备的异构性和应用的异构性。
[0091]
算法2给出了本发明具体的调度策略,其中m为分布式训练任务吞吐量矩阵,m
ij
表示第i个任务在型号为j的gpu上的性能表现。
[0092]
算法1:放置算法
[0093]
函数place(s,j):
[0094]
初始化c为空值
[0095]
对于j中每一个任务i有
[0096]
如果可用的gpu数量大于n
i
且n
i
小于n
s

[0097]
记录新增的吞吐率iv为n
i
(m
ik

m
ij
) n
s
(m
sj

m
sk
)
[0098]
如果新增的吞吐率iv大于已经记录的最大值,有
[0099]
记录的最大增加吞吐率为iv
[0100]
将c更新i
[0101]
如果c不为空,有
[0102]
将c任务调度到已有的空闲gpu上
[0103]
将s任务调度到c任务的gpu上
[0104]
否则
[0105]
将s任务调度到已有的空闲gpu上
[0106]
算法2:异构感知的las调度算法
[0107]
函数hlas(jobs j,queue q1,queue q2)
[0108]
avgp=j中优先级的平均值
[0109]
对于j中每一个任务i有
[0110]
根据函数priority(i,j)计算任务i的优先级p,
[0111]
如果p大于avgp*priority_threshold_ratio有
[0112]
停止任务i
[0113]
将任务i入队到q2
[0114]
对于q2中每一个任务j有
[0115]
如果waiting_time of i除以running_time of i大于starve_threshold_ratio有
[0116]
将i任务优先级设置为0,并清空之前的执行period
[0117]
将任务i入队到q1
[0118]
对于q1中每一个任务i有
[0119]
如果可用的gpu数量大于n
i

[0120]
place(i)
[0121]
可用的gpu数量减去n
i
[0122]
函数priority(i)
[0123]
初始化优先级p为0
[0124]
对于任务i的每一段执行period有
[0125]
对于period中每一张gpu有
[0126]
p

=period时长*gpu的性能
[0127]
返回p
[0128]
(4)监控正在执行的任务,计算其优先级,根据优先级确定计算任务是否要让出gpu资源并放入q2等待队列,从而达到减小后续任务等待时间,减小平均任务完成时间的目的。
[0129]
监控目前的计算任务,其优先级的实质为目前占用的服务资源,其计算公式参考算法中函数priority。对于如何度量占用过度的服务资源,我们没有设定一个确定的阈值,而采用和平均值的比率来衡量。如果当前优先级大于平均值乘以priority_threshold_ratio的值,则认为系统资源的占用过度。
[0130]
(5)监控q2队列中的任务等待时间是否超过starve_threshold,如果超过则优先级设为最高并移入q1队列,避免任务饥饿。
[0131]
类似于对任务过度占用服务资源的判断,对于任务等待时间过长导致的饥饿,我们通过判断等待时间是否超过运行时间乘以starve_threshold的值,假如超过,则认为任务处于饥饿状态,将任务调度到q1,将其优先级设为0,并在未来的优先级计算中忽略过去的执行记录。
[0132]
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜