一种集群GPU复用及智能负载的方法及系统与流程

文档序号:17695299发布日期:2019-05-17 21:27阅读:281来源:国知局
一种集群GPU复用及智能负载的方法及系统与流程

本领域涉及计算机领域,并且更具体地涉及一种集群gpu复用及智能负载的方法及系统。



背景技术:

maui是一个开源的作业调度应用软件,被广泛应用于高性能服务集群中实现作业的调度管理,通过maui的gres属性可以设置节点的gpu数量并支持gpu资源的调度,早期也有相关方面的研究与方案,这些方案仅考虑了按gpu卡为单位进行作业调度,即一张gpu卡同时只能运行一个任务。

随着目前人工智能ai计算需求的不断增长,高性能集群中的gpu资源作为加速计算资源也越来越重要,gpu作为一种昂贵稀少的计算资源(相比cpu、内存而言),需要能够提供更加细粒度的、更弹性化的调度分配策略。

现有的maui中可通过配置maui.cfg文件增加nodecfg设置,如“nodecfg[node1]gres=gpu:4”,表示node1节点存在4个gpu;作业提交时通过qsub命令的“-wx=gpu@2”表示把作业提交到设置gpu属性且当前该属性存量大于等于2的节点。现有的基于pbs+maui的gpu调度通过gres属性和任务运行的前后序脚本可以支持gpu按卡级别的调度分配,并做到任务与gpu卡的绑定。

由于gpu相比cpu、内存而言是一种稀缺的计算资源,只按卡进行调度分配的结果是一块gpu卡上同时只能运行一个计算任务,如果存在很多计算量小但需要gpu资源的任务(如ai的开发工作早期只需要简单计算),这将会造成gpu计算资源的浪费。

使用nvidia的vgpu技术虽然可以将一块gpu虚拟成多个vgpu,但是这种方式需要人工调整,不能自适应集群不断变化的计算需求。



技术实现要素:

有鉴于此,本发明实施例的目的在于提出一种集群gpu复用及智能负载的方法及系统,通过使用本发明的方法可以实现支持一块gpu上运行多个作业任务,针对gpu小计算量的应用场景可以有效的提升资源利用率,避免多任务并发时gpu显存溢出会导致的任务终止,保证高优先级任务的正常运行。

基于上述目的,本发明的实施例的一个方面提供了一种集群gpu复用及智能负载的方法,包括:

1)对gpu卡进行复用设置;

2)将申请执行的任务分配给进行复用设置的gpu卡并将任务与gpu卡进行绑定;

3)定期扫描gpu卡的显存使用,并基于显存的利用率和设置策略对gpu卡的复用情况进行动态调整;

4)在任务结束时释放任务绑定的gpu卡。

根据本发明的一个实施例,步骤3)中策略包括:

如果显存的利用率>65%,则提交虚任务以占满当前gpu卡的空闲槽位;

如果显存的利用率>85%,并且如果当前gpu卡正在运行多个任务,则删除最低优先级任务,并提交虚任务以占满当前gpu卡的空闲槽位;

如果显存的利用率<50%,则判断当前gpu卡是否运行任务,如果正在运行任务并且存在虚任务,则删除一个或全部虚任务。

根据本发明的一个实施例,步骤1)中将需要复用的gpu卡进行复用设置包括以下步骤:

1)根据节点实际的物理gpu卡数进行文件初始化;

2)修改gpunodes文件中节点的卡位记录,同时修改maui.cfg配置文件中节点的gres属性。

根据本发明的一个实施例,修改gpunodes文件中节点的卡位记录,同时修改maui.cfg配置文件中该节点的gres属性包括:将节点对应的gpu卡位数修改为原数量的2倍,用0填充空槽位,并同时将maui.cfg配置文件中节点的gres属性修改为原来的2倍。

根据本发明的一个实施例,步骤2)还包括:在绑定后对gpu卡的复用节点进行实际gpu卡的计算处理。

根据本发明的一个实施例,计算处理为对gpu卡的节点的复用的卡位进行取模。

根据本发明的一个实施例,步骤4)包括:在任务结束后,获取任务对应的gpu资源列表,然后在相应的节点上对绑定的资源组进行释放,并将jobgpus中该条记录转移至jobgpushis文件中。

本发明的实施例的另一个方面提供了一种集群gpu复用及智能负载的系统,其特征在于,包括:

资源复用模块,资源复用模块配置用于对gpu卡进行复用设置;

资源分配与绑定模块,资源分配与绑定模块配置用于将申请执行的任务分配给进行复用设置的gpu卡并将任务与gpu卡进行绑定;

智能负载模块,智能负载模块配置用于定期扫描gpu卡的显存使用,并基于显存的利用率和设置策略对gpu卡的复用情况进行动态调整;

资源释放模块,资源释放模块配置用于在任务结束时释放任务绑定的gpu卡。

根据本发明的一个实施例,该策略包括:

如果显存的利用率>65%,则提交虚任务以占满当前gpu卡的空闲槽位;

如果显存的利用率>85%,并且如果当前gpu卡正在运行多个任务,则删除最低优先级任务,并提交虚任务以占满当前gpu卡的空闲槽位;

如果显存的利用率<50%,则判断当前gpu卡是否运行任务,如果正在运行任务并且存在虚任务,则删除一个或全部虚任务。。

根据本发明的一个实施例,对gpu卡进行复用设置包括:

根据节点实际的物理gpu卡数进行文件初始化,以及修改gpunodes文件中节点的卡位记录,同时修改maui.cfg配置文件中节点的gres属性。

本发明具有以下有益技术效果:本发明实施例提供的集群gpu复用及智能负载的方法,通过对gpu卡进行复用设置;将申请执行的任务分配给进行复用设置的gpu卡并将任务与gpu卡进行绑定;定期扫描gpu卡的显存使用,并基于显存的利用率和设置策略对gpu卡的复用情况进行动态调整;在任务结束时释放任务绑定的gpu卡的技术方案,可以实现支持一块gpu上运行多个作业任务,针对gpu小计算量的应用场景可以有效的提升资源利用率,避免多任务并发时gpu显存溢出会导致的任务终止,保证高优先级任务的正常运行。

附图说明

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

图1为根据本发明的一个实施例的集群gpu复用及智能负载的方法的示意流程图;

图2为根据本发明的另一个实施例的集群gpu复用及智能负载的方法的示意流程图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。

需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。

基于上述目的,本发明的实施例的第一个方面,提出了一种集群gpu复用及智能负载的方法的一个实施例。图1示出的是该方法的示意流程图。

如图1中所示,该集群gpu复用及智能负载的方法可以包括:

1)对gpu卡进行复用设置;

2)将申请执行的任务分配给进行复用设置的gpu卡并将任务与gpu卡进行绑定;

3)定期扫描gpu卡的显存使用,并基于显存的利用率和设置策略对gpu卡的复用情况进行动态调整;

4)在任务结束时释放任务绑定的gpu卡。

通过以上技术方案,可以实现支持一块gpu上运行多个作业任务,针对gpu小计算量的应用场景可以有效的提升资源利用率,避免多任务并发时gpu显存溢出会导致的任务终止,保证高优先级任务的正常运行。

在本发明的一个优选实施例中,参考图2,步骤3)中策略包括:

如果显存的利用率>65%,则提交虚任务以占满当前gpu卡的空闲槽位;

如果显存的利用率>85%,并且如果当前gpu卡正在运行多个任务,则删除最低优先级任务,并提交虚任务以占满当前gpu卡的空闲槽位;

如果显存的利用率<50%,则判断当前gpu卡是否运行任务,如果正在运行任务并且存在虚任务,则删除一个或全部虚任务。

在本发明的一个优选实施例中,步骤1)中将需要复用的gpu卡进行复用设置包括以下步骤:

1)根据节点实际的物理gpu卡数进行文件初始化;

2)修改gpunodes文件中节点的卡位记录,同时修改maui.cfg配置文件中节点的gres属性。

在本发明的一个优选实施例中,修改gpunodes文件中节点的卡位记录,同时修改maui.cfg配置文件中该节点的gres属性包括:将节点对应的gpu卡位数修改为原数量的2倍,用0填充空槽位,并同时将maui.cfg配置文件中节点的gres属性修改为原来的2倍。

在本发明的一个优选实施例中,步骤2)还包括:在绑定后对gpu卡的复用节点进行实际gpu卡的计算处理。

在本发明的一个优选实施例中,计算处理为对gpu卡的节点的复用的卡位进行取模。

在本发明的一个优选实施例中,参考图2,步骤4)包括:在任务结束后,获取任务对应的gpu资源列表,然后在相应的节点上对绑定的资源组进行释放,并将jobgpus中该条记录转移至jobgpushis文件中。

本发明的实施例的第二个方面,提出了一种集群gpu复用及智能负载的系统的一个实施例。

该集群gpu复用及智能负载的系统包括:

资源复用模块,资源复用模块配置用于对gpu卡进行复用设置;

资源分配与绑定模块,资源分配与绑定模块配置用于将申请执行的任务分配给进行复用设置的gpu卡并将任务和gpu卡进行绑定,以执行任务。

在一个实施例中,资源分配模块功能与现有的单卡分配功能大致相同,即根据gpunodes中节点的gpu卡使用情况与当前任务的申请数量找到出要分配给当前任务的gpu卡,并将分配列表记录至jobgpus文件,文件中每条记录代表一个任务所分配的gpu资源列表,如下所示:

601.node01;;node01#0,1;node02#2,3

602.node01;;node03#0;node02#1

资源绑定模块根据该信息列表在相应的节点中通过cgroup创建对应的资源组,并将该资源组绑定到节点中运行的任务进程中;

与现有单卡分配不同的是,由于node02设置了gpu复用,在实际分配的时候可能会出现“603.node01::node02#4,5”,表示作业603使用了node02节点的第4、5块gpu卡,然而在资源绑定的时候是没有第4、5块卡的,因此需要在资源绑定时对gpu复用节点进行实际gpu卡的计算处理,该计算处理可以是对gpu卡的节点的复用地址进行取模,如上示例node02节点的第4、5块gpu卡,取模后为node02节点的第0、1块gpu卡;

智能负载模块,智能负载模块配置用于定期扫描gpu卡的显存使用,并基于显存的利用率和设置策略对gpu卡的复用情况进行动态调整。在本发明的一个优选实施例中,该策略包括:

检测每块gpu卡,如果显存的利用率>65%(通过配置设置百分比),则提交虚任务以占满当前gpu卡的空闲槽位,大于65%的利用率说明当前任务比较大,为了保证当前任务的正常执行,则提交虚任务占满当前gpu卡的空闲槽位,以不再进行复用设置;

如果显存的利用率>85%,并且如果当前gpu卡正在运行多个任务,则删除最低优先级任务,并提交虚任务以占满当前gpu卡的空闲槽位,当多个任务同时执行时,显存的利用率>85%,为了保证多个任务中最高优先级的任务的正常执行,则把最低优先级任务删除,然后提交虚任务以占满当前gpu卡的空闲槽位,以不再进行复用设置;

如果显存的利用率<50%,则判断当前gpu卡是否运行任务,如果正在运行任务并且存在虚任务,则删除一个或除全部虚任务;

在前序脚本里增加判断,如果当前为虚任务则不进行gpu卡按调度分配绑定,虚任务通过运行脚本修改gpunodes文件实现gpu卡的占位,修改jobgpus使后序脚本进行资源释放同普通任务;

资源释放模块,资源释放模块配置用于在任务结束时释放任务绑定的gpu卡。在任务结束时,通过jobgpus中的任务记录获取任务对应的gpu资源列表,然后在相应的节点上对绑定的资源组进行释放,这里同样需要对复用gpu卡复用节点进行实际gpu卡的计算处理,并将jobgpus中该条记录转移至jobgpushis文件中(jobgpushis文件同jobgpus文件格式相同),配置pbs调度系统,将资源分配、资源绑定模块加入任务的前序处理流程,资源释放模块加入任务的后序处理流程。

在本发明的一个优选实施例中,将需要复用的gpu卡进行复用设置包括:

根据节点实际的物理gpu卡数进行文件初始化,以及修改gpunodes文件中节点的卡位记录,同时修改maui.cfg配置文件中节点的gres属性。具体地,资源复用模块维护名为“gpunodes”文件以及maui的maui.cfg文件,其中,gpunodes文件中每条记录代表一个节点的gpu资源使用情况,如下所示:

node01:0101

node02:0000

node03:0000

node04:0000

如上所示,“node01:0101”表示node01节点共包含4块物理gpu,当前的第0个和第2个gpu是空闲的。资源复用模块首先根据节点实际的物理gpu卡数进行文件初始化,当需要设置gpu复用时,如将node2节点的gpu设置为复用,复用模块会修改gpunodes文件中node02节点的记录为“node02:00000000”,8个空槽位表示node02节点中每块gpu最多可支持2个任务同时运行,此外还会同时修改maui.cfg配置文件中node02的gres属性,从“4”改为“8”。

实施例

该方法具体可按照以下步骤实现:

a)修改gpunodes文件初始化过程:

判断是否存在gpunodes文件并通过与调度系统中的node与nodeshare文件比对,增加节点的gpu卡位记录。如node2(4卡)未设置复用,则增加记录“node2:0000”,否则增加记录“node2:00000000”。

b)修改现有资源分配模块

输入参数:任务标识$jobid

输出:任务gpu资源序列如“601.node01;;node01#0,1;node02#2,3”

该模块首先根据任务标识获取任务信息并提取出任务将分配的节点列表及各节点应分配的gpu数量,遍历节点列表获取gpunodes文件中对应的节点gpu使用情况,例如“node01:0101”表示该节点已使用了第1,3块gpu卡,如果任务(如id:605)在该节点请求了1块gpu卡,则可分配第0块使用,该模块设置记录为“node01:1101”并返回“605;;node01#0,”作为该任务在node1节点的gpu分配记录。修改该模块增加对虚任务的过滤。

c)修改现有资源绑定模块

资源绑定模块根据输入的任务id在jobgpus文件中查找对应的gpu资源列表,解析该列表并到相应的节点中根据分配gpu序号创建资源组并绑定,同时限制该资源组访问其他gpu资源的权限,修改该模块增加对复用gpu卡到物理卡的转换。

d)定义虚任务提交/删除模块

虚任务提交模块,首先根据入参index判断当前该物理卡是否还存在空位,如果存在则提交虚任务占满,虚任务与普通任务同样通过torque的qsub命令进行提交,仅通过在提交命令中增加变量标识“-visvjob=1”以及需要占用的gpu卡位“-vvgpuindex=index”。任务脚本根据变量vgpuindex获取要占用的gpu卡位,修改gpunodes文件和jobgpus文件模拟任务占用。

例如,节点node02被设置为复用“node02:10000000”,如果gpu0卡的显存利用率已经达到70%,需要考虑将该块卡对当前任务独占,因此向node02提交一个虚任务,如“qsub-lnodes=node02-visvjob=1-vvgpuindex=0usesharegpus.sh”,任务脚本usesharegpus.sh中编辑gpunodes记录为“node02:10001000”,并根据当前任务id向jobgpus文件中增加记录“699;;node02#4,”

虚任务删除模块,根据入参index判断是否存在虚任务在占用该gpu卡,如果存在则直接调用pbs中的qdel命令对任务进行删除;

例如,智能负载模块检测到node02节点gpu0卡的显存利用率低于50%,虚任务删除模块首先在jobgpus文件中获取当前使用node02节点gpu0卡的任务,然后根据判断是否为虚任务(判断任务信息中是否存在isvjob标识),最后删除虚任务,资源释放模块会根据虚任务模拟的分配信息自动释放资源。

e)定义最小优先级任务删除模块

该模块根据入参index获取使用该gpu卡的任务列表并从中过滤虚任务,如果有效任务数量大于1,则通过maui调度器获取有效任务中优先级最小的任务并进行删除。

f)定义智能负载模块

为各计算节点通过定时任务的方式实现智能负载策略:首先判断当前节点是否存在复用,如果存在,获取节点gpu卡的显存利用率,与管理员配置的阈值进行比对并进行如下操作:(假设干预阈值为65%,驱逐阈值为85%,释放阈值为50%)

如果gpu显存利用率>65%,调用虚任务提交模块占满该卡的空闲槽位;

如果显存利用率>85%,如果存在该卡在运行多个任务,则调用低优先删除模块删除最低优先级任务,并提交虚任务占满该卡空闲槽位;

如果显存利用率<50%,判断该卡是否有任务:如果有并且存在虚任务,则尝试删除一个或全部虚任务;

上述仅描述了主要的处理流程,并未包含操作过程中的错误及异常处理,此外,多任务并行时还需考虑对以上的文件操作增加文件锁控制。

需要特别指出的是,上述系统的实施例采用了上述方法的实施例来具体说明各模块的工作过程,本领域技术人员能够很容易想到,将这些模块应用到上述方法的其他实施例中。

本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性组件、方块、模块、电路和步骤的功能对其进行了一般性的描述。这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个系统的设计约束。本领域技术人员可以针对每种具体应用以各种方式来实现的功能,但是这种实现决定不应被解释为导致脱离本发明实施例公开的范围。

以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。

上述实施例,特别是任何“优选”实施例是实现的可能示例,并且仅为了清楚地理解本发明的原理而提出。可以在不脱离本文所描述的技术的精神和原理的情况下对上述实施例进行许多变化和修改。所有修改旨在被包括在本公开的范围内并且由所附权利要求保护。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1