一种GPU算力管理方法、介质、设备及系统转让专利

申请号 : CN202210572151.9

文献号 : CN114661482B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 罗宏智梅亮许春香罗天

申请人 : 成都索贝数码科技股份有限公司

摘要 :

本发明公开了一种GPU算力管理方法、介质、设备及系统,属于容器编排领域,包括流程:测量流程:设置测量流程用于测量所需GPU、CPU和内存资源,并将测量结果传递给Ray框架;资源分配和服务调度流程:在巡检任务负载情况和节点资源使用情况后,按照测量结果进行资源分配和服务调度,来满足任务执行需要。本发明可以大大提高资源利用率,使得几十种模型在共存情况下资源可以得到高效使用,以节省算力资源,并且实现任务消费吞吐量最大化。本发明可以提高资源利用率,节省算力资源,实现任务消费吞吐量最大化。

权利要求 :

1.一种GPU算力管理方法,其特征在于,使用K8S框架对纳管的计算节点的GPU、CPU和内存资源池化后,执行如下流程:测量流程:设置测量流程用于测量所需GPU、CPU和内存资源,在模型资源独占模式下,自动测量模型运行时的CPU、GPU、内存变化情况,得到模型处理效率随资源的不断增加而变化的曲线;模型的效率在资源增加到一定量时就不再提升,这时模型效率变化曲线会出现一个拐点,将这个拐点作为模型算力的测量结果参考依据;CPU、GPU、内存都会得到这样一个拐点值,都作为模型算力的测量结果参考依据;再结合资源独占模式下,计算系统资源使用率,以得到系统负载情况,来综合判断,取得一个资源的平衡值作为模型算力的测量结果,即系统认为是平衡模型效率和系统资源的最佳值,包括GPU、CPU、内存资源,并将测量结果传递给Ray框架;

资源分配和服务调度流程:在巡检任务负载情况和节点资源使用情况后,按照测量流程的测量结果进行资源分配和服务调度,来满足任务执行需要;

所述按照测量结果进行资源分配和服务调度,包括子流程:

Ray框架检查需要部署的智能能力模型在所述测量流程中所获取的算力测量值之后,设置弹性扩缩流程用于扩缩微服务;

所述弹性扩缩流程,包括子步骤:

S1,获取集群快照:平台资源管理主服务获取每个集群节点的GPU和CPU资源使用情况、模型信息,并统计各个类型任务的数量;

S2,缩服务:销毁空闲节点;

S3,扩服务:启动新的模型来执行排队中的任务;

在步骤S2中,包括子步骤:

S21,按照上次模型被使用的时间进行排序,对使用的模型进行排序;

S22,查看这些模型是否被销毁;

S23,当模型执行完任务后,释放它所占用的资源,模型状态由忙碌沦为空闲状态;根据模型是否是空闲状态,即没有做任务,且模型空闲时间是否超过预期值,来确定需要被终止的模型;对于相同类型的任务,保留满足当前任务的模型数量,剩余的模型都销毁掉;

在步骤S3中,包括子步骤:

S31,将要终止的模型销毁掉;

S32,对照排队中的任务类型获取能够启动的对应类型的模型,查看节点GPU显存或CPU资源剩余量,检查节点的GPU资源或CPU资源是否大于算力测量期间对该模型的测量值,来判断在该节点是否能够部署该模型;

S33,模型的分配:每个集群节点限制了最大实例数和最小实例数;判断模型的任务负载情况是否超过预期值,超过预期值则执行扩操作,否则不执行扩操作。

2.根据权利要求1所述的GPU算力管理方法,其特征在于,所述按照测量结果进行资源分配和服务调度,包括子流程:Ray框架检查需要部署的智能能力模型的算力测量值,将智能能力模型的算力测量值与任务代理进程的资源进行比较,如果任务代理进程的资源能够部署该智能能力模型,Ray框架就将该任务分配给有资源的任务代理进程来完成智能服务部署。

3.根据权利要求1所述的GPU算力管理方法,其特征在于,按照测量结果进行服务调度时,包括子步骤:如果智能能力模型是GPU模型,则根据GPU资源计算分数;如果智能能力模型是GPU模型但GPU资源不够时,则按照CPU模型去计算分数;如果智能能力模型是CPU模型,则根据CPU资源去计算分数。

4.一种可读存储介质,其特征在于,存储有计算机程序,该程序被处理器执行时实现如权利要求1 3任一所述的方法。

~

5.一种计算机设备,其特征在于,包括存储器、处理器及存储在存储器上并能在处理器上运行的计算机程序,处理器执行所述程序时实现如权利要求1 3任一所述的方法。

~

6.一种GPU算力管理系统,其特征在于,包括如权利要求5所述的计算机设备。

说明书 :

一种GPU算力管理方法、介质、设备及系统

技术领域

[0001] 本发明涉及容器编排领域,更为具体的,涉及一种GPU算力管理方法、介质、设备及系统。

背景技术

[0002] 近年来,人工智能发展迅猛,如何利用最低的算力来使得机器学习、深度学习相关应用以最高的性能运行一直是该领域内的一个重点难题。在各大企业实际运用中,算力最大化利用是企业不断在研究和突破的点。GPU硬件加速器是提供算力的关键,这几年GPU虽取得了长足的发展,但是算力资源还是较为昂贵。在企业环境中,GPU资源更是难以得到充分的利用。在企业实际应用中,通常将GPU资源池化、共享来提高资源利用率。但事实上当GPU资源被共享时,它们的利用率会很低,且很难准确的预估每一个应用需要的算力。现市面上Kubernetes(以下简称K8S)框架和Ray框架,都可以支持GPU资源的某种形式的共享,并支持资源动态扩缩,来提高算力利用。两者的动态扩缩有不同的扩缩规则、扩缩粒度,对其各自的控制都是合理的,但是这两种方式还是不能够很好的满足实际需求。对于一个提供智能服务的中台而言,希望的智能服务都涉及有限硬件资源GPU,所以扩缩时每一个智能能力服务应该分到哪一个机器上,也是很重要的一点。
[0003] 目前,智能中台中GPU算力资源很难得到有效利用,容易造成资源浪费的问题。

发明内容

[0004] 本发明的目的在于克服现有技术的不足,提供一种GPU算力管理方法、介质、设备及系统,可以提高资源利用率,节省算力资源,实现任务消费吞吐量最大化。
[0005] 本发明的目的是通过以下方案实现的:
[0006] 一种GPU算力管理方法,使用K8S框架对纳管的计算节点的GPU、CPU和内存资源池化后,执行流程:
[0007] 测量流程:设置测量流程用于测量所需GPU、CPU和内存资源,并将测量结果传递给Ray框架;
[0008] 资源分配和服务调度流程:在巡检任务负载情况和节点资源使用情况后,按照测量结果进行资源分配和服务调度,来满足任务执行需要。
[0009] 进一步地,所述按照测量结果进行资源分配和服务调度,包括子流程:
[0010] Ray框架检查需要部署的智能能力模型在所述测量流程中所获取的算力测量值之后,设置弹性扩缩流程用于扩缩微服务。
[0011] 进一步地,所述按照测量结果进行资源分配和服务调度,包括子流程:
[0012] Ray框架检查需要部署的智能能力模型的算力测量值,将智能能力模型的算力测量值与任务代理进程的资源进行比较,如果任务代理进程的资源能够部署该智能能力模型,Ray框架就将该任务分配给有资源的任务代理进程来完成智能服务部署。
[0013] 进一步地,所述弹性扩缩流程,包括子步骤:
[0014] S1,获取集群快照:平台资源管理主服务获取每个集群节点的GPU和CPU资源使用情况、模型信息,并统计各个类型任务的数量;
[0015] S2,缩服务:销毁空闲节点;
[0016] S3,扩服务:启动新的模型来执行排队中的任务。
[0017] 进一步地,在步骤S2中,包括子步骤:
[0018] S21,按照上次模型被使用的时间进行排序,对使用的模型进行排序;
[0019] S22,查看这些模型是否被销毁;
[0020] S23,当模型执行完任务后,释放它所占用的资源,模型状态由忙碌沦为空闲状态;根据模型是否是空闲状态,即没有做任务,且模型空闲时间是否超过预期值,来确定需要被终止的模型;对于相同类型的任务,保留满足当前任务的模型数量,剩余的模型都销毁掉;
[0021] 进一步地,在步骤S3中,包括子步骤:
[0022] S31,将要终止的模型销毁掉;
[0023] S32,对照排队中的任务类型获取能够启动的对应类型的模型,查看节点GPU显存或CPU资源剩余量,检查节点的GPU资源或CPU资源是否大于算力测量期间对该模型的测量值,来判断在该节点是否能够部署该模型;
[0024] S33,模型的分配:每个集群节点限制了最大实例数和最小实例数;判断模型的任务负载情况是否超过预期值,超过预期值则执行扩操作,否则不执行扩操作。
[0025] 进一步地,按照测量结果进行服务调度时,包括子步骤:如果智能能力模型是GPU模型,则根据GPU资源计算分数;如果智能能力模型是GPU模型但GPU资源不够时,则按照CPU模型去计算分数;如果智能能力模型是CPU模型,则根据CPU资源去计算分数。
[0026] 一种可读存储介质,存储有计算机程序,该程序被处理器执行时实现如上任一所述的方法。
[0027] 一种计算机设备,包括存储器、处理器及存储在存储器上并能在处理器上运行的计算机程序,处理器执行所述程序时实现如上任一所述的方法。
[0028] 一种GPU算力管理系统,包括如上所述的计算机设备。
[0029] 本发明的有益效果包括:
[0030] 本发明可以大大提高资源(GPU、CPU资源)利用率,使得几十种模型在共存情况下资源可以得到高效使用,以节省算力资源,并且实现任务消费吞吐量最大化。

附图说明

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

具体实施方式

[0033] 本说明书中所有实施例公开的所有特征,或隐含公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合和/或扩展、替换。
[0034] 术语解释
[0035] resource_manager:平台资源管理主服务,集中管理集群上所有节点的生命周期,并且提供集群原子能力服务的安装更新等功能接口。
[0036] resource_client:平台计算节点管理服务,主要负责管理当前节点下注册的所有智能能力以及智能能力的资源分配,同时通知资源情况给资源管理主服务。
[0037] DRF(Dominant Resource Fairnes)策略:优先选择资源消耗少的模型、优先选择资源多的节点。
[0038] 本发明的技术构思:
[0039] 在寻求解决背景中提出问题的过程中,本发明发现:K8S使用HPA(Horizontal PodAutoscaler)实现基于某类资源度量指标的利用率,如CPU利用率,来自动扩缩适用于扩缩对象的副本数量。水平自动扩缩由集群管理控制中心(controller manage)和度量指标API实现,集群管理控制中心的每个周期内,从度量指标API来获取资源度量值,计算副本数量。度量指标API包括资源度量指标和自定义度量指标。计算出副本数量之后,当需要缩容时,则根据K8S的缩容规则来选择目标副本;当需要扩容时,则根据K8S的调度规则调度到某一节点。集群管理控制中心在计算副本数量时,是线性增长。因为GPU共享资源的有限,且占用GPU的算力类型多样时,在各类别算力在负载都很高时,线性的增长可能会导致某一类型的算力占据了大部分GPU资源,而其它类型的算力希望扩容,但是因为资源不够而导致扩容失败。K8S的缩容规则虽然可以通过controller.kubernetes.io/pod‑deletion‑cost注解来指定终止哪一个副本,但是此方案为尽力而为,不能保证副本的删除顺序,不能优先删除占用资源更大的算力。频繁的更新注解值,会在API服务器上产生大量的副本更新操作,开销不小。K8S的副本调度规会对node进行过滤和打分,节点的打分不能够将GPU资源信息算进去,也就是不能指定副本调度到哪一个节点,并且使用节点的哪一张GPU卡。
[0040] Ray的自动伸缩方案分为细粒度的计算副本数量。集群中存在m个进程(worker),n个任务或者执行器(actor),则扩展n‑m个进程。这样的增长对有限的GPU共享资源来说,副本数量震荡的频率很大,不适合算力场景。Ray在管理CPU、GPU资源时的单位是1,是整数,也就是一张GPU卡只能运行一个算力,不能够做到GPU资源的共享,会产生浪费。
[0041] 基于上述实际技术问题的认识,本发明提出一种基于K8S和Ray的算力管理的解决方案,包括GPU算力管理方法、介质、设备及系统。在具体实施例中,例如:提供一种基于K8S和Ray的算力管理系统,结合了K8S和Ray两者的优点,并设置了更易用的扩缩规则。基于K8S和Ray框架,实现了多算法共享GPU和服务弹性扩缩。当模型注册进平台时,平台可以自动测量好每个模型需要的GPU、CPU、内存资源。再综合考虑智能能力调情况、智能能力使用的GPU资源,制定合适的扩缩原则,定期巡检任务负载情况和节点的显存使用情况,当达到扩缩要求后,根据扩缩原则自动精确的终止空闲或不可用的智能能力服务,将智能能力模型部署到合理的机器,使用分配的GPU卡,来执行累积任务。
[0042] 实施例中,运行本发明实施例的前提是使用K8S对纳管的计算节点的CPU、内存及GPU资源池化,用软件定义AI算力,对资源进行抽象和定义,以获得灵活调度GPU资源的能力。不管底层的机器是通过何种方式提供的(物理机或虚拟机),K8S都能对其进行池化,将资源进行细分,分配给某个容器。
[0043] 本发明实施例提供的智能平台算力管理过程可以分为三个阶段,分别是算力测量期、系统使用初期、弹性扩缩应用期。
[0044] 算力测量期:在模型注册到智能平台期间,平台就会自动对模型进行资源用量度量。在模型资源独占模式下,自动测量模型运行时的CPU、GPU、内存变化情况,得到模型处理效率随资源的不断增加而变化的曲线。通常模型的效率在资源增加到一定量时就不再提升,这时模型效率变化曲线会出现一个拐点,这个拐点就可作为模型算力的测量结果参考依据。CPU、GPU、内存都会得到这样一个拐点值,都可作为模型算力的测量结果参考依据。再结合资源独占模式下,计算系统资源使用率,以得到系统负载情况,来综合判断,取得一个资源的平衡值作为模型算力的测量结果,即系统认为是平衡模型效率和系统资源的最佳值,包括GPU、CPU、内存资源,如表1。将这个测量结果传递给资源分配框架Ray,Ray会记住每个智能能力模型所使用GPU、CPU、内存值,为后续服务调用、资源分配做提供基础,实现算力精细化管理。
[0045] 表1 模型算力测量示例
[0046]模型名称 CPU核数 内存/G 显存/G
人脸识别 4 7 2.5
OCR 2 4.5 2
... ... ... ...
[0047] 系统使用初期:可根据用户需求选择完成基线智能能力组合(每类智能能力分别部署1个),该基线智能能力组合能够支持单条以及复合任务的执行。
[0048] 用户确认需求后,就可以知道哪种智能任务需要部署哪种智能能力,根据任务类型,选择对应的智能能力,每类智能能力在系统使用初期只需部署1个,作为基线智能能力组合。任务、资源调度框架Ray会检查需要部署的智能能力的算力测量值,将智能能力的算力测量值与任务代理进程的资源进行比较,如果任务代理进程的资源足够部署该智能能力,Ray就将该任务分配给有资源的任务代理进程(ray_worker),完成智能服务部署。随着任务的数量增加,后续系统会自动巡检任务负载情况和节点资源使用情况,弹性扩缩智能服务,来满足任务执行需要。
[0049] 当任务逐步执行完成后,智能服务将释放占用的资源,空闲的智能服务将被慢慢销毁掉,直到恢复到系统基线智能能力组合状态。
[0050] 弹性扩缩应用期:系统运行期间,能够依据当前时刻某种类型的任务累积数量和各资源计算节点的资源剩余情况,来进行微服务的自动扩张。当任务逐步执行成功,累积的任务数减少到水准线以下,促使占用的资源逐渐释放,微服务进而自动收缩成初始化状态。微服务弹性扩缩整体工作流程如图1所示,包括如下步骤:
[0051] 步骤1、获取集群快照:resource_manager获取每个集群节点的GPU和CPU资源使用情况、模型信息,并统计各个类型任务的数量。
[0052] 步骤2、终止(销毁)空闲节点
[0053] (1)按照上次模型被使用的时间进行排序,可选的,使用LRU方法对使用的模型进行排序。LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。
[0054] (2)查看这些模型是否被销毁。
[0055] (3)当模型执行完任务后,会释放它所占用的资源,模型状态由忙碌沦为空闲状态。根据模型是否是空闲状态,即没有做任务,且模型空闲时间是否超过预期值,来确认可以被终止的模型。对于相同类型的任务,保留可以满足当前任务的模型数量,剩余的模型,都可以销毁掉。
[0056] 该步骤实现了缩服务,但缩服务最多缩至系统基线状态。需要说明的是,在系统使用初期,只有基线智能能力模型在运行,通常第一轮巡检不会销毁空闲的基线模型。
[0057] 步骤3、启动新的模型来执行排队中的任务
[0058] (1)将要终止的模型先销毁掉
[0059] (2)对照排队中的任务类型获取可以启动的对应类型的智能模型,查看节点GPU显存或CPU资源剩余量,检查是否足够满足模型本身显存需要,即节点的GPU资源或CPU资源是否大于算力测量期间对该模型的测量值,来判断在该节点是否可以部署该模型。
[0060] (3)模型的分配
[0061] 每个集群节点限制了最大实例数和最小实例数。
[0062] 判断模型的任务负载情况是否超过预期值,超过预期值才执行扩操作,否则说明当前的实例数是满足当前任务需要的,不执行扩操作。
[0063] 使用轮巡公平调度,在节点资源充足的情况下,每轮每个类型的智能能力模型各调度一个,Ray按照算力测量期得到的测量值给每个智能模型分配相对应的CPU、内存、显存资源;资源不足时,哪个类型的智能能力模型占用显存小,就优先启动哪个。
[0064] 根据资源情况按照DRF策略去调度服务到节点,优先选择资源消耗少的模型、优先选择资源多的节点。
[0065] 优先从占用最小资源的模型开始调度,并优先分配到资源多且资源能够满足模型需求的节点上。对比各智能能力的占用资源测量值大小,实施打分制度来实现调度服务,智能能力占用显存越少分数越高,分数最高者胜出,优先调度。
[0066] 智能能力是GPU模型,则根据GPU测量值计算分数;智能能力是GPU模型但GPU资源不够时,则按照CPU测量值去计算分数;智能能力是CPU模型,即无需GPU加速模型,则根据CPU测量值去计算分数。
[0067] 如果是GPU模型,优先查看节点的GPU资源是否满足模型需要,若满足,则调度分数高的智能服务到该节点上,按照测量值分配CPU、内存、GPU资源;若节点GPU资源不够,则查看CPU资源是否满足模型需要,若满足,则调度分数高的智能服务到该节点上,按照测量值分配CPU、内存资源;如果是CPU模型,查看CPU资源是否满足模型需要,若满足,则调度分数高的智能服务到该节点上,按照测量值分配CPU、内存资源。
[0068] 通过以上步骤1 步骤3,就完成了根据任务负载情况和节点的资源情况来自动实~时扩缩服务,实现了任务消费吞吐量最大化及算力使用率最大化。
[0069] 在本发明中,可自定义的变量包括:测量期算力测量公式、基线智能能力、轮巡检查时间、扩缩服务实例数计算公式、模型空闲时间预期值、任务负载量预期值、每个集群节点限制了最大实例数和最小实例数。
[0070] 实施例1:一种GPU算力管理方法,使用K8S框架对纳管的计算节点的GPU、CPU和内存资源池化后,执行流程:
[0071] 测量流程:设置测量流程用于测量所需GPU、CPU和内存资源,并将测量结果传递给Ray框架;
[0072] 资源分配和服务调度流程:在巡检任务负载情况和节点资源使用情况后,按照测量结果进行资源分配和服务调度,来满足任务执行需要。
[0073] 实施例2:基于实施例1,所述按照测量结果进行资源分配和服务调度,包括子流程:Ray框架检查需要部署的智能能力模型在所述测量流程中所获取的算力测量值之后,平台设置弹性扩缩流程用于扩缩微服务。
[0074] 实施例3:基于实施例1,所述按照测量结果进行资源分配和服务调度,包括子流程:Ray框架检查需要部署的智能能力模型的算力测量值,将智能能力模型的算力测量值与任务代理进程的资源进行比较,如果任务代理进程的资源能够部署该智能能力模型,Ray框架就将该任务分配给有资源的任务代理进程来完成智能服务部署。
[0075] 实施例4:基于实施例2,所述弹性扩缩流程,包括子步骤:
[0076] S1,获取集群快照:平台资源管理主服务获取每个集群节点的GPU和CPU资源使用情况、模型信息,并统计各个类型任务的数量;
[0077] S2,缩服务:销毁空闲节点;
[0078] S3,扩服务:启动新的模型来执行排队中的任务。
[0079] 实施例5:基于实施例4,在步骤S2中,包括子步骤:
[0080] S21,按照上次模型被使用的时间进行排序,对使用的模型进行排序;
[0081] S22,查看这些模型是否被销毁;
[0082] S23,当模型执行完任务后,释放它所占用的资源,模型状态由忙碌沦为空闲状态;根据模型是否是空闲状态,即没有做任务,且模型空闲时间是否超过预期值,来确定需要被终止的模型;对于相同类型的任务,保留满足当前任务的模型数量,剩余的模型都销毁掉;
[0083] 实施例6:基于实施例4,在步骤S3中,包括子步骤:
[0084] S31,将要终止的模型销毁掉;
[0085] S32,对照排队中的任务类型获取能够启动的对应类型的模型,查看节点GPU显存或CPU资源剩余量,检查节点的GPU资源或CPU资源是否大于算力测量期间对该模型的测量值,来判断在该节点是否能够部署该模型;
[0086] S33,模型的分配:每个集群节点限制了最大实例数和最小实例数;判断模型的任务负载情况是否超过预期值,超过预期值则执行扩操作,否则不执行扩操作。
[0087] 实施例7:基于实施例1,按照测量结果进行服务调度时,包括子步骤:如果智能能力模型是GPU模型,则根据GPU资源计算分数;如果智能能力模型是GPU模型但GPU资源不够时,则按照CPU模型去计算分数;如果智能能力模型是CPU模型,则根据CPU资源去计算分数。
[0088] 实施例8:一种可读存储介质,存储有计算机程序,该程序被处理器执行时实现如实施例1 实施例7任一所述的方法。~
[0089] 实施例9:一种计算机设备,包括存储器、处理器及存储在存储器上并能在处理器上运行的计算机程序,处理器执行所述程序时实现如实施例1 7任一所述的方法。~
[0090] 实施例10:一种GPU算力管理系统,包括实施例9所述的计算机设备。
[0091] 本发明未涉及部分均与现有技术相同或可采用现有技术加以实现。
[0092] 除以上实例以外,本领域技术人员根据上述公开内容获得启示或利用相关领域的知识或技术进行改动获得其他实施例,各个实施例的特征可以互换或替换,本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。