CN110275765B - 基于分支dag依赖的数据并行作业调度方法 - Google Patents
基于分支dag依赖的数据并行作业调度方法 Download PDFInfo
- Publication number
- CN110275765B CN110275765B CN201910514403.0A CN201910514403A CN110275765B CN 110275765 B CN110275765 B CN 110275765B CN 201910514403 A CN201910514403 A CN 201910514403A CN 110275765 B CN110275765 B CN 110275765B
- Authority
- CN
- China
- Prior art keywords
- branch
- scheduling
- branches
- dag
- time
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种基于分支DAG依赖的数据并行作业调度方法,包括1、作业端接收作业;2、遍历作业的DAG任务图,找出DAG图中的分支和分支同步,以及分支中的挂起分支;3、找出作业端每个DAG图中的挂起分支,并将挂起分支加入到分支集合B中;4、对挂起分支集合B中的分支执行分支调度算法,得到分支调度顺序P;5、当有计算资源时,根据分支调度顺序P进行执行单元分配并执行分支任务;6、重复步骤3至5,直到作业端中各DAG图中的分支被执行完。本发明通过确定各分支的紧急度,使不紧急的分支被延迟调度,节省下计算资源,分配给更紧急的作业,加快了分支同步的完成时间。经验证,本发明的方法与其他调度方法相比,平均作业完成时间减少了10‑15%。
Description
技术领域
本发明属于并行与分布计算领域,尤其涉及一种基于分支DAG依赖的数据并行作业调度方法。
背景技术
对于大数据的分析作业,如机器学***台被提出来专为高效处理数据并行的作业。然而,这涉及到一些挑战性的技术问题,如作业调度问题和网络通信。对于大数据分析作业,作业完成时间(job completion time,JCT)是一个极其重要的指标。JCT是指一个数据并行作业从提交到完成的一段时间。一个数据并行作业包括多个计算阶段和计算阶段之间的网络通信。这些计算阶段会按照指定好的先后顺序来执行,以便确保不会违反依赖关系。这种依赖关系形成了一个有向循环图。整个过程可以用有向循环图DAG(Directed Acyclic Graphene)来表示。目前,最新的DAG调度方法文献1“R.Grandl,S.Kandula,S.Rao,A.Akella,andJ.Kulkarni,“GRAPHENE:packing and dependency-aware scheduling for data-parallel clusters,”in USENIX Symposium on Operating Systems Design andImplementation(OSDI),2016,pp.81–97”,和文献2“R.Grandl,M.Chowdhury,A.Akella,andG.Ananthanarayanan,“Al-truistic scheduling in multi-resource clusters,”inUSENIX Symposium on Operating Systems Design and Implementation(OSDI),2016,pp.65–80.”会利用专门的某种启发式调度方法来调度计算阶段。但是,这两种调度方法并没有考虑到网络通信。在实际中这种数据并行作业的网络通信会涉及到数据混洗(datashuffle)的问题。文献3“M.Chowdhury,M.Zaharia,J.Ma,M.I.Jordan,and I.Stoica,“Manag-ing data transfers in computer clusters with orchestra,”ACN SIGCOMMComputer Communication Review,vol.41,no.4,pp.98–109,2011.”指出了这种网络通信时间占了作业完成时间JCT的50%,因此会对作业的完成时间有很大影响。为了解决这个问题,最近的数据流调度方法如文献4“Q.Liang and E.Modiano,“Coflow scheduling ininput-queued switches:Optimal delay scaling and algorithms,”in IEEEConference on Comput-er Communications(INFOCOM),2017,pp.10–18.
”,和文献5“W.Wang,S.Ma,B.Li,and B.Li,“Coflex:Navigating the fairness-efficiency tradeoff for coflow scheduling,”in IEEE Conference on ComputerCommunications(INFOCOM),2017,pp.46–54.”所述,提出一种针对网络数据流的新的抽象,称为coflow。coflow是指在两个依赖关系上连续的计算阶段之间传输的一组并行的数据流。最近,针对coflow调度方法,旨在减小平均的coflow完成时间。图1显示了一个数据并行作业的有向循环图(DAG)。这个作业由5个计算阶段和4个coflow组成。关键路径调度算法会优先调度最长路径上的计算阶段。关键路径调度方法会优先执行Stage1,Stage2,Stage3。然而,已经存在的coflow调度方法会优先调度最小的一个coflow。如果假设coflow3比coflow1、coflow2要小的话,coflow调度方法会先执行coflow3,延缓执行coflow1。这会导致关键路径方法执行Stage1后,不能立马调度Stage2,因为coflow1要等待coflow3先执行完成。但是这种coflow的调度方法,并不能很好的和DAG调度方法配合起来。这是因为两者的优化目标并不相同。
DAG调度技术是一种在有限的资源下针对作业的有向循环图DAG来决定其中各个任务调度优先级的技术。DAG调度是任务调度的一种方法,被广泛用于各种计算问题中,包括单机环境下多处理器的DAG作业调度,也有我们拟解决的数据并行作业DAG调度。通过DAG调度,可以实现资源利用率最大化或者作业平均完成时间最小化。和普通的任务调度方法有所不同,DAG调度不会把计算任务孤立起来,而是重视它们之间的依赖关系,并且强调作业层面上语义联系。对于DAG调度来说,在调度任务的过程中使用到了作业的DAG信息的话,此类调度方法即可被认为是DAG调度方法。目前主要的DAG调度方法:(1)关键路径算法,在整个作业DAG中,找到最关键的执行路径,将其作为关键路径。关键路径上的调度任务会被优先考虑,而其余路径上的任务需要会被次要考虑。但该方法没有考虑多个DAG作业的并发情况;(2)宽度优先的调度方法,优先DAG中宽度较大的作业。此方法同样缺少对多个作业并发调度的考虑;(3)作业打包调度,综合考虑所有作业的DAG,可以将DAG结构上相互补充的作业一同进行调度,提高作业的并发性。但该方法的复杂性很大,较难在实际中得以应用。
发明内容
本发明要解决的技术问题是怎样在多个作业并发的情况下减小作业完成时间,提出了一种基于分支DAG依赖的数据并行作业调度方法。
为解决该问题,本发明所采用的技术方案是:
一种基于分支DAG依赖的数据并行作业调度方法,包括以下步骤:
步骤1:作业端接收作业;
步骤2:遍历作业的DAG任务图,找出DAG的汇聚点和分叉点,将DAG任务图中的汇聚点称为一个分支同步,将DAG任务图中无汇聚、无分叉的链式部分称为一个分支,将不依赖其他分支或者所依赖的分支已经执行完成时的分支称为挂起分支;
步骤3:遍历作业端内每个作业的DAG任务图,找出每个DAG任务图中的挂起分支,并将所找出的挂起分支加入到挂起分支集合B中;
步骤4:对挂起分支集合B中的分支执行分支调度算法,得到分支调度顺序P;
步骤5:当有计算资源时,根据分支调度顺序P进行执行单元分配并执行分支任务;
步骤6:重复步骤3至5,直到作业端中各DAG图中的分支被执行完。
进一步地,步骤4中所述分支调度算法是指:
步骤4.1:将挂起分支集合B中的分支划分成多个调度对象,如果挂起分支集合中有多个并行分支的总的计算资源量小于资源容量的限制,将这多个并行分支打包成分支组合BC,并将该分支组合作为一个调度对象,未打包的分支单独作为一个调度对象;
步骤4.3:计算调度对象集合E中每一个调度对象o的紧急度U(o);
步骤4.4:将调度对象集合E中的调度对象按照紧急度进行排序,排序序列为p,则将P=P∪p,输出调度序列P。
进一步地,步骤4中所述分支调度算法包括以下步骤:
步骤4.1’:将挂起分支集合B中的分支划分成多个调度对象,如果挂起分支集合有多个并行分支的总的计算资源量小于容量的限制,将这多个并行分支打包成分支组合BC,并将该分支组合作为一个调度对象,未打包的分支单独作为一个调度对象;
步骤4.3’:计算调度对象集合E中每一个调度对象o的紧急度U(o);
步骤4.4’:在调度对象集合E中,选择紧急度最强的调度对象e;
步骤4.5’:对于调度对象集合E中除调度对象e之外的其他对象oj,记e→oj为临时调度顺序pj,1≤j≤J-1,J为调度对象集合中调度对象的总数;
步骤4.6’:计算临时调度顺序pj的超出时间ETj;
步骤4.7’:将min(ETj)所对应的临时调度顺序pj追加到调度序列P中,P=P∪pj;
步骤4.8’:从调度对象集合E中剔除e和oj涉及到的分支;
步骤4.9’:重复步骤4.4’至步骤4.8’,直到调度对象集合E中的任何分支或分支组合都添加到调度序列P中。
进一步地,步骤4.3中所述调度对象的紧急度U(o)的计算方法是:
步骤4.3.1:计算调度对象o的时间长度T(o);
1)当调度对象为分支时,则时间长度T(o)为:
其中,S代表一个分支中阶段的集合,Ts代表一个阶段s的计算任务集合,W代表工作线程的集合。Dt,w代表由线程w执行计算任务t所用的时间,Dt,w的时间通过式2的预测模型进行预测;
Dt,w(i)=a1Dt,w(i-1)+a2Dt,w(i-2)+...anDt,w(i-n) (2)
式2表示由线程w执行当前任务t所用的时间需要通过收集当前任务t所在的计算阶段所有任务的历史执行数据,历史执行数据的条数共有n条,i表示作业的迭代次数,对公式2进行模型拟合,得到a1、a2...an参数的估计值;
2)当调度对象为分支组合{a,b}时,则分支组合{a,b}的时间长度为max{T(a),T(b)};
步骤4.3.2:计算调度对象的紧急度U(o);
1)当调度对象为分支时,通过公式1计算出该分支所在的分支同步中所有分支的时间长度,则分支的紧急度U(o)等于该分支所在的分支同步中最长的分支时间长度与该分支的时间长度之差,时间差越短,紧急度越强。
2)当调度对象为分支组合{a,b}时,则分支组合{a,b}的紧急度为min{U(a),U(b)}。
进一步地,超出时间ETj的计算方法是:
其中T(e)和U(oj)分别表示调度对象e的时间长度和调度对象oj的紧急度。
与现有技术相比,本发明可以取得以下有益效果:
本发明一种基于分支DAG依赖的数据并行作业调度方法,通过将DAG图中的一段无汇聚、无分叉的链式部分作为一个可调度的最小对象,称为一个分支,一个分支会由连续的计算阶段和阶段之间的网络通信组成。一个分支内的计算阶段和相关的网络通信必须被串行的执行因此可以被视作一个可调度的对象,使用分支作为可调度的对象来分配资源,一个分支内各阶段的计算任务会安排到相同的机器上,极大地满足数据本地性,减少了网络的开销,减小了作业完成时间。此外,本发明通过在一个分支同步中根据各分支可容忍的延迟时间长短,确定各分支的紧急度,从而使得短的较不紧急的分支被延迟调度,节省下计算资源,分配给其他更紧急的作业,从而加快了分支同步的完成时间。因此,本发明基于分支DAG调度与Spark FIFO和关键路径调度方法相比,平均作业完成时间减少了10-15%。
附图说明
图1为数据并行作业的有向循环图;
图2为本发明总体结构示意图;
图3为本发明将作业DAG转化为分支示意图;
图4为本发明的分支调度方法流程图;
图5为分支预测精确性变化图;
图6为分支调度方法比Spark FIFO和最短作业优先调度方法的平均JCT比较示意图;
图7为分支调度方法与Spark FIFO和关键路径调度方法在30个作业同时提交后于不同时刻的完成情况;
图8a为当分支的数量增加时预测开销的变化曲线,8b挂起分支数量增加时分支调度算法的复杂性示意图;
图9a为在相同的时间内,分支调度方法可以完成更多的作业;图9b显示分支调度方法和CARBYNE方法的作业完成时间比;
图10为在机器数量、作业数量以及作业提交时间跨度变化时三种调度方法的平均作业完成时间变化图;图10a为5000个作业被不同数量的机器执行的平均JCT,图10b显示了平均JCT会随着作业的数量而增加,图10c显示了随着作业提交时间跨度的变化三种调度方法的平均JCT的变化趋势。
具体实施方式
为了使本申请中的技术方案被更好地理解,图2至图10示出了本发明基于分支DAG依赖的数据并行作业调度方法的一种具体实施例,包括以下步骤:
一种基于分支DAG依赖的数据并行作业调度方法,包括以下步骤:
步骤1:作业端接收作业;
步骤2:遍历作业的DAG任务图,找出DAG的汇聚点和分叉点,将DAG任务图中的汇聚点称为一个分支同步,将DAG任务图中无汇聚、无分叉的链式部分称为一个分支,将不依赖其他分支或者所依赖的分支已经执行完成时的分支称为挂起分支;
如图3所示的分支和分支同步的示意图,对于数据并行作业来说,数据处理是按照一定的操作顺序完成的。这些操作之间存在依赖性,即部分操作只能在其他一些操作完成之后才可以执行。图3中的阶段8对应的任务只能在阶段2、阶段3、阶段5完成后才能执行。因此,阶段8是一个汇聚节点,被选做一个分支同步点。而无分叉无汇聚的阶段链则成为一个分支,如阶段1和阶段2组成了分支1。在一个分支内部可以包含一个阶段,也可以是多个阶段。
步骤3:遍历作业端内每个作业的DAG任务图,找出每个DAG任务图中的挂起分支,并将所找出的挂起分支加入到挂起分支集合B中;
步骤4:对挂起分支集合B中的分支执行分支调度算法,得到分支调度顺序P;
本实施例采用分支调度算法指,如图4所示:
步骤4.1:将挂起分支集合B中的分支划分成多个调度对象,如果挂起分支集合中多个并行分支的总的计算资源量小于资源容量的限制,将这多个并行分支打包成分支组合BC,并将该分支组合作为一个调度对象,未打包的分支单独作为一个调度对象;
步骤4.3:计算调度对象集合E中每一个调度对象o的紧急度U(o);
步骤4.3.1:计算调度对象o的时间长度T(o);
1)当调度对象为分支时,则调度对象o的时间长度T(o)为:
其中,S代表一个分支中阶段的集合,Ts代表一个阶段s的计算任务集合,W代表工作线程的集合。Dt,w代表由线程w执行计算任务t所用的时间,Dt,w的时间通过式2的预测模型进行预测;
Dt,w(i)=a1Dt,w(i-1)+a2Dt,w(i-2)+...anDt,w(i-n) (2)
式2表示由线程w执行当前任务t所用的时间需要通过收集当前任务t所在的计算阶段的所有任务的历史执行数据,历史执行数据的条数共有n条,i表示作业的迭代次数,对公式2进行模型拟合,得到a1、a2...an参数的估计值。
当调度对象为分支组合{a,b}时,则分支组合{a,b}的时间长度为max{T(a),T(b)};
步骤4.3.2:计算调度对象的紧急度U(o);
当调度对象为分支时,通过公式1计算出该分支所在的分支同步中所有分支的时间长度,则分支的紧急度U(o)等于该分支所在的分支同步中最长的分支时间长度与该分支的时间长度之差,时间差越短,紧急度越强。
当调度对象为分支组合{a,b}时,则分支组合{a,b}的紧急度为min{U(a),U(b)}。
步骤4.4:将调度对象集合E中的调度对象按照紧急度进行排序,排序序列为p,则将P=P∪p,输出调度序列P。
由于并发地执行一个作业的所有分支会占用过多资源,阻碍其他作业执行。考虑到由多个分支组成的分支同步,其完成时间由时间最长的那个分支决定,由于每个分支的时间长度是不同的,适当延迟调度执行时间较短的分支,只要在最长的分支完成前结束其他较短的分支,就不会导致分支同步的时间延长,并且通过延迟调度时间较短的分支,为长的分支预留计算资源。不过,短的分支被延迟太久的话,分支同步的完成时间也会增加。本发明的调度原则是,延迟短的分支,但不能让它成为所属分支同步中最后才完成的分支。本发明基于这个启发式思想,提出了分支紧急度,如图3所示,对于一个分支同步1,分支3的长度是同步1中时间最长的分支,该分支的时间就作为分支同步1的时间限制,分支的紧急度被定义为一个分支在分支同步的时间限制下,最大的可容忍的延迟调度时间。比如分支4的紧急度是分支同步1的时间限制减去分支4的时间。该紧急度意味着分支4可被延迟调度的最长时间。本实施例通过对作业端各作业的所有分支的紧急度进行排序,优先调度那些更紧急的分支,以免延误分支同步的时间,能够减少不正确调度导致的延误。
但是这种通过紧急度排序的调度方法可能会导致分支同步完成的时间被延长。针对这一问题,本发明提出了一种最小化分支同步时间的调度算法的问题,因此本发明对分支调度方法做了以下改进:
进一步地,步骤4中所述分支调度算法还包括以下步骤:
步骤4.1’:将挂起分支集合B中的分支划分成多个调度对象,如果挂起分支集合中多个并行分支的总的计算资源量小于资源容量的限制,将这多个并行分支打包成分支组合BC,并将该分支组合作为一个调度对象,未打包的分支单独作为一个调度对象;
步骤4.3’:计算调度对象集合E中每一个调度对象o的紧急度U(o);
步骤4.4’:在调度对象集合E中,选择紧急度最强的调度对象e;
步骤4.5’:对于调度对象集合E中除调度对象e之外的其他对象oj,记e→oj为临时调度顺序pj,1≤j≤J-1,J为调度对象集合中调度对象的总数;
步骤4.6’:计算临时调度顺序pj的超出时间ETj;
超出时间ETj的计算方法是:
其中T(e)和U(oj)分别表示调度对象e的时间长度和调度对象oj的紧急度。
之所以引入超出时间这个概念,是因为前面介绍到:一些分支被延迟不会导致分支同步的完成时间增加。那么为了避免分支同步被延迟,需要找出这些分支,使用超出时间来定量判断分支延迟的后果。
超出时间的定义为:设a和b代表作业J1和J2的分支,由于计算资源有限,a和b只能被串行执行。如果延迟分支b来执行分支a,则超出时间为,
其中,T(a)和U(b)分别代表分支a的时间和分支b的紧急度。
如果T(a)≤U(b),则超出时间为零,表示先执行a再执行b不会导致作业J2被延后。否则,作业J2会因为分支b被延迟调度,J2的完成时间会增加。实践中也存在不管延迟分支a还是延迟分支b,都会有非零的超出时间,如果延迟a,J1的完成时间会增加;延迟分支b则会导致J2的完成时间增加。因此需要权衡,选出超出时间最短的调度方案。
步骤4.7’:将min(ETj)所对应的临时调度顺序pj追加到调度序列P中,P=P∪pj;
步骤4.8’:从调度对象集合E中剔除e和oj涉及到的分支;
步骤4.9’:重复步骤4.4’至步骤4.8’,直到调度对象集合E中的任何分支或分支组合都添加到调度序列P并输出调度序列P。
步骤5:当有计算资源时,根据分支调度序列P进行执行单元分配并执行分支任务,当挂起分支执行完成后,被占用的计算资源会被释放;
步骤6:重复步骤3至5,直到作业端中各DAG图中的分支被执行完。
本发明通过将DAG的一段独立路径作为一个可调度的最小对象,称为分支(branch),一个分支会由连续的计算阶段和阶段之间的网络通信组成。比如,图1的分支1由Stage1,coflow1,Stage2,coflow2和Stage3组成。一个分支内的计算阶段和相关的网络通信必须被串行的执行因此可以被视作一个可调度的对象,避免了在调度计算阶段和网络通信的时候出现DAG调度和coflow调度的分歧。此外,分支的概念还考虑到了数据本地性的要求。在图1中,上游的计算阶段会输出计算结果,又被用作下游计算阶段的输入数据。在Stage1完成以后,Stage1的输出会保存在Stage1的计算任务被执行的机器上。这些被暂时保存的数据会用作Stage2的输入数据。当Stage2开始执行的时候,Stage2的计算任务会从执行Stage1的机器上拉取中间数据。这个过程会产生网络通信,也就是coflow1。如果将Stage2的计算任务也安排到相同的机器上,就可以极大地满足数据本地性。因此本发明使用分支作为可调度的对象来分配资源,Stage1和Stage2会被调度到同一群机器上,减少了网络的开销,减小了作业完成时间。
此外,由于一个DAG的多条并行路径彼此交叉,形成同步。本发明称多个分支的汇聚过程为分支同步,只有并行执行的分支同步以后,后续的计算阶段才可以开始执行;而一个数据并行的作业中,作业进度取决于执行的最慢的并行分支。在图1中,分支1和分支2交叉于最后一个计算任务。这构成了一个分支同步。这个作业只有在分支同步完成以后,才能结束。因此,分支同步严重影响到作业完成时间JCT。同时执行一个分支同步的所有分支会占用大量的计算资源,阻碍其他分支同步的执行。事实上,作业完成时间受到执行最慢的分支的影响,本发明通过预测各分支的完成时间,来计算各分支的可容忍延迟时间,从而确定出各分支的优先级或紧急度,先并行执行不同作业里的紧急的分支,然后串行执行较不紧急的分支。延迟短分支可以预留下更多的计算资源,来完成那些更紧急的作业。为了验证本发明的效果,本发明通过实验室的Spark集群实验,结果显示分支调度方法要优于SparkFIFO和最短作业优先调度、关键路径调度方法。平均作业完成时间JCT减少了10-15%。此外,本发明也进行了大规模的仿真测试。仿真实验采用了Google集群数据,https://github.com/***/cluster-data.”,并且和最新的DAG调度方法如文献2所述的CARBYNE进行了比较。实验结果也显示BS方法要比CARBYNE实现更快的JCT。
下面通过构建一个实验环境来进行验证本发明的效果。
如图2所示,在分支调度方法的***架构中,主节点负责接收作业提交和分配计算资源的工作。而用户会通过一个接口driver来向Spark集群提交作业。这个driver是用来管理用户所提交的作业的进度,包括把数据并行作业分解为多个并行的计算任务,并产生一个DAG。在数据并行作业的执行过程中,driver会和主节点通信,以便掌握集群资源的变化(如确定具有空闲计算资源、可发起计算任务的服务器)。这些真正用来执行计算任务的节点称为工作节点(worker node)。主节点还要管理整个集群的、维护各个服务器的状态,并对各个服务器的计算结果进行索引,以便后续的计算任务能够确定输入数据所在的位置。我们把分派计算任务的过程叫做调度。driver接口和master确定所需要的计算资源总量后,master节点会根据所掌握的各个服务器状态(如是否以及分配给其他计算作业,是否还有可分配的计算资源等),来确定分配给driver处理的作业的计算资源总量。不过,driver接口在收到master节点的反馈后,还需要注意和分配的各个worker节点通信,建立起通信的通道,以便以后分配计算任务。在执行数据并行作业的阶段,worker节点会提供一组执行器单元(executor)。这些executor单元是包裹一定CPU核和内存的Java虚拟机。driver节点会从和worker节点的通信中,掌握各个executor。然后,driver接口把分解后的数据并行作业所产生的多个并发任务,逐一分派给这些executor。executor执行完这些计算作业后,会把计算结果保存在本地或者反馈给driver。
如图2所示,首先,用户提交给driver的作业在分解为DAG后,会输出一个分支结构的DAG,用于分支调度。我们还添加了一个driver接口和executor之间相互通信的模块。这个通信模块会在executor执行完一个计算任务之后,会把这个任务的执行信息,如计算时间、网络通信时间、磁盘读写时间,反馈给driver节点。driver节点会根据这个作业的各个任务的完成时间信息来估计分支的长度,计算分支的紧急度。在driver接口确定好各个分支的紧急度后,这些紧急度会被送给主节点。主节点会根据各个分支的紧急度对来自不同作业的分支进行调度。
下面验证分支调度方法可以调度并发的多个作业并减少作业完成时间JCT。本实施例在一个实际的Spark集群中执行了大量的实验来评价分支调度方法的性能。在实验中比较了Spark的先到先服务(first-in-first-out,FIFO)和最短作业优先(shortest-job-first,SJF)、关键路径方法(critical path,CP)。需要注意,CP方法是一个作业内部的调度方法,旨在优先调度一个DAG作业中关键路径上的计算任务。通过测量了多作业同时运行的平均JCT。这些作业会被同时提交到集群。此外,也评价了预测精确性、***开销,以及在线提交作业场景下分支调度方法的性能提升。
本实施例中的实验采用了由分布于6个机架的30台服务器构成。每个服务器配备了Intel Xeon E5-26502.2GHz 12-core处理器。实验中采用了三种混合Spark作业,50%PageRank,30%logistic regression和20%机器学习作业,以便确保分支时间长度的多样性。PageRank作业是典型的迭代图计算应用。logistic regression是常见的回归分析应用。机器学习应用会用到重复迭代的学习过程。实验中控制作业的数量从10增加到50,作业的输入数据大小从10GB增加到50GB。
测试在线的分支完成时间预测精确性:为了计算分支的紧急度,通过公式14预测了分支时间。因此,预测精确度评价是一个重要的指标。在提交作业后,首先测量时间分支执行的时间,和预测的分支时间,最后计算预测误差。
其中,Tpred和Tmeas分别代表了预测和测量的分支时间。分支预测精确性变化如图5所示。实验结果显示大多数分支预测是精确的。一开始,预测误差会增加,在第6000次预测后,误差稳定在25%左右。当预测的轮数增加,这个预测变得更精确。因此迭代作业的重复执行可以提高预测精确值。
评价平均作业完成时间:
同时提交的一批作业后,评价这批DAG作业的平均JCT。这批作业的数量从10增加到50。图6显示了分支调度方法比Spark FIFO方法实现更少的平均JCT,减少了10-15%。当作业的数量增加到40和50,平均JCT的减少量稳定在15%左右。而SJF和CP的方法比SparkFIFO的平均作业完成时间要少5%,几乎不会随着作业的数量增加而变化。分支调度方法的JCT减少量会随着作业数量增加而增加。总的来说,同时提交的作业越多,作业的平均JCT越大。不过,分支调度方法可以更有效地打包分支。相比而言,Spark FIFO和SJF和CP的方法不能感知到DAG中的分支同步。当作业的数量增加,这导致了更长超出时间。
累计完成的作业数量评价:
图7显示了30个作业在同时提交后于不同时刻的完成情况。在作业提交后的前500秒,这三种方法的性能是非常接近的。然后,Spark FIFO方法完成作业有明显下降。分支调度方法在第1000秒左右可以完成几乎一半的作业,三分之二的作业可以在前1500秒内完成。这个结果表明分支调度方法可以比其他两种方法更快的完成同一批作业。
***开销实验:主要的***开销是由分支预测和分支调度导致的。预测开销涉及到收集任务的完成时间信息、预测分支时间长度。图8a显示,当分支的数量增加,预测开销会逐渐增加。和执行分支调度算法想比,预测开销是相对较小的。图8b显示了当挂起分支的数量从20增加到70时,分支调度算法的复杂性。算法的时间复杂度随着作业的数量而逐渐增加的。当更多的作业提交时,分支组合也会更多,加大了分支调度算法运行的开销。这导致了算法的复杂度是超线性增长的。不过,***开销和JCT相比,是可以接受的。
本实施例仿真了Google集群数据里的5000个典型的DAG作业。采用了SJ配合CP,作为比较方法。CARBYNE方法可以利他地向最短的作业贡献剩余的计算资源。所有仿真在一台配备Intel(R)Core(TM)i7-4700MQ CPU 2.40GHz和32GB RAM的电脑上完成。
实验数据集:Google集群数据记录了1个月的作业完成日志。这些日志包含了细节的任务完成信息、资源需求量、机器的状态、限制等。然而,这个记录不能提供有用的DAG信息。大多数任务只有简单的依赖关系,如MapReduce。为了仿真真实的作业的依赖关系,本实施例模拟了实际的作业依赖。主要的DAG包括少于10个分支和5个分支同步(50分位数)。小部分的DAG包括34个分支和13个分支同步(95分位数)。
关于作业完成时间JCT的仿真:实验中评价了分支调度方法、CARBYNE和SJF、CP方法的平均JCT。在实验中用到了5000个作业,在600秒内全部提交,共用500台机器。首先,测量了完成作业的累积分布函数CDF。如图9a所示,在相同的时间内,分支调度方法可以完成更多的作业。此外,我们进一步评价细节的JCT减少量。图9b显示分支调度方法和CARBYNE方法的作业完成时间比。分支调度方法可以实现更少的JCT。超过15%的作业的JCT减少达到了20%。对于大多数作业,分支调度方法比CARBYNE实现了更多的JCT减少。
机器数量的影响:资源容量是一个重要的性能影响指标。本实施例控制了仿真机器的数量从500增加到1000。图10a显示了这5000个作业被不同数量的机器执行的平均JCT。平均JCT会随着机器数量增加而减少。分支调度方法可以实现最小的平均JCT。不过,当机器数量达到1000时,CARBYNE方法的性能也逐渐接近分支调度方法。
作业数量的影响:图10b显示了平均JCT会随着作业的数量而增加。本实施例实验中控制作业的数量从2000增加到5000.分支调度方法可以比其他方法实现更小的平均JCT。因此,当更多的作业相互竞争集群资源时,分支调度方法可以实现更经济的调度。因此,JCT的减少量会随着作业的数量而增加。
作业提交时间的影响:当以不同的速率提交作业时,调度器的性能会由于积压的作业情况不同而实现不同的性能。我们设置作业提交的间隔时间从300秒增加到1500秒。图10c显示了分支调度方法的平均JCT是最小的。这三种方法的平均JCT都会随着间隔时间的增加而上升。
通过上述仿真实验从不同的角度证明了,在有限的集群资源条件下,当较多作业在较短的时间内提交时,分支调度方法可以实现更高的性能。
以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
Claims (3)
1.一种基于分支DAG依赖的数据并行作业调度方法,其特征在于,包括以下步骤:
步骤1:作业端接收作业;
步骤2:遍历作业的DAG任务图,找出DAG的汇聚点和分叉点,将DAG任务图中的汇聚点称为一个分支同步,将DAG任务图中无汇聚、无分叉的链式部分称为一个分支,将不依赖其他分支或者所依赖的分支已经执行完成时的分支称为挂起分支;
步骤3:遍历作业端内每个作业的DAG任务图,找出每个DAG任务图中的挂起分支,并将所找出的挂起分支加入到挂起分支集合B中;
步骤4:对挂起分支集合B中的分支执行分支调度算法,得到分支调度顺序P;
步骤4中所述分支调度算法是指:
步骤4.1:将挂起分支集合B中的分支划分成多个调度对象,如果挂起分支集合中多个并行分支的总的计算资源量小于资源容量的限制,将这多个并行分支打包成分支组合BC,并将该分支组合作为一个调度对象,未打包的分支单独作为一个调度对象;
步骤4.3:计算调度对象集合E中每一个调度对象o的紧急度U(o);
所述调度对象的紧急度U(o)的计算方法是:
步骤4.3.1:计算调度对象o的时间长度T(o);
1)当调度对象为分支时,则时间长度T(o)为:
其中,S代表一个分支中阶段的集合,Ts代表一个阶段s的计算任务集合,W代表工作线程的集合,Dt,w代表由线程w执行计算任务t所用的时间,Dt,w的时间通过式2的预测模型进行预测;
Dt,w(i)=a1Dt,w(i-1)+a2Dt,w(i-2)+...anDt,w(i-n) (2)
式2表示由线程w执行当前任务t所用的时间需要通过收集当前任务t所在的计算阶段所有任务的历史执行数据,历史执行数据的条数共有n条,i表示作业的迭代次数,对公式2进行模型拟合,得到a1、a2...an参数的估计值;
2)当调度对象为分支组合{a,b}时,则分支组合{a,b}的时间长度为max{T(a),T(b)};
步骤4.3.2:计算调度对象紧急度U(o);
1)当调度对象为分支时,通过公式1计算出该分支所在的分支同步中所有分支的时间长度,则分支的紧急度U(o)等于该分支所在的分支同步中最长的分支时间长度与该分支的时间长度之差,时间差越短,紧急度越强;
当调度对象为分支组合{a,b}时,则分支组合{a,b}的紧急度为min{U(a),U(b)};
步骤4.4:将调度对象集合E中的调度对象按照紧急度进行排序,排序序列为p,则将P=P∪p,输出调度序列P;
步骤5:当有计算资源时,根据分支调度顺序P进行执行单元分配并执行分支任务;
步骤6:重复步骤3至5,直到作业端中各作业的DAG图中的分支被执行完。
2.根据权利要求1所述的基于分支DAG依赖的数据并行作业调度方法,其特征在于,步骤4中所述分支调度算法还可以是:
步骤4.1’:将挂起分支集合B中的分支划分成多个调度对象,如果挂起分支集合中多个并行分支的总的计算资源量小于资源容量的限制,将这多个并行分支打包成分支组合BC,并将该分支组合作为一个调度对象,未打包的分支单独作为一个调度对象;
步骤4.3’:计算调度对象集合E中每一个调度对象o的紧急度U(o);
步骤4.4’:在调度对象集合E中,选择紧急度最强的调度对象e;
步骤4.5’:对于调度对象集合E中除调度对象e之外的其他对象oj,记e→oj为临时调度顺序pj,1≤j≤J-1,J为调度对象集合中调度对象的总数;
步骤4.6’:计算临时调度顺序pj的超出时间ETj;
步骤4.7’:将min(ETj)所对应的临时调度顺序pj追加到调度序列P中,P=P∪pj;
步骤4.8’:从调度对象集合E中剔除e和oj涉及到的分支;
步骤4.9’:重复步骤4.4’至步骤4.8’,直到调度对象集合E中的任何分支或分支组合都添加到调度序列P中,输出调度序列P。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910514403.0A CN110275765B (zh) | 2019-06-14 | 2019-06-14 | 基于分支dag依赖的数据并行作业调度方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910514403.0A CN110275765B (zh) | 2019-06-14 | 2019-06-14 | 基于分支dag依赖的数据并行作业调度方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110275765A CN110275765A (zh) | 2019-09-24 |
CN110275765B true CN110275765B (zh) | 2021-02-26 |
Family
ID=67960808
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910514403.0A Active CN110275765B (zh) | 2019-06-14 | 2019-06-14 | 基于分支dag依赖的数据并行作业调度方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110275765B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110730470B (zh) * | 2019-10-24 | 2020-10-27 | 北京大学 | 一种融合多接入技术的移动通信设备 |
CN110688993B (zh) * | 2019-12-10 | 2020-04-17 | 中国人民解放军国防科技大学 | 一种基于Spark作业的计算资源确定方法及装置 |
CN111857984A (zh) * | 2020-06-01 | 2020-10-30 | 北京文思海辉金信软件有限公司 | 银行***中的作业调用处理方法、装置和计算机设备 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105868019A (zh) * | 2016-02-01 | 2016-08-17 | 中国科学院大学 | 一种Spark平台性能自动优化方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3447642B1 (en) * | 2017-08-24 | 2022-03-23 | Tata Consultancy Services Limited | System and method for predicting application performance for large data size on big data cluster |
-
2019
- 2019-06-14 CN CN201910514403.0A patent/CN110275765B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105868019A (zh) * | 2016-02-01 | 2016-08-17 | 中国科学院大学 | 一种Spark平台性能自动优化方法 |
Non-Patent Citations (5)
Title |
---|
Coflex: Navigating the Fairness-Efficiency Tradeoff for Coflow Scheduling;Wei Wang等;《IEEE INFOCOM 2017 - IEEE Conference on Computer Communications》;20171005;第1-9页 * |
ReB: Balancing Resource Allocation for Iterative Data-Parallel Jobs;Dongsheng Li等;《In Proceedings of ACM Conference (Conference’17)》;20170731;第1-2页 * |
Spark详解(五):Spark作业执行原理;MasterT-J;《https://blog.csdn.net/qq_21125183/article/details/87875902》;20190222;第1-19页 * |
一种多DAG任务共享异构资源调度的费用优化方法;田国忠等;《电子学报》;20140915;第42卷(第9期);第1767-1774页 * |
数据中心网络流调度技术前沿进展;胡智尧等;《计算机研究与发展》;20180915;第55卷(第9期);第1920-1930页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110275765A (zh) | 2019-09-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110275765B (zh) | 基于分支dag依赖的数据并行作业调度方法 | |
Stavrinides et al. | Scheduling multiple task graphs in heterogeneous distributed real-time systems by exploiting schedule holes with bin packing techniques | |
CN110321222B (zh) | 基于决策树预测的数据并行作业资源分配方法 | |
Chen et al. | Adaptive multiple-workflow scheduling with task rearrangement | |
Shin et al. | Deadline-guaranteed scheduling algorithm with improved resource utilization for cloud computing | |
CN110187965B (zh) | 神经网络的运行优化及数据处理方法、设备及存储介质 | |
CN115237580B (zh) | 面向智能计算的流水并行训练自适应调整***、方法 | |
CN111104211A (zh) | 基于任务依赖的计算卸载方法、***、设备及介质 | |
CN114647515A (zh) | 一种面向gpu集群的动态资源调度方法 | |
CN112015765B (zh) | 基于缓存价值的Spark缓存淘汰方法及*** | |
Hu et al. | Branch scheduling: DAG-aware scheduling for speeding up data-parallel jobs | |
Ye et al. | Astraea: A fair deep learning scheduler for multi-tenant gpu clusters | |
Wang et al. | CEFS: Compute-efficient flow scheduling for iterative synchronous applications | |
CN114675953A (zh) | 资源动态调度方法、装置、设备及计算机可读存储介质 | |
Stavrinides et al. | The impact of input error on the scheduling of task graphs with imprecise computations in heterogeneous distributed real-time systems | |
CN111930485B (zh) | 一种基于性能表现的作业调度方法 | |
CN112231081B (zh) | 云环境下基于pso-ahp的单调速率资源调度方法及*** | |
Lin et al. | Two-tier project and job scheduling for SaaS cloud service providers | |
Natarajan | Parallel queue scheduling in dynamic cloud environment using backfilling algorithm | |
CN109308216B (zh) | 一种针对不精确计算的单核***实时任务调度方法 | |
Qin et al. | Dependent task scheduling algorithm in distributed system | |
Tang et al. | A network load perception based task scheduler for parallel distributed data processing systems | |
CN112698911B (zh) | 一种基于深度强化学习的云作业调度方法 | |
Aida et al. | Performance enhancement of scheduling algorithm in heterogeneous distributed computing systems | |
Salmani et al. | A fuzzy-based multi-criteria scheduler for uniform multiprocessor real-time systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |