CN116089009A - 一种gpu资源管理方法、系统、设备和存储介质 - Google Patents
一种gpu资源管理方法、系统、设备和存储介质 Download PDFInfo
- Publication number
- CN116089009A CN116089009A CN202310049904.2A CN202310049904A CN116089009A CN 116089009 A CN116089009 A CN 116089009A CN 202310049904 A CN202310049904 A CN 202310049904A CN 116089009 A CN116089009 A CN 116089009A
- Authority
- CN
- China
- Prior art keywords
- gpu
- scheduling
- unidtgpu
- resources
- resource
- 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.)
- Pending
Links
- 238000007726 management method Methods 0.000 title claims abstract description 37
- 238000003860 storage Methods 0.000 title claims abstract description 7
- 238000000034 method Methods 0.000 claims abstract description 20
- 238000013468 resource allocation Methods 0.000 claims description 17
- 239000000872 buffer Substances 0.000 claims description 12
- 239000003550 marker Substances 0.000 claims description 3
- 238000012544 monitoring process Methods 0.000 claims description 3
- 239000003795 chemical substances by application Substances 0.000 description 10
- 238000004364 calculation method Methods 0.000 description 6
- 239000000284 extract Substances 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 4
- 238000009826 distribution Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000002955 isolation Methods 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004140 cleaning Methods 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Images
Classifications
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种适配管理多类型GPU资源的GPU资源管理方法、系统、设备和存储介质。一种GPU资源管理方法,该方法包括:在Kubernetes集群中部署Unidt GPU CRDs定制组件和调度组件,在Kubernetes集群中每个节点部署GPU设备插件组件;响应容器组Pod的GPU资源需求;以节点调度方式和GPU资源调度方式相结合的策略对容器组Pod的GPU资源需求进行调度,将容器组Pod调度到节点;在容器组Pod中分配GPU资源。本发明实现以通用框架和统一的核心流程对不同类型的GPU资源的管理。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种GPU资源管理方法、系统、设备和存储介质。
背景技术
Kubernetes是容器集群管理系统,用于自动部署、扩展和管理容器化应用程序,基于Kubernetes的Device Plugin机制,Kubernetes可调度在节点上暴露出来的Nvidia GPU、AMD GPU等GPU资源,用户可通过指定nvidia.com/gpu、amd.com/gpu等标记来使用这些实体GPU设备。Kubernetes管理分配这些实体GPU设备,这属于整卡分配的场景。随着技术的发展,GPU资源的使用方案越来越丰富,除上述整卡分配场景外,在工业界还涌现出了诸如vGPU、qGPU、cGPU、vCUDA、rCUDA、gpushare等共享、隔离和远端转发方案,每套方案都有自己独立的部署和使用逻辑。
现有技术中,基于传统的Kubernetes Device Plugin技术架构,调度逻辑只是简单的GPU资源标记数量的加减,既不能体现GPU资源的分配情况,也不能同时支持上述的整卡GPU、vGPU、qGPU、cGPU、vCUDA、rCUDA、gpushare等诸多类型的GPU方案的管理分配。若引入并使用多种GPU管理方案,对Kubernetes系统自身而言,会导致整个架构、运维复杂的上升。
发明内容
基于以上背景,本发明的目的在于提供一种适配管理多类型GPU资源的GPU资源管理方法,解决背景技术中所述的问题。
本发明的另一目的在于提供一种适配管理多类型GPU资源的GPU资源管理系统、设备和存储介质。
为了实现上述发明目的,本发明提供以下技术方案:
一种GPU资源管理方法,该方法包括:
在Kubernetes集群中部署Unidt GPU CRDs定制组件和调度组件,在Kubernetes集群中每个节点部署GPU设备插件组件;其中,所述Unidt GPU CRDs定制组件包括:用于对应Kubernetes集群中可使用的GPU资源的UnidtGPU对象、用于描述容器组Pod的GPU资源需求的UnidtGPUClaim对象、以及用于动态模式创建UnidtGPU对象的UnidtGPUClass对象;所述调度组件包括:用于预选优选及绑定GPU资源的Kubernetes扩展调度器、用于管控UnidtGPU CRDs定制组件的控制器、以及用于向Kubernetes集群和GPU资源提供分配缓存及GPU资源调度的缓存器;
响应容器组Pod的GPU资源需求;
以节点调度方式和GPU资源调度方式相结合的策略对容器组Pod的GPU资源需求进行调度,将容器组Pod调度到节点;
在容器组Pod中分配GPU资源。
作为优选,所述响应容器组Pod的GPU资源需求,包括:
以用户模式或动态模式创建UnidtGPU对象并通过控制器绑定UnidtGPU对象和UnidtGPUClaim对象。
作为优选,所述以用户模式创建UnidtGPU对象并通过控制器绑定UnidtGPU对象和UnidtGPUClaim对象包括:
在Kubernetes集群中预先创建UnidtGPU对象;
创建UnidtGPUClaim对象描述拟申领的GPU资源,通过控制器绑定UnidtGPU对象和UnidtGPUClaim对象;
在创建容器组Pod时指定UnidtGPUClaim对象。
作为优选,所述以动态模式创建UnidtGPU对象并通过控制器绑定UnidtGPU对象和UnidtGPUClaim对象包括:
创建UnidtGPUClass对象并指定egpuClassName,所述egpuClassName用于在创建容器组Pod时作为标记物而指定具有其的UnidtGPUClaim对象;
通过Kubernetes扩展调度器将节点更新到UnidtGPUClaim对象;
通过控制器根据UnidtGPUClaim对象创建初始状态为待定的UnidtGPU对象并等待UnidtGPU对象的状态更新;
通过部署于节点的GPU设备插件组件监测UnidtGPU对象的创建,根据UnidtGPU对象创建实际的GPU设备,在实际的GPU设备创建成功后将UnidtGPU对象的状态更新为可用;
通过控制器绑定UnidtGPU对象和UnidtGPUClaim对象。
作为优选,所述节点调度方式的策略包括:
Kubernetes扩展调度器在预选阶段遍历每个节点找到最合适的GPU资源进行调度,在优选阶段根据GPU资源分配率的加权平均进行打分,根据打分结果形成Binpack规则和Spread规则;
所述Binpack规则为:GPU资源分配率越高则打分越高,将容器组Pod集中调度到同一个节点;
所述Spread规则为:GPU资源分配率越低则打分越高,将容器组Pod分散调度到各个节点。
作为优选,所述GPU资源调度方式的策略包括:
Kubernetes扩展调度器在选定节点后为容器组Pod中每个容器选择和分配该节点上的GPU资源,根据GPU资源装箱率的加权平均进行打分,在满足容器资源需求的前置条件下,根据打分结果形成Binpack规则和Spread规则;
所述Binpack规则为:优先选择GPU资源装箱率高的GPU资源,将容器集中调度到同一GPU资源上;
所述Spread规则为:优先选择GPU资源装箱率低的GPU资源,将容器分散调度到各个GPU资源上。
作为优选,该方法还包括:
根据命名规范定义多种类型的GPU资源,所述命名规范包括以供给方式划分的GPU资源类型、GPU核心资源和GPU内存资源。
一种GPU资源管理系统,包括:
部署模块,用于在Kubernetes集群中部署Unidt GPU CRDs定制组件和调度组件,在Kubernetes集群中每个节点部署GPU设备插件组件;其中,所述Unidt GPU CRDs定制组件包括:用于对应Kubernetes集群中可使用的GPU资源的UnidtGPU对象、用于描述容器组Pod的GPU资源需求的UnidtGPUClaim对象、以及用于动态模式创建UnidtGPU对象的UnidtGPUClass对象;所述调度组件包括:用于预选优选及绑定GPU资源的Kubernetes扩展调度器、用于管控Unidt GPU CRDs定制组件的控制器、以及用于向Kubernetes集群和GPU资源提供分配缓存及GPU资源调度的缓存器;
申请模块,用于响应容器组Pod的GPU资源需求创建GPU资源申请;
调度模块,用于以节点调度方式和GPU资源调度方式相结合的策略对容器组Pod的GPU资源需求进行调度,将容器组Pod调度到节点;
分配模块,用于在容器组Pod中分配GPU资源。
一种GPU资源管理设备,包括:
至少一个处理器;以及,
至少一个存储器;
其中,所述存储器中存储有计算机可执行程序,当由所述处理器执行所述计算机可执行程序时,执行如上所述的GPU资源管理方法。
一种存储介质,存储有计算机可执行指令,所述计算机可执行指令在被处理器执行时用于实现如上所述的GPU资源管理方法。
与现有技术相比,本发明具有以下优点:
本发明的一种GPU资源管理方法,实现以通用框架和统一的核心流程对不同类型的GPU资源的管理,适配管理多类型的GPU资源,基于CRD方式在Kubernetes集群中管理调度GPU资源,既能支持GPU资源管理和使用分离,并且能支持多种不同的GPU资源供给方案,如整卡GPU、vGPU、qGPU、cGPU、vCUDA、rCUDA、gpushare等。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1是本发明实施例中GPUPlugin机制流程示意图;
图2是本发明实施例中GPU资源分配流程示意图;
图3是本发明实施例中GPU资源生命周期管理流程图;
图4是本发明实施例中GPU动态模式创建流程图。
具体实施方式
下面通过具体实施例,并结合附图,对本发明的技术方案作进一步的具体说明。应当理解,本发明的实施并不局限于下面的实施例,对本发明所做的任何形式上的变通和/或改变都将落入本发明保护范围。
在本发明中,若非特指,所有的份、百分比均为重量单位,所采用的设备和原料等均可从市场购得或是本领域常用的。下述实施例中的方法,如无特别说明,均为本领域的常规方法。下述实施例中的部件或设备如无特别说明,均为通用标准件或本领域技术人员知晓的部件,其结构和原理都为本技术人员均可通过技术手册得知或通过常规实验方法获知。
本发明的实施例公开了一种GPU资源管理方法,该方法包括:
在Kubernetes集群中部署Unidt GPU CRDs定制组件和调度组件,在Kubernetes集群中每个节点部署GPU设备插件组件;其中,Unidt GPU CRDs定制组件包括:用于对应Kubernetes集群中可使用的GPU资源的UnidtGPU对象、用于描述容器组Pod的GPU资源需求的UnidtGPUClaim对象、以及用于动态模式创建UnidtGPU对象的UnidtGPUClass对象;所述调度组件包括:用于预选优选及绑定GPU资源的Kubernetes扩展调度器、用于管控UnidtGPU CRDs定制组件的控制器、以及用于向Kubernetes集群和GPU资源提供分配缓存及GPU资源调度的缓存器;
响应容器组Pod的GPU资源需求;
以节点调度方式和GPU资源调度方式相结合的策略对容器组Pod的GPU资源需求进行调度,将容器组Pod调度到节点;
在容器组Pod中分配GPU资源。
该方法实现以通用框架和统一的核心流程对不同类型的GPU资源的管理,基于CRD方式在Kubernetes集群中管理调度GPU资源,既能支持GPU资源管理和使用分离,并且能支持多种不同的GPU资源供给方案,如整卡GPU、vGPU、qGPU、cGPU、vCUDA、rCUDA、gpushare等。
本实施例中,响应容器组Pod的GPU资源需求,包括:以用户模式或动态模式创建UnidtGPU对象并通过控制器绑定UnidtGPU对象和UnidtGPUClaim对象。
具体地,以用户模式创建UnidtGPU对象并通过控制器绑定UnidtGPU对象和UnidtGPUClaim对象包括:在Kubernetes集群中预先创建UnidtGPU对象;创建UnidtGPUClaim对象描述拟申领的GPU资源,通过控制器绑定UnidtGPU对象和UnidtGPUClaim对象;在创建容器组Pod时指定UnidtGPUClaim对象。
具体地,以动态模式创建UnidtGPU对象并通过控制器绑定UnidtGPU对象和UnidtGPUClaim对象包括:创建UnidtGPUClass对象并指定egpuClassName,所述egpuClassName用于在创建容器组Pod时作为标记物而指定具有其的UnidtGPUClaim对象;通过Kubernetes扩展调度器将节点更新到UnidtGPUClaim对象;通过控制器根据UnidtGPUClaim对象创建初始状态为待定的UnidtGPU对象并等待UnidtGPU对象的状态更新;通过部署于节点的GPU设备插件组件监测UnidtGPU对象的创建,根据UnidtGPU对象创建实际的GPU设备,在实际的GPU设备创建成功后将UnidtGPU对象的状态更新为可用;通过控制器绑定UnidtGPU对象和UnidtGPUClaim对象。
本实施例中,节点调度方式的策略包括:Kubernetes扩展调度器在预选阶段遍历每个节点找到最合适的GPU资源进行调度,在优选阶段根据GPU资源分配率的加权平均进行打分,根据打分结果形成Binpack规则和Spread规则;Binpack规则为:GPU资源分配率越高则打分越高,将容器组Pod集中调度到同一个节点;Spread规则为:GPU资源分配率越低则打分越高,将容器组Pod分散调度到各个节点。
本实施例中,GPU资源调度方式的策略包括:Kubernetes扩展调度器在选定节点后为容器组Pod中每个容器选择和分配该节点上的GPU资源,根据GPU资源装箱率的加权平均进行打分,在满足容器资源需求的前置条件下,根据打分结果形成Binpack规则和Spread规则;Binpack规则为:优先选择GPU资源装箱率高的GPU资源,将容器集中调度到同一GPU资源上;Spread规则为:优先选择GPU资源装箱率低的GPU资源,将容器分散调度到各个GPU资源上。
本实施例中,该GPU资源管理方法还包括:根据命名规范定义多种类型的GPU资源,命名规范包括以供给方式划分的GPU资源类型、GPU核心资源和GPU内存资源。
以下结合附图对本发明的实施例做出进一步详细说明,在下面的详细说明中,为便于解释,阐述了许多具体的细节以提供对本发明的实施例的全面理解。
该GPU资源管理方法基于CRD方式在Kubernetes集群中管理调度GPU资源,主要包括两个部分:Unidt GPU CRDs定制组件和Unidt GPU Framework。
Unidt GPU CRDs定制组件包括UnidtGPU对象、UnidtGPUClaim对象和UnidtGPUClass对象。UnidtGPU对象用于对应Kubernetes集群中可使用的GPU资源的,其可以对应一个物理GPU设备、虚拟GPU设备、远端GPU设备。UnidtGPUClaim对象用于描述容器组Pod的GPU资源需求,即描述容器组Pod具体的GPU资源需求,如核心算力以及显存。UnidtGPUClass对象用于动态模式创建UnidtGPU对象。
Unidt GPU Framework是一种基于多类型GPU资源相似之处构建的通用框架,包括资源定义、资源申请、资源调度和资源分配,以下分别详细阐述。
1、资源定义
确定GPU资源的命名规范为:
<gpu_provisioner>.provisioner.unidtgpu.io/<gpu_resource_name>
其中,gpu_provisioner是指具体GPU供给方式,如vgpu、qgpu、cgpu、gpushare、vcuda、rcuda等。gpu_resource_name是指GPU包含的资源,包括核心(gpu-core)和显存(gpu-memory)。gpu-core的数值为整数,代表算力百分比,如1代表1%的整卡算力,100代表一张整卡,多张整卡设置为100的倍数。gpu-memory的数值为整数,单位GB,代表单位显存数。
2、资源申请
用户通过CRD方式使用GPU资源,具体为,首先创建UnidtGPUClaim对象,描述对GPU资源的申领,其次在创建容器组Pod时通过以下方式引用UnidtGPUClaim:控制器unidt-gpu-controller会将UnidtGPUClaim对象绑定到可用的UnidtGPU对象。
当然,UnidtGPU对象还可以通过UnidtGPUClass对象以动态模式创建出来,系统会通过UnidtGPUClass对象动态将设备创建出来,并创建对应UnidtGPU对象。控制器unidt-gpu-controller会将UnidtGPUClaim绑定到该UnidtGPU上。
上述内容在后文中会进行详细说明。
3、资源调度
现有的GPU方案,比如qGPU支持单个容器的百分比算力及显存MB级调度,同时支持分配单卡或者多卡,满足业务同时使用GPU共享及整卡独占的场景。GPU共享与独占的统一方案帮助客户提升了资源分配效率,但也同时带来了因切卡产生碎片导致无法分配整卡资源的挑战,这会在集群层面造成一定的资源浪费。为了解决该资源碎片问题,为用户提供更好、更细粒度的调度能力,该方法引入Kubernetes扩展调度器对使用了GPU资源的容器组Pod进行调度,并设计了两层调度方式,分别为节点调度方式和GPU资源调度方式。
节点调度方式的策略包括:
Kubernetes扩展调度器在预选阶段遍历每个节点找到最合适的GPU资源进行调度,在优选阶段根据gpu-core算力及gpu-memory显存两个资源分配率的加权平均进行打分,考虑到显存绝对隔离,而算力可以共享,把显存权重设为0.8,算力权重设为0.2,根据打分结果形成Binpack规则和Spread规则;Binpack规则为:GPU资源分配率越高则打分越高,将容器组Pod集中调度到同一个节点;Spread规则为:GPU资源分配率越低则打分越高,将容器组Pod分散调度到各个节点。
GPU资源调度方式的策略包括:Kubernetes扩展调度器在选定节点后为容器组Pod中每个容器选择和分配该节点上的GPU卡资源,通过计算每张GPU卡的gpu-core算力及gpu-memory显存加权平均的资源装箱率进行打分,来选择最优的GPU卡进行分配。在满足容器资源需求的前置条件下,根据打分结果形成Binpack规则和Spread规则;Binpack规则为:优先选择GPU资源装箱率高的GPU资源,将容器集中调度到同一GPU资源上;Spread规则为:优先选择GPU资源装箱率低的GPU资源,将容器分散调度到各个GPU资源上。
根据不同的业务场景及需求,执行不同的推荐规则,其效果如表1所示。
表1业务场景及需求对应调度方式规则及效果表
4、资源分配
如图1所示,本方案基于Kubernetes Device Plugin机制引入新的组件unidt-gpu-device-plugin来负责节点上多种GPU资源生命周期管理。unidt-gpu-device-plugin利用GPUPlugin机制,会将每种GPU方案注册为一个插件,每个插件里可以注册多种GPU资源(包括核心算力及显存等)。每种GPU资源都会对应到一个Kubernetes Device Plugin,被注册到kubelet中。
Unidt GPU Framework框架主要关注三个函数:ListAndWatch、Allocate、PrestartContainer,分别对应资源上报,设备注册和资源分配。
资源上报是指,GPUPlugin通过ListAndWatch接口与kubelet通信,上报GPU资源。每种插件都需要实现各自资源的统计接口,框架调用此接口进行汇总上报。
设备注册是指,容器在分配资源时会调用GPUPlugin Allocate,GPUPlugin会在这里将各插件需要挂载的设备返回给kubelet,各GPU卡厂商所需的驱动设备也会在这里一并挂载。
资源分配是指,如图2所示,GPUPlugin的PreStartContainer是主要入口,执行GPU设备的创建、分配、挂载操作。Unidt GPU Framework框架定义的主要流程如下:
a获取所分配容器;
由于Kubernetes Device Plugin的PreStartContainer接口并没有传入Pod和容器信息,所以采用podresources接口通过device id获取信息,这就要求本地资源在上报时device id是唯一的。获取到Pod后,需查看有无调度分配GPU,没有的话报错返回;
b获取GPU分配信息;
从约定的参数中提取所分配到GPU ID,这个标识是容器级别的。也即一个容器会分配一个或以上GPU,从容器resources中提取所申请GPU资源信息;
c创建挂载设备;
获取到GPU分配信息后,会调用各插件定义的设备创建接口,将底层设备创建并挂载给容器;
d持久化分配结果
容器和设备的分配信息会存储到本地,用于GC清理。
以上分别阐述了Unidt GPU CRDs定制组件和Unidt GPU Framework框架的详细内容,下面详细说明两者之间的交互机理。
如图3所示,Unidt GPU Framework会利用Unidt GPU CRDs进行GPU资源生命周期的管理,包括GPU资源的创建、分配、状态同步等。其涉及到的关键组件如下:三个CRD,即UnidtGPU对象、UnidtGPUClaim对象和UnidtGPUClass对象;三个调度组件,即用于预选优选及绑定GPU资源的Kubernetes扩展调度器unidt-gpu-scheduler、用于管控Unidt GPU CRDs定制组件的控制器unidt-gpu-controller、以及用于向Kubernetes集群和GPU资源提供分配缓存及GPU资源调度的缓存器unidt-gpu-cache;节点侧组件GPU设备插件组件unidt-gpu-agent,提供框架对Device Plugin的封装,以及各Plugin的注册和分配;各种GPU方案plugin,如用于qGPU的实现的qgpu-plugin、用于gpushare的实现的gpushare-plugin、用于rGPU的实现rgpu-plugin、用于cGPU的实现cgpu-plugin。
下面分别基于用户模式创建UnidtGPU对象和动态模式创建UnidtGPU对象两种情况阐述Unidt GPU CRDs定制组件和Unidt GPU Framework框架的交互机理。
用户可预先在集群中创建UnidtGPU,并通过创建UnidtGPUClaim绑定到具体UnidtGPU,在创建Pod时指定UnidtGPUClaim完成对GPU的申领。
创建:unidt-gpu-controller会监听UnidtGPU CRD的创建过程,提取Capacity的资源需求,在内部通过unidt-gpu-cache进行调度决策。调度分为节点与GPU卡级别,策略支持binpack/spread,这些参数在组件启动时指定。集群可调度的GPU资源在节点unidt-gpu-agent启动时扫描上报,根据集群中已申请资源计算,缓存到unidt-gpu-cache中,用于调度使用。调度完成后,UnidtGPU会与节点进行绑定,更新NodeName字段。节点上unidt-gpu-agent会监听绑定到本节点的UnidtGPU CRD创建,完成资源设备创建过程。unidt-gpu-agent提取CRD中的GPU资源,选定一个GPUPlugin创建设备。设备创建完毕后,会将设备信息更新到UnidtGPU中,CRD状态也随之变为Available。
绑定:Pod需要申领UnidtGPU后才能使用UnidtGPU资源。首先创建UnidtGPUClaim,描述想要申领的资源值(如gpu-core或gpu-memory)。unidt-gpu-controller监听ElasticGPUClaim创建,提取requests找到集群中符合要求到UnidtGPU。如果找到,则更新UnidtGPU ClaimRef指向绑定的UnidtGPUClaim,并将UnidtGPU和UnidtGPUClaim状态更新为Bound。
调度:用户创建Pod时在annotation中指定UnidtGPUClaim,unidt-gpu-webhook会监听带有该annotation的Pod创建,提取UnidtGPUClaim CRD中的GPU资源值,更新到Podcontainers中。unidt-gpu-scheduler配置了对这些资源的管理,kube-scheduler会将符合要求的Pod转发到unidt-gpu-scheduler进行调度。在预选阶段,unidt-gpu-scheduler提取Pod关联UnidtGPU的NodeName进行返回。若其他资源也符合要求,kube-scheduler会调用unidt-gpu-scheduler Bind进行节点绑定。
分配:Pod调度到节点后,因为unidt-gpu-agent注册了资源设备,kubelet会通过sock rpc调用unidt-gpu-agent。在PreStartContainer中,unidt-gpu-agent通过podresources定位到所调用container,判断是否需要创建设备。当发现已指定ElasticGPU时,unidt-gpu-agent会调用GPUPlugin Mount接口,进行挂载操作。
如图4所示,UnidtGPU支持动态模式创建,在Pod创建时被动态创建出来。此时引入UnidtGPUClass,用于描述创建时的元数据。用户需要在集群中首先创建UnidtGPUClass,描述创建时所需的资源插件信息。用户在创建UnidtGPUClaim需指定egpuClassName。
调度:用户在创建Pod时指定带有egpuClassName的UnidtGPUClaim,unidt-gpu-webhook监听创建提取GPU资源更新到Pod container。unidt-gpu-scheduler被kube-scheduler调用,在预选/优选阶段通过所分配GPU资源进行调度决策,在Bind阶段将节点更新到UnidtGPUClaim的annotation。
创建:在完成调度后,unidt-gpu-controller根据UnidtGPUClaim创建UnidtGPU,创建后UnidtGPU的statusstate为Pening,unidt-gpu-controller需等待status变成Available。节点上的unidt-gpu-agent watch到UnidtGPU后,根据UnidtGPU创建实际的GPU设备,创建成功后将UnidtGPU的status更新为Available。
绑定:UnidtGPU Available后,unidt-gpu-controller将UnidtGPU和UnidtGPUClaim进行绑定。
启动容器:Kubelet在启动容器前会调用unidt-gpu-agent的PreStartContainer,PreStartContainer会等待UnidtGPU和UnidtGPUClaim完成绑定,在完成绑定后最终成功创建容器。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
Claims (10)
1.一种GPU资源管理方法,其特征在于:该方法包括:
在Kubernetes集群中部署Unidt GPU CRDs定制组件和调度组件,在Kubernetes集群中每个节点部署GPU设备插件组件;其中,所述Unidt GPU CRDs定制组件包括:用于对应Kubernetes集群中可使用的GPU资源的UnidtGPU对象、用于描述容器组Pod的GPU资源需求的UnidtGPUClaim对象、以及用于动态模式创建UnidtGPU对象的UnidtGPUClass对象;所述调度组件包括:用于预选优选及绑定GPU资源的Kubernetes扩展调度器、用于管控UnidtGPU CRDs定制组件的控制器、以及用于向Kubernetes集群和GPU资源提供分配缓存及GPU资源调度的缓存器;
响应容器组Pod的GPU资源需求;
以节点调度方式和GPU资源调度方式相结合的策略对容器组Pod的GPU资源需求进行调度,将容器组Pod调度到节点;
在容器组Pod中分配GPU资源。
2.根据权利要求1所述的一种GPU资源管理方法,其特征在于:所述响应容器组Pod的GPU资源需求,包括:
以用户模式或动态模式创建UnidtGPU对象并通过控制器绑定UnidtGPU对象和UnidtGPUClaim对象。
3.根据权利要求2所述的一种GPU资源管理方法,其特征在于:所述以用户模式创建UnidtGPU对象并通过控制器绑定UnidtGPU对象和UnidtGPUClaim对象包括:
在Kubernetes集群中预先创建UnidtGPU对象;
创建UnidtGPUClaim对象描述拟申领的GPU资源,通过控制器绑定UnidtGPU对象和UnidtGPUClaim对象;
在创建容器组Pod时指定UnidtGPUClaim对象。
4.根据权利要求2所述的一种GPU资源管理方法,其特征在于:所述以动态模式创建UnidtGPU对象并通过控制器绑定UnidtGPU对象和UnidtGPUClaim对象包括:
创建UnidtGPUClass对象并指定egpuClassName,所述egpuClassName用于在创建容器组Pod时作为标记物而指定具有其的UnidtGPUClaim对象;
通过Kubernetes扩展调度器将节点更新到UnidtGPUClaim对象;
通过控制器根据UnidtGPUClaim对象创建初始状态为待定的UnidtGPU对象并等待UnidtGPU对象的状态更新;
通过部署于节点的GPU设备插件组件监测UnidtGPU对象的创建,根据UnidtGPU对象创建实际的GPU设备,在实际的GPU设备创建成功后将UnidtGPU对象的状态更新为可用;
通过控制器绑定UnidtGPU对象和UnidtGPUClaim对象。
5.根据权利要求1所述的一种GPU资源管理方法,其特征在于:所述节点调度方式的策略包括:
Kubernetes扩展调度器在预选阶段遍历每个节点找到最合适的GPU资源进行调度,在优选阶段根据GPU资源分配率的加权平均进行打分,根据打分结果形成Binpack规则和Spread规则;
所述Binpack规则为:GPU资源分配率越高则打分越高,将容器组Pod集中调度到同一个节点;
所述Spread规则为:GPU资源分配率越低则打分越高,将容器组Pod分散调度到各个节点。
6.根据权利要求1所述的一种GPU资源管理方法,其特征在于:所述GPU资源调度方式的策略包括:
Kubernetes扩展调度器在选定节点后为容器组Pod中每个容器选择和分配该节点上的GPU资源,根据GPU资源装箱率的加权平均进行打分,在满足容器资源需求的前置条件下,根据打分结果形成Binpack规则和Spread规则;
所述Binpack规则为:优先选择GPU资源装箱率高的GPU资源,将容器集中调度到同一GPU资源上;
所述Spread规则为:优先选择GPU资源装箱率低的GPU资源,将容器分散调度到各个GPU资源上。
7.根据权利要求1所述的一种GPU资源管理方法,其特征在于:该方法还包括:
根据命名规范定义多种类型的GPU资源,所述命名规范包括以供给方式划分的GPU资源类型、GPU核心资源和GPU内存资源。
8.一种GPU资源管理系统,其特征在于:该系统包括:
部署模块,用于在Kubernetes集群中部署Unidt GPU CRDs定制组件和调度组件,在Kubernetes集群中每个节点部署GPU设备插件组件;其中,所述Unidt GPU CRDs定制组件包括:用于对应Kubernetes集群中可使用的GPU资源的UnidtGPU对象、用于描述容器组Pod的GPU资源需求的UnidtGPUClaim对象、以及用于动态模式创建UnidtGPU对象的UnidtGPUClass对象;所述调度组件包括:用于预选优选及绑定GPU资源的Kubernetes扩展调度器、用于管控Unidt GPU CRDs定制组件的控制器、以及用于向Kubernetes集群和GPU资源提供分配缓存及GPU资源调度的缓存器;
申请模块,用于响应容器组Pod的GPU资源需求创建GPU资源申请;
调度模块,用于以节点调度方式和GPU资源调度方式相结合的策略对容器组Pod的GPU资源需求进行调度,将容器组Pod调度到节点;
分配模块,用于在容器组Pod中分配GPU资源。
9.一种GPU资源管理设备,包括至少一个处理器和至少一个存储器,其特征在于:所述存储器中存储有计算机可执行程序,当由所述处理器执行所述计算机可执行程序时,执行如权利要求1-7任一所述的GPU资源管理方法。
10.一种存储介质,存储有计算机可执行指令,其特征在于:所述计算机可执行指令在被处理器执行时用于实现如权利要求1-7任一所述的GPU资源管理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310049904.2A CN116089009A (zh) | 2023-02-01 | 2023-02-01 | 一种gpu资源管理方法、系统、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310049904.2A CN116089009A (zh) | 2023-02-01 | 2023-02-01 | 一种gpu资源管理方法、系统、设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116089009A true CN116089009A (zh) | 2023-05-09 |
Family
ID=86211695
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310049904.2A Pending CN116089009A (zh) | 2023-02-01 | 2023-02-01 | 一种gpu资源管理方法、系统、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116089009A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116560861A (zh) * | 2023-07-11 | 2023-08-08 | 苏州浪潮智能科技有限公司 | 资源分配方法、装置、电子设备、存储介质及节点 |
CN116820687A (zh) * | 2023-08-29 | 2023-09-29 | 银河麒麟软件(长沙)有限公司 | 基于kubelet的NUMA架构资源分配方法及系统 |
CN117785446A (zh) * | 2023-12-18 | 2024-03-29 | 慧之安信息技术股份有限公司 | 基于弹性资源分配策略的K8s存储资源分配方法和系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111737003A (zh) * | 2020-06-24 | 2020-10-02 | 重庆紫光华山智安科技有限公司 | Pod均衡调度方法、装置、主节点及存储介质 |
CN113835897A (zh) * | 2021-09-29 | 2021-12-24 | 北京云歌科技有限责任公司 | 一种在分布式计算集群Kubernetes上对GPU资源进行分配使用的方法 |
US20220027217A1 (en) * | 2020-07-24 | 2022-01-27 | Red Hat, Inc. | Extending the kubernetes api in-process |
CN114706690A (zh) * | 2022-06-06 | 2022-07-05 | 浪潮通信技术有限公司 | 一种Kubernetes容器共享GPU方法及系统 |
CN114741207A (zh) * | 2022-06-10 | 2022-07-12 | 之江实验室 | 一种基于多维度组合并行的gpu资源调度方法和系统 |
CN114840344A (zh) * | 2022-05-19 | 2022-08-02 | 银河麒麟软件(长沙)有限公司 | 基于kubernetes的GPU设备资源分配方法及系统 |
-
2023
- 2023-02-01 CN CN202310049904.2A patent/CN116089009A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111737003A (zh) * | 2020-06-24 | 2020-10-02 | 重庆紫光华山智安科技有限公司 | Pod均衡调度方法、装置、主节点及存储介质 |
US20220027217A1 (en) * | 2020-07-24 | 2022-01-27 | Red Hat, Inc. | Extending the kubernetes api in-process |
CN113835897A (zh) * | 2021-09-29 | 2021-12-24 | 北京云歌科技有限责任公司 | 一种在分布式计算集群Kubernetes上对GPU资源进行分配使用的方法 |
CN114840344A (zh) * | 2022-05-19 | 2022-08-02 | 银河麒麟软件(长沙)有限公司 | 基于kubernetes的GPU设备资源分配方法及系统 |
CN114706690A (zh) * | 2022-06-06 | 2022-07-05 | 浪潮通信技术有限公司 | 一种Kubernetes容器共享GPU方法及系统 |
CN114741207A (zh) * | 2022-06-10 | 2022-07-12 | 之江实验室 | 一种基于多维度组合并行的gpu资源调度方法和系统 |
Non-Patent Citations (10)
Title |
---|
GHOSTWRITTEN: "《Kubernetes【资源管理】7–GPU管理与Device Plugin机制》", Retrieved from the Internet <URL:https://blog.51cto.com/ghostwritten/5345076> * |
XIAOXUBEII: "《Elastic GPU - Using CRDs to Manage GPU Resources in Kubernetes》", Retrieved from the Internet <URL:https://github.com/elastic-ai/elastic-gpu> * |
XIAOXUBEII: "elastic-ai/elastic-gpu-scheduler", Retrieved from the Internet <URL:https://github.com/elastic-ai/elastic-gpu-scheduler/blob/ master/pkg/controller/controller.go> * |
ZHIAOO: "《kubernetes-云原生技术进阶 第20讲:GPU管理和Device Plugin工作机制》", Retrieved from the Internet <URL:https://blog.csdn.net/u014073556/article/details/115308753> * |
大卫李的技术分享: "《Kubernetes CRD&Controller入门实践(附PPT)》", Retrieved from the Internet <URL:https://cloud.tencent.com/developer/article/1626873> * |
意琦行: "《Kubernetes教程(十四)---PV 从创建到挂载全流程详解》", Retrieved from the Internet <URL:https://www.lixueduan.com/posts/kubernetes/14-pv-dynamic-provision-process/> * |
胡伟煌: "《Kubernetes核心原理(二)之Controller Manager》", pages 141 - 146, Retrieved from the Internet <URL:https://blog.csdn.net/huwh_/article/details/75675761> * |
腾讯云原生: "《TKE qGPU 通过两层调度解决 GPU 资源碎片问题》", Retrieved from the Internet <URL:https://cloud.tencent.com/developer/article/2013197> * |
腾讯云原生: "《使用 Elastic GPU 管理 Kubernetes GPU 资源》", Retrieved from the Internet <URL:https://blog.csdn.net/yunxiao6/article/details/124290478> * |
阿里云云栖号: "《kubernetes pv-controller 解析》", Retrieved from the Internet <URL:https://segmentfault.com/a/1190000041202768> * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116560861A (zh) * | 2023-07-11 | 2023-08-08 | 苏州浪潮智能科技有限公司 | 资源分配方法、装置、电子设备、存储介质及节点 |
CN116560861B (zh) * | 2023-07-11 | 2023-09-29 | 苏州浪潮智能科技有限公司 | 资源分配方法、装置、电子设备、存储介质及节点 |
CN116820687A (zh) * | 2023-08-29 | 2023-09-29 | 银河麒麟软件(长沙)有限公司 | 基于kubelet的NUMA架构资源分配方法及系统 |
CN116820687B (zh) * | 2023-08-29 | 2023-12-05 | 银河麒麟软件(长沙)有限公司 | 基于kubelet的NUMA架构资源分配方法及系统 |
CN117785446A (zh) * | 2023-12-18 | 2024-03-29 | 慧之安信息技术股份有限公司 | 基于弹性资源分配策略的K8s存储资源分配方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116089009A (zh) | 一种gpu资源管理方法、系统、设备和存储介质 | |
CN111966500B (zh) | 资源调度方法、装置、电子设备及存储介质 | |
CN100407152C (zh) | 多策略资源调度的方法和系统 | |
CN106919445B (zh) | 一种在集群中并行调度容器的方法和装置 | |
US20160306680A1 (en) | Thread creation method, service request processing method, and related device | |
CN106033373A (zh) | 一种云计算平台中虚拟机资源调度方法和调度系统 | |
CN109213555A (zh) | 一种面向虚拟桌面云的资源动态调度方法 | |
CN110838939B (zh) | 一种基于轻量级容器的调度方法及边缘物联管理平台 | |
CN104679594B (zh) | 一种中间件分布式计算方法 | |
CN111309440B (zh) | 一种多类型gpu的管理调度的方法和设备 | |
CN105786603B (zh) | 一种基于分布式的高并发业务处理系统及方法 | |
CN111464659A (zh) | 节点的调度、节点的预选处理方法、装置、设备及介质 | |
WO2022002148A1 (zh) | 资源调度方法、资源调度系统及设备 | |
CN114090176A (zh) | 一种基于Kubernetes的容器调度方法 | |
CN111381957B (zh) | 面向分布式平台的服务实例精细化调度方法及系统 | |
CN103747107A (zh) | 一种兼容式云操作平台及其实现方法 | |
CN112463375A (zh) | 一种数据处理的方法和装置 | |
CN114356543A (zh) | 一种基于Kubernetes的多租户机器学习任务资源调度方法 | |
CN111274033A (zh) | 一种资源部署方法、装置、服务器以及存储介质 | |
CN113419846A (zh) | 资源配置方法和装置、电子设备及计算机可读存储介质 | |
CN114968601A (zh) | 一种按比例预留资源的ai训练作业的调度方法和调度系统 | |
CN114995975A (zh) | 一种Redis集群的调度方法和装置 | |
US20230289223A1 (en) | Task scheduling method, game engine, device and storage medium | |
CN109298949A (zh) | 一种分布式文件系统的资源调度系统 | |
CN111143059B (zh) | 改进的Kubernetes资源调度方法 |
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 |