一种资源分配方法、装置、设备以及存储介质与流程

文档序号:25543403发布日期:2021-06-18 20:40
一种资源分配方法、装置、设备以及存储介质与流程

本申请属于计算机技术领域,尤其涉及一种资源分配方法、资源分配装置、资源分配设备以及存储介质。



背景技术:

随着各行各业的发展,需要构建多种场景的机器学习应用。为了用海量数据训练出性能更好的机器学习模型,需要高效调用、管理大规模的图形处理器(graphicsprocessingunit,gpu)。面对这类需求,基于kubernetes的云原生技术应运而生。

kubernetes,简称k8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,kubernetes的目标是让部署容器化的应用简单并且高效,kubernetes提供了应用部署、规划、更新、维护的一种机制。

然而,当前的kubernetes对gpu调度时通常是随机分配gpu卡,导致gpu整体使用率不高、浪费资源。



技术实现要素:

有鉴于此,本申请实施例提供了一种资源分配方法、资源分配装置、资源分配设备以及存储介质,以解决传统的资源分配方法随机分配gpu卡,导致gpu整体使用率不高、浪费资源的问题。

本申请实施例的第一方面提供了一种资源分配方法,包括:

当获取到需要调度gpu资源的任务请求时,获取可用的gpu节点以及每个可用的gpu节点中已使用的gpu卡的数量;所述任务请求中携带有完成所述任务请求所需的gpu资源数量;

基于所述可用的gpu节点、所述gpu卡的数量以及每个所述gpu卡对应的拓扑结构,确定每个可用的gpu节点中每个空闲的gpu卡对应的权重值;

基于所述所需的gpu资源数量以及每个空闲的gpu卡对应的权重值确定所述任务请求对应的分配结果;

基于所述分配结果为所述任务请求分配gpu卡。

本申请实施例的第二方面提供了一种资源分配装置,包括:

获取单元,用于当获取到需要调度gpu资源的任务请求时,获取可用的gpu节点以及每个可用的gpu节点中已使用的gpu卡的数量;所述任务请求中携带有完成所述任务请求所需的gpu资源数量;

第一确定单元,用于基于所述可用的gpu节点、所述gpu卡的数量以及每个所述gpu卡对应的拓扑结构,确定每个可用的gpu节点中每个空闲的gpu卡对应的权重值;

第二确定单元,用于基于所述所需的gpu资源数量以及每个空闲的gpu卡对应的权重值确定所述任务请求对应的分配结果;

分配单元,用于基于所述分配结果为所述任务请求分配gpu卡。

本申请实施例的第三方面提供了一种资源分配设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如上述第一方面所述的资源分配方法的步骤。

本申请实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上述第一方面所述的资源分配方法的步骤。

本申请实施例的第五方面提供了一种计算机程序产品,当计算机程序产品在资源分配设备上运行时,使得资源分配设备执行上述第一方面所述的资源分配方法的步骤。

本申请实施例提供的一种资源分配方法、资源分配装置、资源分配设备以及存储介质,具有以下有益效果:

在本申请提供的资源分配方法中,当获取到需要调度gpu资源的任务请求时,获取可用的gpu节点以及每个可用的gpu节点中已使用的gpu卡的数量;该任务请求中携带有完成该任务请求所需的gpu资源数量;基于可用的gpu节点、gpu卡的数量以及每个gpu卡对应的拓扑结构,确定每个可用的gpu节点中每个空闲的gpu卡对应的权重值;基于所需的gpu资源数量以及每个空闲的gpu卡对应的权重值确定任务请求对应的分配结果,基于该分配结果为任务请求分配gpu卡。上述方式中,资源分配设备根据各个gpu卡对应的拓扑结构以及使用情况,确定每个可用的gpu卡对应的权重值,基于该权重值以及任务请求的不同需求,为任务请求分配最合适的gpu节点以及gpu卡。这种动态调整权重分配gpu资源的方式,使gpu卡更为紧凑地分配给不同的任务请求,使空闲的gpu资源可为需求量更大的任务请求更好地服务,充分合理利用了gpu资源,使gpu资源使用率达到了最大化。

附图说明

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

图1是本申请实施例提供的资源分配方法的示意流程图;

图2是本申请又一实施例提供的资源分配方法的示意性流程图;

图3是本申请再一实施例提供的资源分配方法的示意性流程图;

图4是本申请另一实施例提供的资源分配方法的示意性流程图;

图5是本申请一实施例提供的一种资源分配装置的示意图;

图6是本申请另一实施例提供的一种资源分配设备的示意图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

传统的资源分配方法随机分配gpu卡,导致gpu整体使用率不高、浪费资源。有鉴于此,本申请提供了一种资源分配方法,该方法中,当获取到需要调度gpu资源的任务请求时,获取可用的gpu节点以及每个可用的gpu节点中已使用的gpu卡的数量;该任务请求中携带有完成该任务请求所需的gpu资源数量;基于可用的gpu节点、gpu卡的数量以及每个gpu卡对应的拓扑结构,确定每个可用的gpu节点中每个空闲的gpu卡对应的权重值;基于所需的gpu资源数量以及每个空闲的gpu卡对应的权重值确定任务请求对应的分配结果,基于该分配结果为任务请求分配gpu卡。上述方式中,资源分配设备根据各个gpu卡对应的拓扑结构以及使用情况,确定每个可用的gpu卡对应的权重值,基于该权重值以及任务请求的不同需求,为任务请求分配最合适的gpu节点以及gpu卡。这种动态调整权重分配gpu资源的方式,使gpu卡更为紧凑地分配给不同的任务请求,使空闲的gpu资源可为需求量更大的任务请求更好地服务,充分合理利用了gpu资源,使gpu资源使用率达到了最大化。

请参见图1,图1是本申请实施例提供的资源分配方法的示意流程图。本实施例中资源分配方法的执行主体为资源分配设备,资源分配设备包括但不限于独立的服务器、分布式服务器、服务器集群、云服务器、智能手机、平板电脑、计算机、个人数字助理(personaldigitalassistant,pda)、笔记本电脑、超级移动个人计算机(ultra-mobilepersonalcomputer,umpc)、等。如图1所示的资源分配方法可包括s101~s104,各个步骤的具体实现原理如下。

s101:当获取到需要调度gpu资源的任务请求时,获取可用的gpu节点以及每个可用的gpu节点中已使用的gpu卡的数量;所述任务请求中携带有完成所述任务请求所需的gpu资源数量。

当某个应用程序需要调度gpu资源时,会发起需要调度gpu资源的任务请求,资源分配设备接收该任务请求,并获取可用的gpu节点以及每个可用的gpu节点中已使用的gpu卡的数量。该任务请求中携带有完成该任务请求所需的gpu资源数量。也可以是资源分配设备监控当前是否有需要调度gpu资源的任务请求,当监控到该任务请求时,获取该任务请求。其中,任务请求中携带的完成该任务请求所需的gpu资源数量可以理解为,完成该任务请求所需的gpu卡的数量。

示例性地,为了便于理解,对本实施例中涉及到的一些名词进行解释。

gpu:图形处理器(graphicsprocessingunit)。

kubernetes:是一种用于在资源分配设备上运行和协同容器化应用程序的系统,提供应用部署、规划、更新维护的机制。

pod:是kubernetes系统的基础单元,是由用户创建或部署的最小组件,是一个或多个容器的组合,也是kubernetes系统上运行容器化应用的资源对象。

apiserver:属于kubernetes中的一个组件,其余组件可通过该组件共享状态交互。

pci-express(pci-e):是最新的总线和接口标准,可包括显示接口以及多种应用接口。

kubelet:属于kubernetes中的一个组件,主要功能为定时从某个地方获取gpu节点的运行信息,并定时汇报给apiserver。

示例性地,预先将kubernetes在资源分配设备中部署以及运行。可通过apiserver接收需要调度gpu资源的任务请求,当接收到该任务请求时,对应创建pod对象。其中,一个pod对象与一个任务请求相对应,可理解为每接收到一个任务请求,便对应创建一个pod对象。

资源分配设备通过apiserver对封装好的信息进行解析,得到当前所有的gpu节点各自对应的标识信息、当前所有的gpu节点中每个gpu节点对应的已使用的gpu卡和空闲的gpu卡、每个gpu卡对应的标识信息以及每个gpu卡对应的拓扑结构。

基于任务请求中携带的完成该任务请求所需的gpu资源数量,在当前所有的gpu节点以及所有的gpu卡中,确定可用的gpu节点以及每个可用的gpu节点中已使用的gpu卡的数量。示例性地,根据每个gpu节点对应的已使用的gpu卡和空闲的gpu卡,可确定每个gpu节点对应的已使用的gpu卡的数量和空闲的gpu卡的数量。选择gpu节点中空闲的gpu卡的数量大于或等于所需的gpu资源数量的gpu节点作为可用的gpu节点。获取这些可用的gpu节点中已使用的gpu卡的数量。

可选地,当gpu节点中设置的pci-e有多个时,获取可用的gpu节点中已使用的gpu卡的数量包括,获取该gpu节点中所有已使用的gpu卡的数量,以及获取安装在同一个pci-e中的已使用的gpu卡的数量。例如,当gpu节点中设置的pci-e有2个时,获取该gpu节点中所有的已使用的gpu卡的数量,以及获取每个pci-e中已使用的gpu卡的数量。

可选地,在s101之前还可包括,基于预设插件采集所有的gpu节点中每个gpu节点上各个gpu卡对应的拓扑结构、每个gpu节点对应的标识信息、每个gpu卡对应的标识信息、每个gpu卡的使用情况等,并对这些信息以扩展资源的形式进行封装。即对获取的这些信息进行编码,使其转换为计算机可以理解的数据。kubelet进程根据预设周期获取该封装好的信息,并将这些信息上传至apiserver中。预设周期为用户自行设置,对此不做限定。例如,kubelet进程每隔10秒便获取最新的封装好的信息,并将这些信息上传至apiserver中。

其中,预设插件主要用于采集各个gpu节点上各个gpu卡所对应的信息,预设插件可以为自定义的device-plugin插件。gpu卡对应的拓扑结构用于表示该gpu卡在资源分配设备中的物理布局。例如,资源分配设备中设置有两个pci-e、8张gpu卡,每四张gpu卡按照预设顺序安装在一个pci-e上。对于其中任意一个gpu卡来说,该gpu卡与两个pci-e以及其余7张gpu卡之间的关系就是该gpu卡对应的物理布局,也就是该gpu卡对应的拓扑结构。

本申请实施例中,资源分配设备可及时、准确地获取到当前所有gpu节点对应的标识信息,以及每个gpu卡对应的拓扑结构和标识信息,便于后续资源分配设备及时、合理为任务请求分配gpu资源。

如图2所示,图2是本申请又一实施例提供的资源分配方法的示意性流程图,可选地,在一种可能的实现方式中,上述s101包括s1011~s1013,具体如下:

s1011:获取处于登录状态的gpu节点,以及每个gpu节点中空闲的gpu卡数量。

获取处于登录状态的gpu节点,也可理解为获取当前可用的gpu节点,具体地,资源分配设备通过apiserver对封装好的信息进行解析,得到当前所有的gpu节点以及当前所有的gpu节点中每个gpu节点对应的已使用的gpu卡和空闲的gpu卡。基于此,统计当前所有的gpu节点中每个gpu节点中空闲的gpu卡数量。

s1012:基于每个gpu节点中空闲的gpu卡数量以及所需的gpu资源数量确定可用的gpu节点。

资源分配设备可预先在所有的gpu节点中过滤掉空闲的gpu卡数量不符合任务请求所需的gpu资源数量的gpu节点,这些被过滤掉的gpu节点不会进入后续的分配流程,提升了后续gpu资源分配的速度以及准确性。

资源分配设备也可将gpu节点中空闲的gpu卡的数量大于或等于所需的gpu资源数量的gpu节点标记为可用的gpu节点。同样,只有被标记为可用的gpu节点才可进入后续的分配流程,进而提升了后续gpu资源分配的速度以及准确性。

例如,需要调度gpu资源的任务请求中携带有完成该任务请求所需的gpu资源数量为3,获取所有gpu节点上空闲的gpu卡数量,将空闲的gpu卡数量大于或等于3的gpu节点保留,将空闲的gpu卡数量小于3的gpu节点过滤掉。示例性地,若某个gpu节点上空闲的gpu卡数量为1,则将该gpu节点过滤掉;若某个gpu节点上空闲的gpu卡数量为2,则将该gpu节点过滤掉;若某个gpu节点上空闲的gpu卡数量为4,则将该gpu节点保留;若某个gpu节点上空闲的gpu卡数量为3,也将该gpu节点保留。这些被保留的gpu节点即为可用的gpu节点,这些gpu节点以及这些gpu节点上的gpu卡将进入后续的分配流程。

s1013:获取每个可用的gpu节点中已使用的gpu卡的数量。

此处可用的gpu节点可以理解为后续可以为该任务请求分配的gpu节点,或者可以理解为后续可以为该任务请求分配的gpu卡所对应的gpu节点。确定可用的gpu节点后,分别获取每个可用的gpu节点上已使用的gpu卡的数量,便于后续确定每个可用的gpu节点中每个空闲的gpu卡对应的权重值。

s102:基于可用的gpu节点、gpu卡的数量以及每个gpu卡对应的拓扑结构,确定每个可用的gpu节点中每个空闲的gpu卡对应的权重值。

资源分配设备基于可用的gpu节点、每个可用的gpu节点中已使用的gpu卡的数量以及可用的gpu节点中每个已使用的gpu卡对应的拓扑结构,确定每个可用的gpu节点中每个空闲的gpu卡对应的权重值。示例性地,在确定每个可用的gpu节点后,统计每个可用的gpu节点上已使用的gpu卡的数量以及空闲的gpu卡的数量,获取每个可用的gpu节点上已使用的每个gpu卡对应的拓扑结构。其中,每个可用的gpu节点上已使用的gpu卡的数量包括,每个gpu节点中所有已使用的gpu卡的数量,以及安装在同一个pci-e中的已使用的gpu卡的数量。

通过预设公式确定每个可用的gpu节点中每个空闲的gpu卡对应的权重值,预设公式如下:

上述(1)式中,g表示空闲的gpu卡对应的权重值,constant为常量,可根据每个gpu卡对应的拓扑结构进行调整;all1表示该gpu节点中所有的gpu卡的数量;all2表示安装在同一个pci-e上的gpu卡的数量;used1表示该gpu节点中所有已使用的gpu卡的数量;used2表示安装在同一个pci-e上已使用的gpu卡的数量;requestd表示任务请求所需的gpu资源数量。

示例性地,该预设公式可分为三部分,第一部分为常数100,用于表示为每个gpu卡分配的初始权重值,此处100仅为示例性说明,对此不做限定。

第二部分为该部分用于基于每个gpu卡的拓扑结构更新权重值,当前拓扑结构下,所剩空闲的gpu卡越少权重值越高,所剩空闲的gpu卡越多权重值越低;可理解为所剩空闲的gpu卡越少越会被优先分配。例如,某个gpu节点中设置有2个pci-e、8张gpu卡,每4张gpu卡按照预设顺序安装在一个pci-e上。其中,有两张顺序安装在第一个pci-e上的gpu卡处于正在使用的状态。此时constant可取120,all1取8,used1取2。

第三部分为若计算第一个pci-e上第3张空闲的gpu卡对应的权重值,任务请求所需的gpu资源数量为2。此时,all2取4,used2与requestd的值分别设置为2。第三部分考虑gpu卡数量整体性,优先分配完整拓扑结构给任务请求,提升任务请求处理数据的效率。如上述的例子中,任务请求所需的gpu资源数量为2,根据权重值的计算结果,资源分配设备可将同一个pci-e上剩余的两个空闲的gpu卡分配给该任务请求,一方面保证了gpu卡资源的最大化利用;一方面将同一个pci-e上的gpu卡分配给该任务请求,便于该任务请求内部的数据交互,提升该任务请求处理数据的速度;另一方面对于另一个pci-e来说,其还剩余4张空闲的gpu卡,当新的任务请求需要3张gpu卡或者4张gpu卡时,可直接将另一个pci-e中的gpu卡分配出去,而不用该任务请求再等待。

需要说明的是,若公式的第三部分经过计算得出负值,则抛弃该部分的计算结果。

s103:基于所需的gpu资源数量以及每个空闲的gpu卡对应的权重值确定任务请求对应的分配结果。

分配结果包括第一标识信息以及第二标识信息;其中,第一标识信息用于标识待分配给任务请求的目标gpu节点,第二标识信息用于标识待分配给任务请求的目标gpu卡。目标gpu节点即为在可用的gpu节点中选出的待分配给任务请求的gpu节点,目标gpu卡即为在该目标gpu节点中选出的待分配给任务请求的gpu卡。值得说明的是,对第一标识信息以及第二标识信息的数量不进行限定。例如,当需要分配给任务请求的gpu卡有多个时,相应地有多个第二标识信息,每个第二标识信息标识一个目标gpu节点。

可基于每个空闲的gpu卡对应的权重值,在其中挑选权重值较大的和所需的gpu资源数量相同的gpu卡,作为待分配的目标gpu卡,同时获取目标gpu卡所对应的gpu节点作为目标gpu节点。获取目标gpu节点对应的第一标识信息以及目标gpu卡对应的第二标识信息,并将其作为分配结果。

可选地,在一种可能的实现方式中,上述s103可包括s1031~s1032,具体如下:

s1031:对所述权重值进行排序,得到排序结果。

示例性地,可按照权重值从大到小的顺序对gpu卡进行排序,得到一种排序结果,或者按照权重值从小到大的顺序对gpu卡进行排序,得到另一种排序结果。

s1032:基于所述排序结果以及所述所需的gpu资源数量确定所述分配结果;所述分配结果包括第一标识信息以及第二标识信息;其中,所述第一标识信息用于标识待分配给所述任务请求的目标gpu节点,所述第二标识信息用于标识待分配给所述任务请求的目标gpu卡。

当基于权重值从大到小的顺序对gpu卡进行排序时,按照从前到后的顺序在该排序结果中选择与任务请求中所需的gpu资源数量匹配的若干个gpu卡,将选取的这几个gpu卡作为即将分配给该任务请求的目标gpu卡。同时获取目标gpu卡对应的目标gpu节点。当基于权重值从小到大的顺序对gpu卡进行排序时,按照从后到前的顺序在该排序结果中选择与任务请求中所需的gpu资源数量匹配的若干个gpu卡,将选取的这几个gpu卡作为即将分配给该任务请求的目标gpu卡。同时获取目标gpu卡对应的目标gpu节点。若出现权重值相同的gpu卡时,可按照排序结果中的先后顺序选择,也可在权重值相同的gpu卡中随机选择,对此不做限定。

获取目标gpu节点对应的第一标识信息以及目标gpu卡对应的第二标识信息,并将其作为分配结果。

示例性地,以按照权重值从大到小的顺序对gpu卡进行排序为例进行说明。若任务请求中携带的完成该任务请求所需的gpu资源数量为3,则在该排序结果中选择排在前3的3个gpu卡,获取这3个gpu卡各自对应的第二标识信息,以及其中任意一个gpu卡对应的gpu节点的第一标识信息。将该第一标识信息以及这3个第二标识信息作为该任务请求对应的分配结果。资源分配设备会根据该分配结果为该任务请求分配对应的gpu节点以及gpu卡。

s104:基于分配结果为该任务请求分配gpu卡。

具体地,可先通过第一标识信息在可用的gpu节点中查找目标gpu节点,基于第二标识信息在目标gpu节点中查找目标gpu卡,并将查找到的目标gpu卡分配给该任务请求。

可选地,在一种可能的实现方式中,上述s104可包括s1041~s1042,具体如下:

s1041:基于第一标识信息在可用的gpu节点中查找目标gpu节点。

第一标识信息可唯一标识一个gpu节点,资源分配设备可根据该第一标识信息在可用的gpu节点中查找到该目标gpu节点。

s1042:基于第二标识信息在目标gpu节点中查找目标gpu卡,并将目标gpu卡分配给该任务请求。

每个第二标识信息可唯一标识一个gpu卡。在查找的目标gpu节点中,根据第二标识信息进一步地查找目标gpu卡,并将目标gpu卡分配给该任务请求。

示例性地,可将分配结果存储至pod的注解信息中,kubelet获取当前任务请求对应的pod中的分配结果,根据分配结果中包含的第一标识信息以及第二标识信息,调取对应的目标gpu节点和目标gpu卡,并设置到该pod的环境变量中,从而实现了对该任务请求的gpu资源分配。

本申请实施例中,资源分配设备根据各个gpu卡对应的拓扑结构以及使用情况,确定每个可用的gpu卡对应的权重值,基于该权重值以及任务请求的不同需求,为任务请求分配最合适的gpu节点以及gpu卡。这种动态调整权重分配gpu资源的方式,使gpu卡更为紧凑地分配给不同的任务请求,使空闲的gpu资源可为需求量更大的任务请求更好地服务,充分合理利用了gpu资源,使gpu资源使用率达到了最大化。

如图3所示,图3是本申请再一实施例提供的资源分配方法的示意性流程图,可选地,在一种可能的实现方式中,如图3所示的资源分配方法可包括s201~s206。其中,图3所示的步骤s201~s204可以参考上述对s101~s104的相关描述,为了简洁,这里不再赘述。下面将具体对步骤s205~s206进行说明。

s205:基于目标gpu节点更新可用的gpu节点。

基于目标gpu节点实时更新可用的gpu节点。示例性地,此时目标gpu节点是已经分配给任务请求的gpu节点了,需要将该目标gpu节点的使用状态进行记录,作为下一个任务请求确定分配结果的参考依据。

s206:基于目标gpu卡更新每个可用的gpu节点中已使用的gpu卡的数量。

基于目标gpu卡实时更新每个可用的gpu节点中已使用的gpu卡的数量。示例性地,记录目标gpu节点中目标gpu卡的使用状态,重新确定该目标gpu节点中已使用的gpu卡的数量以及空闲的gpu卡的数量。例如,将该目标gpu卡的状态更新为使用中,这样有利于准确地为下一个任务请求分配对应的gpu节点以及gpu卡。

本实施例中,实时更新可用的gpu节点以及每个可用的gpu节点中已使用的gpu卡的数量,可保证准确地为下一个任务请求分配对应的gpu节点以及gpu卡,同时,也保证了gpu资源利用的最大化。

如图4所示,图4是本申请另一实施例提供的资源分配方法的示意性流程图,可选地,在一种可能的实现方式中,如图4所示的资源分配方法可包括s301~s303。其中,图4所示的步骤s301~s302可以参考上述对s101~s102的相关描述,为了简洁,这里不再赘述。下面将具体对步骤s303进行说明。

s303:当基于所需的gpu资源数量以及每个空闲的gpu卡对应的权重值未确定任务请求对应的分配结果时,随机为该任务请求分配gpu卡。

当基于所需的gpu资源数量以及每个空闲的gpu卡对应的权重值未确定任务请求对应的分配结果时,即未能选出合适的为该任务请求分配的gpu节点以及gpu卡时,随机选取当前空闲的gpu卡分配给该任务请求。

示例性地,kubelet在当前任务请求对应的pod的注解信息中查找分配结果,若未查找到与该任务请求匹配的分配结果时,证明未能确定该任务请求对应的分配结果,此时随机选取当前空闲的gpu卡对应的标识信息,以及选取该gpu卡对应的gpu节点,将选择的gpu卡和gpu节点设置到当前任务请求对应的pod的环境变量中,从而实现了对该当前任务请求的gpu资源分配。

本申请实施例,当出现没有合适的用于给该任务请求分配的gpu资源,或者由于资源分配设备卡顿等情况,没能及时确定出该任务请求对应的分配结果时,可随机为该任务请求分配对应的gpu资源,保证该任务请求对应的任务能够顺利完成。

在现有技术中,某个gpu节点(可理解为某个服务器)设置有两个pci-e、8张gpu卡,标识信息为0、1、2、3的4张gpu卡按照预设顺序安装在一个pci-e上,标识信息为4、5、6、7的4张gpu卡按照预设顺序安装在另一个pci-e上。若此时标识信息为0、1的两张gpu卡已经被使用,完成任务请求所需的gpu资源数量为2,。现有技术中的做法会将另一个pci-e上的gpu卡分配给该任务请求。而本申请提供的资源分配方法,基于这些gpu卡的拓扑结构、使用情况等确定空闲的gpu卡对应的权重值,计算得到的标识信息是2、3的gpu卡的权重值大于其他的gpu卡的权重值,因此会将前一个pci-e上标识信息是2、3的gpu卡分配给该任务请求。当再有一个任务请求所需的gpu资源数量为3或4时,可将另一个pci-e上的gpu卡分配给新的任务请求,而现有技术中必须等前一个任务结束后才可进行gpu资源分配。本申请提供的这种动态调整权重值分配gpu资源的方式,使gpu卡更为紧凑地分配给不同的任务请求,使空闲的gpu资源可为需求量更大的任务请求更好地服务,充分合理利用了gpu资源,使gpu资源使用率达到了最大化。

请参见图5,图5是本申请一实施例提供的一种资源分配装置的示意图。该资源分配装置包括的各单元用于执行图1、图2、图3、图4对应的实施例中的各步骤。具体请参阅图1、图2、图3、图4各自对应的实施例中的相关描述。为了便于说明,仅示出了与本实施例相关的部分。参见图5,包括:

获取单元410,用于当获取到需要调度gpu资源的任务请求时,获取可用的gpu节点以及每个可用的gpu节点中已使用的gpu卡的数量;所述任务请求中携带有完成所述任务请求所需的gpu资源数量;

第一确定单元420,用于基于所述可用的gpu节点、所述gpu卡的数量以及每个所述gpu卡对应的拓扑结构,确定每个可用的gpu节点中每个空闲的gpu卡对应的权重值;

第二确定单元430,用于基于所述所需的gpu资源数量以及每个空闲的gpu卡对应的权重值确定所述任务请求对应的分配结果;

分配单元440,用于基于所述分配结果为所述任务请求分配gpu卡。

可选地,所述获取单元410具体用于:

获取处于登录状态的gpu节点,以及每个gpu节点中空闲的gpu卡数量;

基于每个gpu节点中空闲的gpu卡数量以及所述所需的gpu资源数量确定所述可用的gpu节点;

获取每个可用的gpu节点中已使用的gpu卡的数量。

可选地,所述第二确定单元430具体用于:

对所述权重值进行排序,得到排序结果;

基于所述排序结果以及所述所需的gpu资源数量确定所述分配结果;所述分配结果包括第一标识信息以及第二标识信息;其中,所述第一标识信息用于标识待分配给所述任务请求的目标gpu节点,所述第二标识信息用于标识待分配给所述任务请求的目标gpu卡。

可选地,所述分配单元440具体用于:

基于所述第一标识信息在所述可用的gpu节点中查找所述目标gpu节点;

基于所述第二标识信息在所述目标gpu节点中查找所述目标gpu卡,并将所述目标gpu卡分配给所述任务请求。

可选地,所述资源分配装置还包括:

第一更新单元,用于基于所述目标gpu节点更新所述可用的gpu节点;

第二更新单元,用于基于所述目标gpu卡更新每个可用的gpu节点中已使用的gpu卡的数量。

可选地,所述资源分配装置还包括:

随机分配单元,用于当基于所述所需的gpu资源数量以及每个空闲的gpu卡对应的权重值未确定所述任务请求对应的分配结果时,随机为所述任务请求分配gpu卡。

请参见图6,图6是本申请另一实施例提供的一种资源分配设备的示意图。如图6所示,该实施例的资源分配设备5包括:处理器50、存储器51以及存储在所述存储器51中并可在所述处理器50上运行的计算机可读指令52。所述处理器50执行所述计算机可读指令52时实现上述各个处理资源分配方法实施例中的步骤,例如图1所示的s101至s104。或者,所述处理器50执行所述计算机可读指令52时实现上述各实施例中各单元的功能,例如图5所示单元410至440功能。

示例性地,所述计算机可读指令52可以被分割成一个或多个单元,所述一个或者多个单元被存储在所述存储器51中,并由所述处理器50执行,以完成本申请。所述一个或多个单元可以是能够完成特定功能的一系列计算机可读指令段,该指令段用于描述所述计算机可读指令52在所述资源分配设备5中的执行过程。例如,所述计算机可读指令52可以被分割为获取单元、第一确定单元、第二确定单元以及分配单元,各单元具体功能如上所述。

所述资源分配设备可包括,但不仅限于,处理器50、存储器51。本领域技术人员可以理解,图6仅仅是资源分配设备5的示例,并不构成对资源分配设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述资源分配设备还可以包括输入输出终端、网络接入终端、总线等。

所称处理器50可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

所述存储器51可以是所述资源分配设备的内部存储单元,例如资源分配设备的硬盘或内存。所述存储器51也可以是所述资源分配设备的外部存储终端,例如该资源分配设备上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,所述存储器51还可以既包括资源分配设备的内部存储单元也包括外部存储终端。所述存储器51用于存储所述计算机可读指令以及所述终端所需的其他程序和数据。所述存储器51还可以用于暂时地存储已经输出或者将要输出的数据。

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

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