CN114706690B - 一种Kubernetes容器共享GPU方法及*** - Google Patents

一种Kubernetes容器共享GPU方法及*** Download PDF

Info

Publication number
CN114706690B
CN114706690B CN202210627516.3A CN202210627516A CN114706690B CN 114706690 B CN114706690 B CN 114706690B CN 202210627516 A CN202210627516 A CN 202210627516A CN 114706690 B CN114706690 B CN 114706690B
Authority
CN
China
Prior art keywords
gpu
pod
shared
kubernets
node
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.)
Active
Application number
CN202210627516.3A
Other languages
English (en)
Other versions
CN114706690A (zh
Inventor
薛少宁
林巍
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Software Technology Co Ltd
Original Assignee
Inspur Communication Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Inspur Communication Technology Co Ltd filed Critical Inspur Communication Technology Co Ltd
Priority to CN202210627516.3A priority Critical patent/CN114706690B/zh
Publication of CN114706690A publication Critical patent/CN114706690A/zh
Application granted granted Critical
Publication of CN114706690B publication Critical patent/CN114706690B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy 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

本发明提供一种Kubernetes容器共享GPU方法及***,属于计算机技术领域,包括:在运行节点上挂载图形处理器GPU,获取每个运行节点的GPU上报资源;部署GPU扩展调度器;为每个运行节点部署GPU共享设备插件组件,获取具有共享GPU需求的运行节点;基于具有共享GPU需求的运行节点构建pod,在pod中下发GPU共享资源。本发明通过在Kubernetes中原有调度***基础上增加GPU扩展调度参数,形成GPU扩展调度器,由GPU共享设备插件组件实现在Kubernetes上pod在使用GPU设备时显存级别的调度和绑定,解决了Kubernetes不能跨pod共享GPU的问题。

Description

一种Kubernetes容器共享GPU方法及***
技术领域
本发明涉及计算机技术领域,尤其涉及一种Kubernetes容器共享GPU方法及***。
背景技术
众所周知,Kubernetes简称K8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,并提供了应用部署,规划,更新和维护的机制。
在Kubernetes中,pod是k8s的最小单元,容器包含在pod中,一个pod中有一个pause容器和若干个业务容器,而容器就是单独的一个容器,简而言之,pod是一组容器,而容器单指一个容器。而pod之间是不能共享 GPU的,用户只能使用本节点上的物理GPU设备,并且,GPU不能拆分共享使用,只能某一POD独自占用,这对于想要使用 GPU 的共享功能来提高集群中 GPU 利用率的用户来说并不友好,尤其是在模型开发和模型推理的场景下,会造成严重的资源浪费。
对于上述在Kubernetes中,无法在pod之间共享GPU的局限,需要提出相应的解决方案。
发明内容
本发明提供一种Kubernetes容器共享GPU方法及***,用以解决现有技术中Kubernetes 不能跨pod共享 GPU的缺陷。
第一方面,本发明提供一种Kubernetes容器共享GPU方法,包括:
确定容器编排引擎Kubernetes中的运行节点,在所述运行节点上挂载图形处理器GPU,获取每个运行节点的GPU上报资源;
在所述Kubernetes中部署GPU扩展调度器,所述GPU扩展调度器包括GPU共享策略配置参数;
为每个运行节点部署GPU共享设备插件组件,获取具有共享GPU需求的运行节点,确定GPU共享资源;
调用所述Kubernetes,基于所述具有共享GPU需求的运行节点构建容器组pod,在所述pod中下发所述GPU共享资源。
根据本发明提供的一种Kubernetes容器共享GPU方法,所述确定容器编排引擎Kubernetes中的运行节点,在所述运行节点上挂载图形处理器GPU,获取每个运行节点的GPU上报资源,包括:
部署Kubernetes集群,在所述Kubernetes集群中确定容器运行时,获取支持GPU的所述运行节点;
利用图形查看命令获取所述运行节点的GPU数量和GPU内存,确定所述运行节点挂载GPU设备。
根据本发明提供的一种Kubernetes容器共享GPU方法,所述在所述Kubernetes中部署GPU扩展调度器,所述GPU扩展调度器包括GPU共享策略配置参数,包括:
在所述Kubernetes中的原始调度器上添加GPU内存参数和GPU设备参数,形成所述GPU扩展调度器;
控制所述Kubernetes中的全局调度器获取每个运行节点上的单个GPU内存,并控制所述GPU扩展调度器将GPU分配结果输入至控制器字段注解Pod Spec Annotation中。
根据本发明提供的一种Kubernetes容器共享GPU方法,所述为每个运行节点部署GPU共享设备插件组件,获取具有共享GPU需求的运行节点,确定GPU共享资源,包括:
基于守护进程控制器DaemonSet,为每个运行节点部署所述GPU共享设备插件组件;
确定为所述具有共享GPU需求的运行节点添加GPU共享节点标签,获得所述GPU共享资源。
根据本发明提供的一种Kubernetes容器共享GPU方法,所述为每个运行节点部署GPU共享设备插件组件,获取具有共享GPU需求的运行节点,确定GPU共享资源之后,还包括:
将所述运行节点的GPU数量和GPU内存上报至控制器Kubelet;
由所述Kubelet将所述运行节点的GPU数量和GPU内存上报至集群接口服务器Kubernetes API Server。
根据本发明提供的一种Kubernetes容器共享GPU方法,所述调用所述Kubernetes,基于所述具有共享GPU需求的运行节点构建控制器pod,在所述pod中下发GPU共享资源信息,包括:
调用Kubernetes集群构建pod,在pod部署脚本注解中确定给pod的资源resources字段添加所述GPU扩展调度器中的GPU内存参数和GPU设备参数;
基于所述GPU扩展调度器,绑定所述运行节点和pod;
控制Kubelet接收绑定后运行节点和pod的关联事件,由Kubelet在所述运行节点上创建pod实体,在所述pod实体中下发所述GPU共享资源信息。
根据本发明提供的一种Kubernetes容器共享GPU方法,所述基于所述GPU扩展调度器,绑定所述运行节点和pod,包括:
基于资源调度策略binpack规则获取所述运行节点对应的GPU,分别将所述GPU的设备地址信息存储于pod的注解annotation中,以及所述pod对应的GPU内存存储于pod的GPU内存应用时间注释中,调用Kubernetes API Server;
利用所述Kubernetes API Server将所述运行节点和所述pod进行绑定。
第二方面,本发明还提供一种Kubernetes容器共享GPU***,包括:
获取模块,用于确定Kubernetes中的运行节点,在所述运行节点上挂载GPU,获取每个运行节点的GPU上报资源;
部署模块,用于在所述Kubernetes中部署GPU扩展调度器,所述GPU扩展调度器包括GPU共享策略配置参数;
确定模块,用于为每个运行节点部署GPU共享设备插件组件,获取具有共享GPU需求的运行节点,确定GPU共享资源;
调用模块,用于调用所述Kubernetes,基于所述具有共享GPU需求的运行节点构建pod,在所述pod中下发所述GPU共享资源。
第三方面,本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述Kubernetes容器共享GPU方法。
第四方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述Kubernetes容器共享GPU方法。
本发明提供的Kubernetes容器共享GPU方法及***,通过在Kubernetes中原有调度***基础上增加GPU扩展调度参数,形成GPU扩展调度器,由GPU共享设备插件组件实现在Kubernetes上pod在使用GPU设备时显存级别的调度和绑定,解决了Kubernetes 不能跨pod共享 GPU的问题。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的Kubernetes容器共享GPU方法的流程示意图;
图2是本发明提供的Kubernetes容器共享GPU***的结构示意图;
图3是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
针对现有的Kubernetes中,特别是在机器学***台上不能合理的共享分配问题,本发明提出一种Kubernetes容器共享GPU方法,图1是本发明提供的Kubernetes容器共享GPU方法的流程示意图,如图1所示,包括:
步骤100:确定Kubernetes中的运行节点,在所述运行节点上挂载GPU,获取每个运行节点的GPU上报资源;
步骤200:在所述Kubernetes中部署GPU扩展调度器,所述GPU扩展调度器包括GPU共享策略配置参数;
步骤300:为每个运行节点部署GPU共享设备插件组件,获取具有共享GPU需求的运行节点,确定GPU共享资源;
步骤400:调用所述Kubernetes,基于所述具有共享GPU需求的运行节点构建pod,在所述pod中下发所述GPU共享资源。
本发明的核心思想是基于Kubernetes技术,利用Kubernetes扩展资源、调度程序扩展器和设备插件机制,实现Kubernetes平台支持GPU在POD之间共享分配的功能。
具体地,在Kubernetes集群中,在原有调度***的基础上增加了GPU内存和GPU个数的资源调度,通过Kubernetes的扩展调度技术,增加的用于GPU设备的GPU扩展调度器GPUShare Scheduler Extender实现了统一调度管理节点上的GPU设备,增加了基于Kubernetes的Device Plugin机制的GPU共享设备插件组件GPU Share Device Plugin组件,实现Kubernetes上容器POD在使用的GPU设备时显存级别的调度和绑定。
部署Kubernetes集群,在Kubernetes集群中配置容器运行时为支持GPU的运行时;GPU设备挂载成功;部署 GPU扩展调度器GPU Share Scheduler;修改Kubernetes 默认的scheduler调度器,通过在调度器参数中添加策略配置文件参数的方式,将扩展参数添加到默认scheduler调度器;以DaemonSet方式的为每个节点部署GPU Share Device Plugin组件,同时配置组件的操作权限;为需要使用共享GPU的节点添加gpushare节点标签;部署kubectl的inspect扩展kubectl-inspect-gpushare,并添加执行权;调用Kubernetes集群创建pod,在pod部署脚本注解中指定pod的resources字段添加我们定义的GPU字段inspur.com/gpu-mem和inspur.com/gpu-count; Pod创建成功后,进入pod里面,运行相关命令查看GPU的信息。
特别地,本发明包括了GPU资源发现上报,GPU资源管理调度, GPU资源的数量拆分和GPU资源的显存分配。
本发明通过在Kubernetes中原有调度***基础上增加GPU扩展调度参数,形成GPU扩展调度器,由GPU共享设备插件组件实现在Kubernetes上pod在使用GPU设备时显存级别的调度和绑定,解决了Kubernetes 不能跨 pod 共享 GPU的问题。
基于上述实施例,所述确定容器编排引擎Kubernetes中的运行节点,在所述运行节点上挂载图形处理器GPU,获取每个运行节点的GPU上报资源,包括:
部署Kubernetes集群,在所述Kubernetes集群中确定容器运行时,获取支持GPU的所述运行节点;
利用图形查看命令获取所述运行节点的GPU数量和GPU内存,确定所述运行节点挂载GPU设备。
具体地,首先部署Kubernetes集群,在Kubernetes集群中配置容器运行时为支持GPU的运行时,例如支持NVIDIA显卡的nvidia-docker2。
再检查Kubernetes节点的GPU设备挂载是否成功,如NVIDIA显卡可以通过图形查看命令nvidia-smi查看。
本发明通过初始的Kubernetes集群设置,为现有的节点挂载已有的GPU设备,获取GPU资源当前状态,便于后续的重新分配计算。
基于上述任一实施例,所述在所述Kubernetes中部署GPU扩展调度器,所述GPU扩展调度器包括GPU共享策略配置参数,包括:
在所述Kubernetes中的原始调度器上添加GPU内存参数和GPU设备参数,形成所述GPU扩展调度器;
控制所述Kubernetes中的全局调度器获取每个运行节点上的单个GPU内存,并控制所述GPU扩展调度器将GPU分配结果输入至控制器字段注解Pod Spec Annotation中。
具体地,通过修改Kubernetes 默认的scheduler调度器,通过在调度器参数中添加策略配置文件参数的方式,将扩展参数添加到默认scheduler调度器。在Kubernetes的Scheduler调度器中增加两个新的扩展资源:第一个是“gpu-mem”,对应GPU显存;第二个是“gpu-count”,对应GPU设备的个数。
此处,本发明使用Kubernetes调度器的Extender机制,增加了新的扩展调度器GPUShare Scheduler Extender。它的功能是负责在kubernetes的全局调度器过滤和绑定时判断节点上的单个GPU设备是否能够提供足够的GPU Memory,并将GPU分配结果记录到PodSpec Annotation用于POD的绑定时的后续过滤。
需要说明的是,Kubernetes中的Annotation(注解)与Label类似,也使用key/value键值对的形式进行定义。不同的是Label具有严格的命名规则,它定义的是Kubernetes对象的元数据(Metadata),并且用于Label Selector。Annotation则是用户任意定义的附加信息,以便于外部工具查找。在很多时候,Kubernetes的模块自身会通过Annotation标记资源对象的一些特殊信息。通常来说,用Annotation来记录的信息包括:build信息、release信息、Docker镜像信息等,例如时间戳、release id号、PR号、镜像Hash值和Docker Registry地址等;日志库、监控库、分析库等资源库的地址信息;程序调试工具信息,例如工具名称、版本号等;团队的联系信息,例如电话号码、负责人名称、网址等。
本发明通过对Kubernetes的默认调度器进行改造,增加GPU共享参数,形成GPU扩展调度器,可专门用于GPU的资源调度,无需对Kubernetes的原生结构进行改动。
基于上述任一实施例,所述为每个运行节点部署GPU共享设备插件组件,获取具有共享GPU需求的运行节点,确定GPU共享资源,包括:
基于守护进程控制器DaemonSet,为每个运行节点部署所述GPU共享设备插件组件;
确定为所述具有共享GPU需求的运行节点添加GPU共享节点标签,获得所述GPU共享资源。
其中,所述为每个运行节点部署GPU共享设备插件组件,获取具有共享GPU需求的运行节点,确定GPU共享资源之后,还包括:
将所述运行节点的GPU数量和GPU内存上报至控制器Kubelet;
由所述Kubelet将所述运行节点的GPU数量和GPU内存上报至集群接口服务器Kubernetes API Server。
具体地,本发明以DaemonSet方式的为每个节点部署GPU Share Device Plugin组件,同时配置组件的操作权限,确保每个节点都可以资源上报下发,再为需要使用共享GPU的节点添加gpushare节点标签。
这里,DaemonSet只管理Pod对象,通过nodeAffinity和Toleration两个调度器,保证每个节点上只有一个Pod集群动态加入了新Node,DaemonSet中的Pod也会添加在新加入Node上,删除一个DaemonSet也会级联删除所有其创建的Pod。
进一步地,部署kubectl的inspect扩展kubectl-inspect-gpushare,并添加执行权限,通过kubectl inspect gpushare命令查看节点的共享GPU数据。这里,利用kubernetes的Device Plugin机制,增加了GPU Share Device Plugin,主要功能是查询节点上的GPU设备的数量和GPU内存等资源信息;通过ListAndWatch()上报这些信息给Kubelet;Kubelet 再将这些报告给 Kubernetes API Server。
还需要说明的是,kubectl 是 Kubernetes 的命令行工具(CLI),是 Kubernetes用户和管理员必备的管理工具,kubectl 提供了大量的子命令,方便管理 Kubernetes 集群中的各种功能。
Kubelet 是 kubernetes 工作节点上的一个代理组件,运行在每个节点上。Kubelet是工作节点上的主要服务,定期从kube-apiserver组件接收新的或修改的Pod规范,并确保Pod及其容器在期望规范下运行。同时该组件作为工作节点的监控组件,向kube-apiserver汇报主机的运行状况。
Kubernetes API Server提供了Kubernetes各类资源对象(pod、RC和Service等)的增删改查及watch等HTTP Rest接口,是整个***的数据总线和数据中心。KubernetesAPI Server的功能:提供了集群管理的REST API接口(包括认证授权、数据校验以及集群状态变更);提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd);是资源配额控制的入口;拥有完备的集群安全机制。
本发明通过DaemonSet的方式为每个节点部署GPU Share Device Plugin组件,确保每个节点都可以资源上报下发。
基于上述任一实施例,所述调用所述Kubernetes,基于所述具有共享GPU需求的运行节点构建控制器pod,在所述pod中下发GPU共享资源信息,包括:
调用Kubernetes集群构建pod,在pod部署脚本注解中确定给pod的资源resources字段添加所述GPU扩展调度器中的GPU内存参数和GPU设备参数;
基于所述GPU扩展调度器,绑定所述运行节点和pod;
控制Kubelet接收绑定后运行节点和pod的关联事件,由Kubelet在所述运行节点上创建pod实体,在所述pod实体中下发所述GPU共享资源信息。
其中,所述基于所述GPU扩展调度器,绑定所述运行节点和pod,包括:
基于资源调度策略binpack规则获取所述运行节点对应的GPU,分别将所述GPU的设备地址信息存储于pod的注解annotation中,以及所述pod对应的GPU内存存储于pod的GPU内存应用时间注释中,调用Kubernetes API Server;
利用所述Kubernetes API Server将所述运行节点和所述pod进行绑定。
具体地,调用Kubernetes集群创建pod,在pod部署脚本注解中指定pod的resources字段添加本发明定义的GPU字段inspur.com/gpu-mem和inspur.com/gpu-count。待pod创建成功后,进入pod里面,运行相关命令查看GPU的信息,如NVIDIA的显卡,可以通过nvidia-smi命令查看相关信息。
可以理解的是,在pod创建时,Kubernetes调度器完成所有默认过滤器后,会通过http的方式调用 GPU Share Scheduler Extender 的过滤器。这是因为默认调度器计算的是扩展资源,只能判断资源总量中是否有满足需求的空闲资源。因此具体判断单台设备是否满足需求,还需要通过 GPU Share Scheduler Extender 检查单个设备是否有可用资源,从而实现更加准确的调度。
当 Kubernetes的scheduler 找到满足要求的节点时,它会委托 GPU ShareScheduler Extender 来绑定节点和 Pod。通过分两个步骤执行:
一、GPU Share Scheduler Extender会根据binpack 规则找到节点中的 GPU 设备,记录 GPU 设备 ID 并保存GPU_ID在 pod 的 annotations 中。同时,将 pod 应用程序的 GPU 内存保存在 pod的GPU_MEM_POD的GPU_MEM_ASSUME_TIME注释中。如果绑定时没有找到GPU,此时不进行绑定。默认调度程序将在过期超时后重新调度。
二、使用 Kubernetes API 绑定 pod 和 node。
当pod和节点绑定的事件被Kubelet接收到后,Kubelet就会在节点上创建真正的pod实体,在这个过程中GPU Share Device Plugin会按时间戳从Kubernetes API Server获取该节点中所有 Pending、GPU Share 以及其他未标记的pod信息,将有GPU内存请求量的pod的annotation的 GPU_MEM_ASSIGNED标记为true,并且将pod annotation中的GPU信息转化为环境变量返回给Kubelet用以真正的创建Pod。
需要说明的是,本发明不限于在虚拟机平台部署容器实现GPU资源的共享分配,还包括在物理机平台部署容器实现GPU资源的共享分配。
下面对本发明提供的Kubernetes容器共享GPU***进行描述,下文描述的Kubernetes容器共享GPU***与上文描述的Kubernetes容器共享GPU方法可相互对应参照。
图2是本发明提供的Kubernetes容器共享GPU***的结构示意图,如图2所示,包括:获取模块21、部署模块22、确定模块23和调用模块24,其中:
获取模块21用于确定Kubernetes中的运行节点,在所述运行节点上挂载GPU,获取每个运行节点的GPU上报资源;部署模块22用于在所述Kubernetes中部署GPU扩展调度器,所述GPU扩展调度器包括GPU共享策略配置参数;确定模块23用于为每个运行节点部署GPU共享设备插件组件,获取具有共享GPU需求的运行节点,确定GPU共享资源;调用模块24用于调用所述Kubernetes,基于所述具有共享GPU需求的运行节点构建pod,在所述pod中下发所述GPU共享资源。
本发明通过在Kubernetes中原有调度***基础上增加GPU扩展调度参数,形成GPU扩展调度器,由GPU共享设备插件组件实现在Kubernetes上pod在使用GPU设备时显存级别的调度和绑定,解决了Kubernetes 不能跨 pod 共享 GPU的问题。
图3示例了一种电子设备的实体结构示意图,如图3所示,该电子设备可以包括:处理器(processor)310、通信接口(Communications Interface)320、存储器(memory)330和通信总线340,其中,处理器310,通信接口320,存储器330通过通信总线340完成相互间的通信。处理器310可以调用存储器330中的逻辑指令,以执行Kubernetes容器共享GPU方法,该方法包括:确定容器编排引擎Kubernetes中的运行节点,在所述运行节点上挂载图形处理器GPU,获取每个运行节点的GPU上报资源;在所述Kubernetes中部署GPU扩展调度器,所述GPU扩展调度器包括GPU共享策略配置参数;为每个运行节点部署GPU共享设备插件组件,获取具有共享GPU需求的运行节点,确定GPU共享资源;调用所述Kubernetes,基于所述具有共享GPU需求的运行节点构建容器组pod,在所述pod中下发所述GPU共享资源。
此外,上述的存储器330中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的Kubernetes容器共享GPU方法,该方法包括:确定容器编排引擎Kubernetes中的运行节点,在所述运行节点上挂载图形处理器GPU,获取每个运行节点的GPU上报资源;在所述Kubernetes中部署GPU扩展调度器,所述GPU扩展调度器包括GPU共享策略配置参数;为每个运行节点部署GPU共享设备插件组件,获取具有共享GPU需求的运行节点,确定GPU共享资源;调用所述Kubernetes,基于所述具有共享GPU需求的运行节点构建容器组pod,在所述pod中下发所述GPU共享资源。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的Kubernetes容器共享GPU方法,该方法包括:确定容器编排引擎Kubernetes中的运行节点,在所述运行节点上挂载图形处理器GPU,获取每个运行节点的GPU上报资源;在所述Kubernetes中部署GPU扩展调度器,所述GPU扩展调度器包括GPU共享策略配置参数;为每个运行节点部署GPU共享设备插件组件,获取具有共享GPU需求的运行节点,确定GPU共享资源;调用所述Kubernetes,基于所述具有共享GPU需求的运行节点构建容器组pod,在所述pod中下发所述GPU共享资源。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (9)

1.一种Kubernetes容器共享GPU方法,其特征在于,包括:
确定容器编排引擎Kubernetes中的运行节点,在所述运行节点上挂载图形处理器GPU,获取每个运行节点的GPU上报资源;
在所述Kubernetes中部署GPU扩展调度器,所述GPU扩展调度器包括GPU共享策略配置参数;
为每个运行节点部署GPU共享设备插件组件,获取具有共享GPU需求的运行节点,确定GPU共享资源;
调用所述Kubernetes,基于所述具有共享GPU需求的运行节点构建容器组pod,在所述pod中下发所述GPU共享资源;
所述在所述Kubernetes中部署GPU扩展调度器,所述GPU扩展调度器包括GPU共享策略配置参数,包括:
在所述Kubernetes中的原始调度器上添加GPU内存参数和GPU设备参数,形成所述GPU扩展调度器;
控制所述Kubernetes中的全局调度器获取每个运行节点上的单个GPU内存,并控制所述GPU扩展调度器将GPU分配结果输入至控制器字段注解Pod Spec Annotation中。
2.根据权利要求1所述的Kubernetes容器共享GPU方法,其特征在于,所述确定容器编排引擎Kubernetes中的运行节点,在所述运行节点上挂载图形处理器GPU,获取每个运行节点的GPU上报资源,包括:
部署Kubernetes集群,在所述Kubernetes集群中确定容器运行时,获取支持GPU的所述运行节点;
利用图形查看命令获取所述运行节点的GPU数量和GPU内存,确定所述运行节点挂载GPU设备。
3.根据权利要求1所述的Kubernetes容器共享GPU方法,其特征在于,所述为每个运行节点部署GPU共享设备插件组件,获取具有共享GPU需求的运行节点,确定GPU共享资源,包括:
基于守护进程控制器DaemonSet,为每个运行节点部署所述GPU共享设备插件组件;
确定为所述具有共享GPU需求的运行节点添加GPU共享节点标签,获得所述GPU共享资源。
4.根据权利要求3所述的Kubernetes容器共享GPU方法,其特征在于,所述为每个运行节点部署GPU共享设备插件组件,获取具有共享GPU需求的运行节点,确定GPU共享资源之后,还包括:
将所述运行节点的GPU数量和GPU内存上报至控制器Kubelet;
由所述Kubelet将所述运行节点的GPU数量和GPU内存上报至集群接口服务器Kubernetes API Server。
5.根据权利要求1所述的Kubernetes容器共享GPU方法,其特征在于,所述调用所述Kubernetes,基于所述具有共享GPU需求的运行节点构建控制器pod,在所述pod中下发GPU共享资源信息,包括:
调用Kubernetes集群构建pod,在pod部署脚本注解中确定给pod的资源resources字段添加所述GPU扩展调度器中的GPU内存参数和GPU设备参数;
基于所述GPU扩展调度器,绑定所述运行节点和pod;
控制Kubelet接收绑定后运行节点和pod的关联事件,由Kubelet在所述运行节点上创建pod实体,在所述pod实体中下发所述GPU共享资源信息。
6.根据权利要求5所述的Kubernetes容器共享GPU方法,其特征在于,所述基于所述GPU扩展调度器,绑定所述运行节点和pod,包括:
基于资源调度策略binpack规则获取所述运行节点对应的GPU,分别将所述GPU的设备地址信息存储于pod的注解annotation中,以及所述pod对应的GPU内存存储于pod的GPU内存应用时间注释中,调用Kubernetes API Server;
利用所述Kubernetes API Server将所述运行节点和所述pod进行绑定。
7.一种Kubernetes容器共享GPU***,其特征在于,包括:
获取模块,用于确定Kubernetes中的运行节点,在所述运行节点上挂载GPU,获取每个运行节点的GPU上报资源;
部署模块,用于在所述Kubernetes中部署GPU扩展调度器,所述GPU扩展调度器包括GPU共享策略配置参数;
确定模块,用于为每个运行节点部署GPU共享设备插件组件,获取具有共享GPU需求的运行节点,确定GPU共享资源;
调用模块,用于调用所述Kubernetes,基于所述具有共享GPU需求的运行节点构建pod,在所述pod中下发所述GPU共享资源;
所述部署模块具体用于:
在所述Kubernetes中的原始调度器上添加GPU内存参数和GPU设备参数,形成所述GPU扩展调度器;
控制所述Kubernetes中的全局调度器获取每个运行节点上的单个GPU内存,并控制所述GPU扩展调度器将GPU分配结果输入至控制器字段注解Pod Spec Annotation中。
8.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述Kubernetes容器共享GPU方法。
9.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述Kubernetes容器共享GPU方法。
CN202210627516.3A 2022-06-06 2022-06-06 一种Kubernetes容器共享GPU方法及*** Active CN114706690B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210627516.3A CN114706690B (zh) 2022-06-06 2022-06-06 一种Kubernetes容器共享GPU方法及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210627516.3A CN114706690B (zh) 2022-06-06 2022-06-06 一种Kubernetes容器共享GPU方法及***

Publications (2)

Publication Number Publication Date
CN114706690A CN114706690A (zh) 2022-07-05
CN114706690B true CN114706690B (zh) 2022-09-16

Family

ID=82177814

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210627516.3A Active CN114706690B (zh) 2022-06-06 2022-06-06 一种Kubernetes容器共享GPU方法及***

Country Status (1)

Country Link
CN (1) CN114706690B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116089009A (zh) * 2023-02-01 2023-05-09 华院计算技术(上海)股份有限公司 一种gpu资源管理方法、***、设备和存储介质
CN116258622A (zh) * 2023-02-16 2023-06-13 青软创新科技集团股份有限公司 一种基于容器的gpu分配方法、装置、电子设备和介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111506404A (zh) * 2020-04-07 2020-08-07 上海德拓信息技术股份有限公司 一种基于Kubernetes的共享GPU调度方法
CN111913794A (zh) * 2020-08-04 2020-11-10 北京百度网讯科技有限公司 用于共用gpu的方法、装置、电子设备及可读存储介质
CN112231049A (zh) * 2020-09-28 2021-01-15 苏州浪潮智能科技有限公司 基于kubernetes的计算设备共享方法、装置、设备及存储介质
CN112559164A (zh) * 2019-09-25 2021-03-26 中兴通讯股份有限公司 一种资源共享方法及装置
WO2021203805A1 (zh) * 2020-04-08 2021-10-14 苏州浪潮智能科技有限公司 一种gpu共享调度、单机多卡方法、***及装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11693698B2 (en) * 2018-11-23 2023-07-04 Netapp, Inc. System and method for infrastructure scaling
JP7385156B2 (ja) * 2020-04-16 2023-11-22 日本電信電話株式会社 スケジューリング方法、スケジューラ、gpuクラスタシステムおよびプログラム
CN112463375A (zh) * 2020-11-26 2021-03-09 广州橙行智动汽车科技有限公司 一种数据处理的方法和装置
CN113204428B (zh) * 2021-05-28 2023-01-20 北京市商汤科技开发有限公司 资源调度方法、装置、电子设备以及计算机可读存储介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112559164A (zh) * 2019-09-25 2021-03-26 中兴通讯股份有限公司 一种资源共享方法及装置
CN111506404A (zh) * 2020-04-07 2020-08-07 上海德拓信息技术股份有限公司 一种基于Kubernetes的共享GPU调度方法
WO2021203805A1 (zh) * 2020-04-08 2021-10-14 苏州浪潮智能科技有限公司 一种gpu共享调度、单机多卡方法、***及装置
CN111913794A (zh) * 2020-08-04 2020-11-10 北京百度网讯科技有限公司 用于共用gpu的方法、装置、电子设备及可读存储介质
EP3876100A2 (en) * 2020-08-04 2021-09-08 Beijing Baidu Netcom Science And Technology Co. Ltd. Method and apparatus for sharing gpu, electronic device and readable storage medium
CN112231049A (zh) * 2020-09-28 2021-01-15 苏州浪潮智能科技有限公司 基于kubernetes的计算设备共享方法、装置、设备及存储介质
WO2022062650A1 (zh) * 2020-09-28 2022-03-31 苏州浪潮智能科技有限公司 基于kubernetes的计算设备共享方法、装置、设备及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
数据中心上异构资源的细粒度分配算法研究;汤小春等;《西北工业大学学报》;20200615(第03期);全文 *

Also Published As

Publication number Publication date
CN114706690A (zh) 2022-07-05

Similar Documents

Publication Publication Date Title
WO2020253347A1 (zh) 一种容器集群管理方法、装置及***
CN114706690B (zh) 一种Kubernetes容器共享GPU方法及***
US10620927B2 (en) Method, arrangement, computer program product and data processing program for deploying a software service
US10594800B2 (en) Platform runtime abstraction
CN109189334B (zh) 一种区块链网络服务平台及其扩容方法、存储介质
CN113296792B (zh) 存储方法、装置、设备、存储介质和***
CN111475227B (zh) 业务插件加载实现方法、装置和终端设备
CN112417051A (zh) 容器编排引擎资源管理方法及装置、可读介质及电子设备
CN110532058B (zh) 容器集群服务的管理方法、装置、设备及可读存储介质
CN116028163A (zh) 一种容器组的动态链接库调度方法、装置及存储介质
Dragoicea et al. Integrating HLA and service-oriented architecture in a simulation framework
CN112463305A (zh) 一种云端虚拟化gpu的管理方法、***及相关装置
CN115237455B (zh) 应用管理方法及相关设备
CN115037757B (zh) 一种多集群服务管理***
US11531674B2 (en) System and method for supporting rollback of changes made to target systems via an integration platform
CN113010385B (zh) 一种任务状态更新方法、装置、设备及介质
CN113741912A (zh) 模型管理***、方法、装置及设备
CN112422308A (zh) 一种实现运维监控的方法及装置
CN117251297B (zh) 一种设备分配方法及电子设备和存储介质
CN112100283B (zh) 一种基于Linux平台的安卓虚拟机的分时复用方法
CN117459401B (zh) 网络靶场环境快照的生成方法、装置、设备和存储介质
Chandra Effective memory utilization using custom scheduler in kubernetes
CN117573296B (zh) 虚拟机设备直通管控方法、装置、设备和存储介质
WO2023274014A1 (zh) 容器集群的存储资源管理方法、装置及***
CN113703798A (zh) 分布式服务更新方法、装置、计算机设备及存储介质

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
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20230613

Address after: 250100 building S02, Inspur Science Park, No. 1036, Inspur Road, high tech Zone, Jinan, Shandong

Patentee after: Inspur Software Technology Co.,Ltd.

Address before: 266107 No. 2, Xiangtan Road, Danshan Industrial Park, Chengyang District, Qingdao, Shandong

Patentee before: Inspur Communication Technology Co.,Ltd.