掌桥专利:专业的专利平台
掌桥专利
首页

资源调度方法、装置、服务器和存储介质

文献发布时间:2023-06-19 11:29:13


资源调度方法、装置、服务器和存储介质

技术领域

本发明涉及互联网技术领域,尤其涉及一种资源调度方法、装置、服务器和存储介质。

背景技术

人工智能技术得到迅猛发展,不单单是因为算法的改进、大数据的积累,更重要的是计算能力的大幅提升和变革,代表性的就是异构计算(Heterogeneous Computing)方式的出现。

异构计算是一种特殊形式的并行和分布式计算,通过使用不同类型指令集和体系架构的计算单元组成的计算系统来协同完成计算任务。在异构计算系统中,通过让更适合的专用硬件去做适合的事来达到性能和成本的优化。常见的异构的计算单元包括:图形处理器(Graphic Processing Unit,简称GPU)、现场可编程门阵列(Field-ProgrammableGate Array,简称FPGA)、复杂可编程逻辑器件(Complex Programmable Logic Device,简称CPLD)、专用集成电路(Application Specific Integrated Circuit,简称ASIC),等等。

当需要使用异构计算方式来为某个应用(比如某个在线服务)提供计算服务时,目前往往是按照该应用所需计算资源的上限去申请计算资源,灵活性差,且容易造成资源浪费。这里的计算资源是指异构计算系统中包含的各计算单元的计算能力。

发明内容

本发明实施例提供一种资源调度方法、装置、服务器和存储介质,用以实现资源的高效动态调度,避免资源浪费。

第一方面,本发明实施例提供一种资源调度方法,应用于资源调度程序,所述资源调度程序设于用于异构计算的服务器中,所述方法包括:

获取使用目标计算单元的第一计算程序在当前调度周期内的计算任务量,所述目标计算单元是所述服务器中包含的多个计算单元中的任一个,所述第一计算程序是使用所述目标计算单元的多个计算程序中响应延时符合设定条件的计算程序;

根据所述计算任务量获取在所述当前调度周期内所述第一计算程序的资源需求量;

根据所述第一计算程序的资源需求量与预先分配给所述第一计算程序的资源分配量的比较结果,生成所述多个计算程序在所述当前调度周期内各自的资源分配信息,所述资源分配信息中记录相应计算程序在所述当前调度周期内可用的资源使用上限。

第二方面,本发明实施例提供一种资源调度装置,位于资源调度程序,所述资源调度程序设于用于异构计算的服务器中,所述装置包括:

获取模块,用于获取使用目标计算单元的第一计算程序在当前调度周期内的计算任务量,所述目标计算单元是所述服务器中包含的多个计算单元中的任一个,所述第一计算程序是使用所述目标计算单元的多个计算程序中响应延时符合设定条件的计算程序;以及,根据所述计算任务量获取在所述当前调度周期内所述第一计算程序的资源需求量;

生成模块,用于根据所述第一计算程序的资源需求量与预先分配给所述第一计算程序的资源分配量的比较结果,生成所述多个计算程序在所述当前调度周期内各自的资源分配信息,所述资源分配信息中记录相应计算程序在所述当前调度周期内可用的资源使用上限。

第三方面,本发明实施例提供一种服务器,所述服务器是用于异构计算的服务器,所述服务器中包括:多个计算单元、资源调度程序和若干计算程序;

所述资源调度程序:用于获取使用目标计算单元的第一计算程序在当前调度周期内的计算任务量,所述目标计算单元是所述多个计算单元中的任一个,所述第一计算程序是使用所述目标计算单元的多个计算程序中响应延时符合设定条件的计算程序;以及,根据所述计算任务量获取在所述当前调度周期内所述第一计算程序的资源需求量,根据所述第一计算程序的资源需求量与预先分配给所述第一计算程序的资源分配量的比较结果,生成所述多个计算程序在所述当前调度周期内各自的资源分配信息,所述资源分配信息中记录相应计算程序在所述当前调度周期内可用的资源使用上限;

所述多个计算程序中的每个计算程序:用于根据对应的资源分配信息使用所述目标计算单元提供的资源。

第四方面,本发明实施例提供了一种非暂时性机器可读存储介质,非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使处理器至少可以实现如第一方面所述的资源调度方法。

实际应用中,用于进行异构计算的服务器中会部署有多个计算单元,并会运行有很多计算程序,假设有多个计算程序被配置为使用其中的目标计算单元。在本发明实施例提供的资源调度方案中,可以对上述多个计算程序在目标计算单元中可以使用的资源情况进行动态调度。为此,在服务器中部署一个资源调度程序,由该资源调度程序实时地获取使用目标计算单元的第一计算程序在当前调度周期内的计算任务量,第一计算程序是使用目标计算单元的多个计算程序中响应延时符合设定条件的计算程序,即对响应延时敏感的计算程序。根据获取的计算任务量得到在当前调度周期内第一计算程序的资源需求量,进而根据第一计算程序的资源需求量与预先分配给第一计算程序的资源分配量的比较结果,生成使用目标计算单元的多个计算程序在当前调度周期内各自的资源分配信息,在资源分配信息中规定了相应计算程序在当前调度周期内在目标计算单元中可用的资源使用上限。其中,预先分配给第一计算程序的资源分配量是基于第一计算程序的任务量峰值确定的。

在该方案中,针对使用同一计算单元的多个计算程序来说,资源调度程序仅需要根据响应延时敏感的计算程序在当前调度周期内需要完成相应计算任务量而需要的资源量来动态分配多个计算程序分别能够使用的资源量。在响应延时敏感的计算程序计算任务繁重时,限制响应延时不敏感的计算程序对目标计算单元提供的计算资源的使用;在响应延时敏感的计算程序计算任务低谷期,让渡出目标计算单元提供的计算资源给响应延时不敏感的计算程序使用,从而提高计算资源的利用率,避免资源浪费。且仅需要对响应延时敏感的计算程序进行计算任务量、资源需求量的确定,降低处理负载,有助于提高调度效率。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种异构计算系统的示意图;

图2为本发明实施例提供的一种资源调度方法的流程图;

图3为本发明实施例提供的一种资源调度过程的示意图;

图4为本发明实施例提供的另一种资源调度方法的流程图;

图5为本发明实施例提供的另一种资源调度方法的流程图;

图6为本发明实施例提供的一种资源调度装置的结构示意图;

图7为与图6所示实施例提供的资源调度装置对应的电子设备的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种。

取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。

另外,下述各方法实施例中的步骤时序仅为一种举例,而非严格限定。

如前文所述,在传统的异构计算系统中,每个需要使用异构计算系统的服务都会被预先按照其任务高峰值的估计结果被固定地分配好能够使用的计算资源,这样在非任务高峰期间,将会造成已分配的计算资源的浪费。计算资源是指异构计算系统中包含的计算单元。

为便于资源浪费,提供了本发明实施例提出的解决方案。在本发明实施例中,首先,对传统的异构计算系统的组成架构进行了改进,如图1所示。

图1为本发明实施例提供的一种异构计算系统的示意图,如图1所示,该异构计算系统中包括多个用于进行异构计算的服务器,比如图1中示意的服务器1、服务器2、···、服务器N。

其中,每个服务器中包括:多个计算单元、资源调度程序和若干计算程序。比如,在图1中,假设服务器1中设有GPU1、GPU2、GPU3、GPU4,服务器1中还运行有资源调度程序A,以及计算程序C1、计算程序C2、计算程序C3。假设服务器2中设有GPU5、GPU6,服务器1中还运行有资源调度程序B,以及计算程序C4、计算程序C5、计算程序C6、计算程序C7。

本发明实施例中,通过在每个服务器中部署用于实现资源调度的资源调度程序,以便通过该资源调度程序实现资源的动态、按需调度。其中,被调度的资源即为服务器中部署的多个计算单元。

概括来说,一个服务器中的资源调度程序会动态地根据其中各计算程序的计算任务情况以及其中各计算单元的资源占用情况,为其中的各计算程序动态地生成资源分配信息,每个计算程序根据自己对应的资源分配信息来使用相应的计算单元。

为实现计算程序与其所在服务器中的资源调度程序之间的交互,可选地,如图1中所示,每个计算程序中还可以设有控制模块,用于从资源调度程序中获取自身对应的资源分配信息并按照该资源分配信息使用相应计算单元完成计算任务。

需要说明的是:第一,图1中,服务器1和服务器2中运行的资源调度程序A和资源调度程序B是相同的资源调度程序,这里仅为了示意每个服务器中都部署有该资源调度程序;第二,图1中仅示意了每个服务器中包含的多个计算单元为多个GPU,实际上,每个服务器中部署的多个计算单元可以是不同类型(即异构)的计算单元,比如可以包括GPU、FPGA、ASIC,等等;第三,每个服务器中的不同计算程序,可以理解为即是不同进程,用于执行不同的计算任务。

实际应用中,往往会有多种服务需要使用异构计算系统提供的异构计算能力,比如商品搜索服务、语音识别服务、视频编解码服务,等等。每种服务会不断产生众多计算任务,比如商品搜索服务中会响应于众多用户触发的商品搜索操作而不断产生商品搜索任务,再比如语音识别服务中会响应于用户不断输入的语音而触发语音识别任务。为了处理每种服务触发的大量计算任务,针对每种服务来说,在异构计算系统中会开启多个计算程序用以并行地处理该服务对应的众多计算任务,而这些计算程序会分布在不同服务器中。举例来说,在图1中,假设在服务器1和服务器2中分别开启了与服务S1对应的计算程序C1、计算程序C2、计算程序C4和计算程序C5,在服务器1和服务器2中分别开启了与服务S2对应的计算程序C3和计算程序C6。由此可见,异构计算系统实际上是一种分布式和并行计算系统。

在使用异构计算系统时,针对一个服务器中的每个已经启动的计算程序,会为其绑定该服务器内的一个计算单元,表明该计算程序可以使用这个计算单元来完成自己收到的计算任务。举例来说,在图1中,针对服务器1来说,假设计算程序C1和计算程序C3绑定到GPU1上,计算程序C2绑定到GPU2上;针对服务器2来说,假设计算程序C4和计算程序C7绑定到GPU5上,计算程序C5和计算程序C6绑定到GPU6上。

由图1中的示意可知,可选地,在本实施例中,在一个服务器内,对应于同一服务的不同计算程序绑定到不同的计算单元上,并且,一个计算程序仅绑定一个计算单元,一个计算单元上可以绑定有对应于不同服务的多个计算程序。

在本发明实施例中,一个计算程序与一个计算单元绑定是指将该计算单元分配给了该计算程序使用,也就是说,该计算程序可以使用该计算单元提供的计算能力完成自己收到的计算任务的处理。如何为每个计算程序确定与之对应的计算单元,不在本发明实施例提供的方案的讨论范围之内。

另外,在确定将某个计算程序绑定到某个计算单元后,还会为该计算程序固定分配其可以占用该计算单元的多少比例的资源。举例来说,在图1中,计算程序C1和计算程序C3都绑定在GPU1上,可以配置计算程序C1最多可以占用GPU1的70%的资源,计算程序C3最多可以占用GPU1的30%的资源。可以理解的是,计算程序C1和计算程序C3所占的资源比例之和小于或等于100%。上述70%的资源、30%的资源,比如可以体现为分时占用,如在单位时间(如1秒)内,70%的时间GPU1为计算程序C1提供计算服务,30%的时间GPU1为计算程序C3提供计算服务。上述资源占比,如果是根据相应计算程序的计算任务量峰值分配的,那么在计算程序实际的计算任务量未达到峰值的很长一段时间内,为其分配的资源都将被浪费。

为避免资源浪费,在本发明实施例提供的方案中,针对上述异构计算系统中的每个服务器,可以独立地进行动态地资源调度控制。针对一个服务器来说,该资源调度控制是通过该服务器内部署的资源调度程序来实现的。

下面结合以下实施例具体说明资源调度程序的详细资源调度过程。

图2为本发明实施例提供的一种资源调度方法的流程图,如图2所示,该方法可以包括如下步骤:

201、获取使用目标计算单元的多个计算程序在当前调度周期内各自的计算任务量。

202、根据所述计算任务量获取在当前调度周期内多个计算程序各自的资源需求量。

203、根据多个计算程序各自的资源需求量,生成多个计算程序在当前调度周期内各自的资源分配信息,资源分配信息中记录相应计算程序在当前调度周期内可用的资源使用上限。

本实施例提供的资源调度方法可以由图1中示意的任一服务器中的资源调度程序来执行,比如由图1中示意的服务器1来执行该方案,具体由服务器1中的资源调度程序A来执行。

资源调度程序的动态资源调度过程是针对所在服务器中的每个计算单元进行的,即实现对每个计算单元的资源进行动态分配,该动态分配是在一个计算单元绑定的多个计算程序之间进行的。

本实施例中,在服务器1中的资源调度程序A来执行调度方案的过程中,假设当前针对目标计算单元进行动态资源调度,上述目标计算单元是服务器1中包含的多个计算单元中的任一个,在针对目标计算单元进行动态资源调度时,需要获取使用目标计算单元的多个计算程序的实时计算任务量。

假设目标计算单元是服务器1中的GPU1,那么使用GPU1的多个计算程序包括图1中的计算程序C1和计算程序C3。

为便于理解和描述,下面以资源调度程序A对GPU1进行动态资源调度为例进行说明。

本发明实施例中假设动态资源调度是以周期性的方式进行的,也就是说,资源调度程序A可以按照设定的调度周期,周期性的执行资源调度过程。调度周期可以是秒级、分钟级的,比如1秒,1分钟。

假设当前调度周期为T1~T2的时间段,当目标计算单元为GPU1时,资源调度程序A获取在这个时间段内使用(即绑定)GPU1的计算程序C1和计算程序C3各自对应的计算任务量。

为便于理解,结合图3来示例性说明资源调度程序A获取上述计算任务量的过程。

在图3中,仍假设计算程序C1对应于服务S1,计算程序C3对应于服务S2,每个服务可以设有对应的任务队列,用于存储等待处理的计算任务,其中,每个计算任务会关联有对应的时间戳,即产生该计算任务的时间戳。实际应用中,异构计算系统中可以设有一个用于对每个服务产生的计算任务进行分配的程序,表示为图3中的任务分配程序。任务分配程序用于将一个服务产生的大量计算任务向与服务对应的计算程序进行分配,由于该服务对应的计算程序可能分布在多个服务器中,所以,每个服务器中与该服务对应的计算程序都可能会分配到一些计算任务。

在图3中,假设在T1~T2的时间段内,服务S1对应的服务队列中存储有任务P

资源调度程序A在得到计算程序C1和计算程序C3在T1~T2的时间段内分别对应的计算任务量后,根据该计算任务量估计出在T1~T2的时间段内计算程序C1和计算程序C3各自的资源需求量,在图3中,假设估计结果为:在T1~T2的时间段内计算程序C1需要占用GPU1的70%的资源,计算程序C3需要占用GPU1的40%的资源。

资源调度程序A得到上述资源需求量的估计结果的实现过程可以是:

资源调度程序A中存储了多个历史调度周期内各计算程序完成在相应调度周期内分配到的计算任务的实际使用资源量,根据该信息估计出需要完成当前调度周期内的计算任务量时需要的资源量。

举例来说,以计算程序C1为例,假设资源调度程序A中存储的历史信息如下:

历史调度周期Z1内,计算程序C1的计算任务量为K1,计算程序C1完成这些计算任务对GPU1实际使用的资源量为60%;

历史调度周期Z2内,计算程序C1的计算任务量为K2,计算程序C1完成这些计算任务对GPU1实际使用的资源量为70%;

历史调度周期Z3内,计算程序C1的计算任务量为K3,计算程序C1完成这些计算任务对GPU1实际使用的资源量为80%。

需要说明的是,历史信息中包含的是计算程序在相应调度周期内“实际使用的”资源量,并非是步骤202中所说的估计出的“需求”的资源量的含义,实际使用的资源量与需求的资源量可能是不同的。

基于上述历史信息,假设在当前调度周期T1~T2内计算程序C1的计算任务量N1与K2接近,则可以确定在T1~T2的时间段内计算程序C1需要占用GPU1的70%的资源。

另外,实际应用中,还可以考虑服务质量(Quality of Service,简称QoS)信息来完成资源需求量的估计。比如,历史调度周期Z2内,计算程序C1的计算任务量为K2,计算程序C1完成这些计算任务对GPU1实际使用的资源量为70%,完成这些计算任务耗时2分钟;历史调度周期Z4内,计算程序C1的计算任务量为K4,计算程序C1完成这些计算任务对GPU1实际使用的资源量为80%,完成这些计算任务耗时1分钟,其中,假设K2与K4相差较小。由此可见,以计算程序C1为例,在考虑响应延迟这个服务质量指标时,可以根据历史上与当前设定的服务质量要求相匹配的、计算任务量相当的历史调度周期内计算程序C1所对应的实际使用资源量来确定在T1~T2时间段内计算程序C1需要占用GPU1的资源量。

资源调度程序A在得到计算程序C1和计算程序C3在T1~T2的时间段内分别对应的资源需求量后,根据计算程序C1和计算程序C3各自的资源需求量,生成计算程序C1和计算程序C3在T1~T2内各自对应的资源分配信息。在计算程序C1对应的资源分配信息中记录了最终确定的计算程序C1在T1~T2内可用的资源使用上限,比如图3中示意的70%,在计算程序C3对应的资源分配信息中记录了最终确定的计算程序C3在T1~T2内可用的资源使用上限,比如图3中示意的20%。

由上述举例可知,虽然估计出计算程序C1和计算程序C3在T1~T2的时间段内分别对应的资源需求量为70%和40%。但是实际上最终做出的资源分配决策中并不一定恰好满足这两个计算程序各自的资源需求量,资源需求量仅是做出最终资源分配决策的参考信息而已。基于此,可以理解的是,上文中所说的资源“按需”调度并非是严格的需要多少就分配多少的意思,是有条件的按需分配。

资源调度程序A生成计算程序C1和计算程序C3在T1~T2的时间段内分别对应的资源分配信息的实现方式可以有多种。

比如,可选地,在两者对GPU1的资源需求量的总和大于GPU1能够提供的资源量时,可以优先满足资源需求量大的计算程序的需求。比如,上述举例中,计算程序C1和计算程序C3在T1~T2的时间段内分别对应的资源需求量为70%和40%,两者之和大于100%,此时,优先满足资源需求量大的计算程序C1的需求,从而最终确定计算程序C1在T1~T2时间段内最多可以使用GPU1的70%的资源。这样,计算程序C3在T1~T2时间段内最多可以使用GPU1的30%的资源,但是,如果最终确定计算程序C3在T1~T2时间段内最多可以使用GPU1的20%的资源,是因为可以预先设定GPU1要预留出10%的资源以应对一些特殊需求。

资源调度程序A生成计算程序C1和计算程序C3在T1~T2内分别对应的资源分配信息后,可以主动或基于计算程序C1和计算程序C3的请求而将计算程序C1和计算程序C3在T1~T2内分别对应的资源分配信息对应地发送至计算程序C1和计算程序C3,以使计算程序C1和计算程序C3根据各自的资源分配信息使用对应的资源来执行自己的计算任务。

比如,若限定计算程序C1在T1~T2时间段内最多可以使用GPU1的70%的资源,那么计算程序C1在T1~T2时间段内最多可以使用GPU1的70%的资源来完成自己的计算任务。假设计算程序C1当前(如在T1~T2时间段前的短时间内)已经占用了GPU1 70%以上的资源,那么计算程序C1可以在T1~T2时间段暂停计算任务的处理,或根据上述资源的限定,降低在该时间段内处理的计算任务量;相反地,如果计算程序C1当前已经占用了GPU1 不足70%的资源,则计算程序C1可以以70%为上限,请求使用GPU1的最多70%的资源完成T1~T2时间段内的计算任务的处理。计算程序C3同理。

其中,可以由计算程序中的控制模块根据收到的资源分配信息完整上述资源的请求、任务执行控制的处理。

综上,在本发明实施例提供的方案中,资源调度程序可以根据每个计算程序在当前调度周期内需要完成相应计算任务量而需要的资源量来动态分配每个计算程序能够使用的资源量,实现资源的按需动态分配,避免资源浪费。

图4为本发明实施例提供的另一种资源调度方法的流程图,如图4所示,该方法可以包括如下步骤:

401、获取使用目标计算单元的多个计算程序在当前调度周期内各自的计算任务量。

402、根据所述计算任务量获取在当前调度周期内多个计算程序各自的资源需求量。

403、根据多个计算程序各自的资源需求量以及多个计算程序各自对应的优先级,生成多个计算程序在当前调度周期内各自的资源分配信息,资源分配信息中记录相应计算程序在当前调度周期内可用的资源使用上限。

其中,可选地,生成多个计算程序在当前调度周期内各自的资源分配信息,可以实现为:

确定多个计算程序中符合优先级要求的第一计算程序和不符合优先级要求的第二计算程序,第一计算程序的优先级高于第二计算程序;

若第一计算程序的资源需求量大于或等于设定阈值,则生成第一资源分配信息,第一资源分配信息中记录如下信息:将目标计算单元中第一比例的资源分配给第一计算程序,将目标计算单元中预设的第二比例的资源分配给第二计算程序;其中,第二比例小于第一比例,第一比例的资源是目标计算单元中除第二比例的资源外的剩余资源;

若第一计算程序的资源需求量小于设定阈值,则生成第二资源分配信息,第二资源分配信息中记录如下信息:将目标计算单元中第三比例的资源分配给第一计算程序,将目标计算单元中第四比例的资源分配给第二计算程序;其中,第三比例的资源是满足第一计算程序的资源需求量的资源,第四比例的资源是目标计算单元中除第三比例的资源外的全部或部分剩余资源。

前文中说明,一个服务器中一个计算单元可以绑定多个计算程序,这多个计算程序可以对应于不同服务,所以可选地,在生成每个计算程序对应的资源分配信息的过程中,除了可以依据该计算程序的资源需求量外,还可以结合该计算程序对应的优先级。

其中,一个计算程序对应的优先级根据该计算程序对应的服务的优先级确定。

实际应用中,可以预先设定两种或多种优先级,分别设定每种服务对应的优先级。比如设定有由高到低的如下三种优先级:第一优先级、第二优先级和第三优先级。假设一个服务器中运行的服务包括:服务A、服务B、服务C和服务D,其中,服务A对应于第一优先级,服务B对应于第二优先级,服务C和服务D对应于第三优先级。假设上述目标计算单元上绑定了计算程序H1、计算程序H2和计算程序H3,并假设计算程序H1对应于服务A、计算程序H2对应于服务 B、计算程序H3对应于服务C。基于上述假设,计算程序H1、计算程序H2和计算程序H3对应的优先级依次降低。

假设上述优先级要求是按照优先级由高到低的顺序选定排在前几位的优先级,如第一位,则计算程序H1、计算程序H2和计算程序H3中满足该优先级要求的第一计算程序是计算程序H1,不满足该优先级要求的第二计算程序是计算程序H2和计算程序H3。

假设上述设定阈值为80%,如果计算程序H1的资源需求量(如85%)大于或等于80%,说明高优先级的计算程序H1的计算任务比较重,此时可以将目标计算单元的更多资源分配给计算程序H1,不对高优先级的计算程序H1做严格的资源限制。至于不满足优先级要求的计算程序H2和计算程序H3应该不分配或少分配一些资源。此时,比如可以生成针对计算程序H1的如下资源分配信息:将目标计算单元中5%的资源分配给计算程序H2,将目标计算单元中5%的资源分配给计算程序H3,将目标计算单元中剩余的90%的资源分配给计算程序H1。其中,上述5%是为了不至于让不满足优先级要求的计算程序没有资源可用而设置的阈值。

相反地,如果计算程序H1的资源需求量(如70%)小于设定阈值80%,此时,则可以将目标计算单元的70%的资源分配给计算程序H1,剩余的30%的全部或部分分配给计算程序H2和计算程序H3,比如将10%资源分配给计算程序H2,将10%资源分配给计算程序H3。

图5为本发明实施例提供的另一种资源调度方法的流程图,如图5所示,该方法可以包括如下步骤:

501、获取使用目标计算单元的第一计算程序在当前调度周期内的计算任务量,第一计算程序是使用目标计算单元的多个计算程序中响应延时符合设定条件的计算程序。

502、根据所述计算任务量获取在当前调度周期内第一计算程序的资源需求量。

503、根据第一计算程序的资源需求量与预先分配给第一计算程序的资源分配量的比较结果,生成所述多个计算程序在当前调度周期内各自的资源分配信息,资源分配信息中记录相应计算程序在当前调度周期内可用的资源使用上限。

本实施例中,假设计算程序对应的优先级是根据响应延时来划分的,对于使用目标计算单元的多个计算程序来说,将其中对响应延时敏感的计算程序称为第一计算程序,将其中对响应延时不敏感的计算程序称为第二计算程序。可以预先设定度量响应延时敏感度的阈值,如果某个计算程序对应的响应延时小于或等于该阈值,则认为该计算程序是响应延时符合设定条件的计算程序,反之,是响应延时不符合设定条件的计算程序。可以理解的是,某计算程序的响应延时,实际上即可以理解为是该计算程序对应的服务的响应延时。

本实施例中,将服务划分为在线服务和离线服务。在线服务是对响应延时要求高但对计算资源的需求有明显的峰谷现象且该峰谷现象不可控的服务,在线服务可被认为是对响应延时敏感的服务。离线服务对响应延时几乎没有要求,但其计算时间和计算任务量等需求都是可控的,必要时甚至可以暂停执行,可被认为是对响应延时不敏感的服务。

实际应用中,在线服务可以是:使用某网络模型提供某种服务,离线服务可以是:训练该网络模型的服务。比如,训练一个用于实现图像分类能力的分类模型,属于离线服务;使用该分类模型进行图像分类,属于在线服务,因为用户可以实时地上传需要分类的图像,以通过该分类模型完成实时地图像分类处理。

如果为了保障在线服务的响应速度,按照在线服务的计算任务量峰值预先为在线服务对应的计算程序分配固定的计算资源,那么势必大量的计算资源会处于待命状态而被浪费掉。为避免资源浪费,本实施例中提供的方案的核心思想是:将在线服务计算任务低谷期间空闲的计算资源分给离线服务使用,在在线服务计算任务高峰期间,限制离线服务的计算任务对计算资源的使用,以保证在线服务的QoS,如响应时间。

由于离线服务的整体计算量是可以预知的,且离线服务对计算时间的要求不严格,因此,本实施例中,可以仅针对在线服务进行计算任务量的实时检测。而且,异构计算场景的初衷就是利用很多异构服务器中的各种异构计算单元来完成海量的数据计算任务,在由对应于不同服务的多个计算程序共用一个计算单元的前提下,每个服务器的处理负载是比较重的。在本实施例提供的方案中,对于某服务器中的目标计算单元来说,仅针对使用目标计算单元的对响应延时敏感的第一计算程序进行计算任务量和所需的资源需求量的动态统计,无需关注对响应延时不敏感的第二计算程序的计算任务量和所需资源情况,可以避免加重服务器的处理负载。

本实施例中,假设使用目标计算单元的第一计算程序是在线服务对应的计算程序,则获取第一计算程序在当前调度周期内的计算任务量,并根据该计算任务量获取在当前调度周期内第一计算程序的资源需求量。另外,假设第二计算程序是使用目标计算单元的对应于离线服务的计算程序,最终,根据第一计算程序的资源需求量与预先分配给第一计算程序的资源分配量的比较结果,生成第一计算程序和第二计算程序在当前调度周期内各自的资源分配信息。

资源分配信息的生成过程可以是:

若第一计算程序的资源需求量大于或等于所述资源分配量,则生成第一资源分配信息,第一资源分配信息中记录如下信息:将目标计算单元中第一比例的资源分配给第一计算程序,将目标计算单元中第二比例的资源分配给第二计算程序,其中,第二比例小于第一比例,第一比例的资源与所述资源分配量匹配;

若第一计算程序的资源需求量小于所述资源分配量,则生成第二资源分配信息,第二资源分配信息中记录如下信息:将目标计算单元中第三比例的资源分配给第一计算程序,将目标计算单元中第四比例的资源分配给第二计算程序,其中,第三比例的资源是满足第一计算程序的资源需求量的资源,第四比例的资源包括与所述资源分配量与所述资源需求量的差值对应的资源。

在本实施例中,若第一计算程序在当前调度周期内的资源需求量大于或等于预先固定分配给第一计算程序的资源分配量,说明第一计算程序当前的计算任务量超出了预先估计的峰值,那么此时即使第一计算程序的计算任务量很高,也不会给第一计算程序分配能够完全满足其当前计算任务量所需的资源,而是以上述预先分配的资源分配量为上限为第一计算程序分配资源,即为第一计算程序分配的可用资源上限即为该资源分配量。目标计算单元剩余的资源再分配给第二计算程序。当第二计算程序有多个时,剩余资源可以在多个第二计算程序之间进行分配,比如平分或不平分。

若第一计算程序在当前调度周期内的资源需求量小于预先固定分配给第一计算程序的资源分配量,说明第一计算程序当前的计算任务量低于预先估计的峰值,那么此时可以让渡出第一计算程序使用不了的资源给第二计算程序使用。假设预先分配给第一计算程序的资源分配量为Q1,第一计算程序在当前调度周期内的资源需求量为Q2,那么说明预先分配给第一计算程序的资源分配量中会存在Q1-Q2的资源余量,可以将该余量分配给第二计算程序使用。

另外,在一可选实施例中,确定在当前调度周期内第一计算程序的资源需求量的过程中,可以结合在当前调度周期内第一计算程序的计算任务量以及目标计算单元的规格来确定在当前调度周期内第一计算程序的资源需求量。

其中,不同规格可以体现为类型、硬件配置参数、型号等多种维度的差异。

由于在异构计算场景中,每个服务器中会包含很多不同类型的计算单元,比如CPU、GPU、FPGA,等等。即使是同一种类型的计算单元,也可能因为硬件配置情况、型号等不同而具有不同的计算能力。在此情形下,相同的计算任务量在使用不同规格的计算单元进行计算时所需的资源需求量往往是不同的。比如,在使用某种型号的GPU计算1TB的数据时,可能需要使用该GPU60%的资源,但是在使用另一种型号的GPU计算1TB的数据时,可能仅需要使用该GPU40%的资源。因此,可以预先针对每个计算单元统计出计算各种大小范围的计算任务量时所需的资源情况,基于统计结果,确定第一计算程序在当前调度周期内的计算任务量在使用目标计算单元时所需的资源需求量。

以下将详细描述本发明的一个或多个实施例的资源调度装置。本领域技术人员可以理解,这些资源调度装置均可使用市售的硬件组件通过本方案所教导的步骤进行配置来构成。

图6为本发明实施例提供的一种资源调度装置的结构示意图,该资源调度装置位于资源调度程序中,该资源调度程序设于用于异构计算的服务器中,如图6所示,该装置包括:获取模块11、生成模块12。

获取模块11,用于获取使用目标计算单元的第一计算程序在当前调度周期内的计算任务量,所述目标计算单元是所述服务器中包含的多个计算单元中的任一个,所述第一计算程序是使用所述目标计算单元的多个计算程序中响应延时符合设定条件的计算程序;以及,根据所述计算任务量获取在所述当前调度周期内所述第一计算程序的资源需求量。

生成模块12,用于根据所述第一计算程序的资源需求量与预先分配给所述第一计算程序的资源分配量的比较结果,生成所述多个计算程序在所述当前调度周期内各自的资源分配信息,所述资源分配信息中记录相应计算程序在所述当前调度周期内可用的资源使用上限。

可选地,获取模块11具体可以用于:根据所述计算任务量和所述目标计算单元的规格,获取在所述当前调度周期内所述第一计算程序的资源需求量;其中,相同计算任务量使用不同规格的计算单元进行计算时所需的资源需求量不同。

其中,可选地,所述多个计算程序各自对应的响应延时根据所述多个计算程序各自对应的服务的响应延时需求确定。

可选地,所述多个计算程序对应的服务中包括在线服务和离线服务,所述在线服务的响应延时低于所述离线服务的响应延时。此时,所述第一计算程序是与所述在线服务对应的计算程序。

可选地,生成模块12具体可以用于:确定所述多个计算程序中响应延时不符合设定条件的第二计算程序;若所述第一计算程序的资源需求量大于或等于所述资源分配量,则生成第一资源分配信息,所述第一资源分配信息中记录如下信息:将所述目标计算单元中第一比例的资源分配给所述第一计算程序,将所述目标计算单元中第二比例的资源分配给所述第二计算程序;其中,所述第二比例小于所述第一比例,所述第一比例的资源与所述资源分配量匹配。

可选地,生成模块12具体可以用于:确定所述多个计算程序中响应延时不符合设定条件的第二计算程序;若所述第一计算程序的资源需求量小于所述资源分配量,则生成第二资源分配信息,所述第二资源分配信息中记录如下信息:将所述目标计算单元中第三比例的资源分配给所述第一计算程序,将所述目标计算单元中第四比例的资源分配给所述第二计算程序;其中,所述第三比例的资源是满足所述第一计算程序的资源需求量的资源,所述第四比例的资源包括与所述资源分配量与所述资源需求量的差值对应的资源。

可选地,所述装置还包括:发送模块,用于将目标计算程序对应的目标资源分配信息发送至所述目标计算程序,以使所述目标计算程序根据所述目标资源分配信息使用所述目标计算单元提供的资源;所述目标计算程序是所述多个计算程序中的任一个。

其中,可选地,所述目标资源分配信息用于使得所述目标计算程序在当前已使用的资源超过所述目标资源分配信息中记录的资源使用上限时,在所述当前调度周期内暂停计算任务的处理。

图6所示装置可以执行前述图1至图5所示实施例中的资源调度方案,详细的执行过程和技术效果参见前述实施例中的描述,在此不再赘述。

在一个可能的设计中,上述图6所示资源调度装置的结构可实现为一服务器,该服务器是用于异构计算的服务器。如图7所示,该服务器中包括:多个计算单元、资源调度程序和若干计算程序,其中:

资源调度程序:用于获取使用目标计算单元的第一计算程序在当前调度周期内的计算任务量,所述目标计算单元是所述多个计算单元中的任一个,所述第一计算程序是使用所述目标计算单元的多个计算程序中响应延时符合设定条件的计算程序;以及,根据所述计算任务量获取在所述当前调度周期内所述第一计算程序的资源需求量,根据所述第一计算程序的资源需求量与预先分配给所述第一计算程序的资源分配量的比较结果,生成所述多个计算程序在所述当前调度周期内各自的资源分配信息,所述资源分配信息中记录相应计算程序在所述当前调度周期内可用的资源使用上限。

多个计算程序中的每个计算程序:用于根据对应的资源分配信息使用所述目标计算单元提供的资源。

多个计算单元比如包括GPU、FPGA、ASIC等多种异构的计算单元。

另外,本发明实施例提供了一种非暂时性机器可读存储介质,所述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器至少可以实现如前述图1至图5所示实施例中的资源调度方法。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助加必需的通用硬件平台的方式来实现,当然也可以通过硬件和软件结合的方式来实现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以计算机产品的形式体现出来,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

相关技术
  • 一种资源调度方法、装置、服务器及可读存储介质
  • 资源调度方法、装置、服务器和存储介质
技术分类

06120112942186