CN110196753A - 基于容器的图形处理器gpu虚拟化方法、装置和可读介质 - Google Patents

基于容器的图形处理器gpu虚拟化方法、装置和可读介质 Download PDF

Info

Publication number
CN110196753A
CN110196753A CN201910055399.6A CN201910055399A CN110196753A CN 110196753 A CN110196753 A CN 110196753A CN 201910055399 A CN201910055399 A CN 201910055399A CN 110196753 A CN110196753 A CN 110196753A
Authority
CN
China
Prior art keywords
container
gpu
library
video memory
configuration information
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
Application number
CN201910055399.6A
Other languages
English (en)
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.)
Tencent Technology Beijing Co Ltd
Original Assignee
Tencent Technology Beijing 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 Tencent Technology Beijing Co Ltd filed Critical Tencent Technology Beijing Co Ltd
Priority to CN201910055399.6A priority Critical patent/CN110196753A/zh
Publication of CN110196753A publication Critical patent/CN110196753A/zh
Pending legal-status Critical Current

Links

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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于容器的图形处理器GPU虚拟化方法、装置和可读介质,属于云计算中虚拟化技术领域,本发明提供的方法及装置中,基于用户申请的GPU资源申请请求创建容器,将容器与为其配置的GPU资源的相关配置信息写入到控制配置文件中,在容器启动后,先由代理库内的初始化函数拦截注册请求,从控制配置文件中提取容器配置信息并发送给物理机,代理库将注册请求发送给标准库,由标准库完成容器的GPU虚拟化,此外,通过存储控制配置文件和进程信息文件,这样后续基于容器处理任务时可以直接读取控制配置文件或进程信息文件,而无需再将请求发送给物理机,也就避免了因物理机挂掉而导致的所有容器中执行的函数全部被挂起的情况发生。

Description

基于容器的图形处理器GPU虚拟化方法、装置和可读介质
技术领域
本发明涉及云计算中虚拟化技术领域,尤其涉及一种基于容器的图形处理器GPU虚拟化方法、装置和可读介质。
背景技术
现有技术中进行图形处理器(GraphicsProcessingUnit,GPU)虚拟化的方法为:采用英伟达NVIDIA公司提供的网格(GRID)技术,该方案通过使用特定型号的GPU显卡,使用官方提供的程序可以模拟出若干个GPU,这些模拟出来的GPU可以称为vGPU,每台虚拟机通过绑定一个模拟出来的vGPU,使得客户机(GUEST)的程序能够直接使用vGPU的处理能力,达到接近于使用HostGPU处理的性能体验,从而实现GPU虚拟化。目前Citrix和VMware都是基于GRID的技术实现GPU虚拟化,而且推出了自己的桌面/应用的虚拟化方案,以提升其产品的对GPU的3D应用支持能力。
然而上述方案存在以下缺点:应用成本很高,而且用户需要购买支持vGPU技术的计算卡,这种计算卡的单价很高,对于已经持有老型号的计算卡的用户来说升级成本太高;此外,目前的GRID技术的应用场景均是虚拟机,并没有针对容器的虚拟化方案等,而容器与虚拟机相比,具有诸多优点,例如在效率方面,部署一个容器比部署一个虚拟机要快的多,而且运行一个容器所需要的额外内存和磁盘都小于运行虚拟机所需要的额外内存和磁盘。
因此,基于容器的诸多优点,如何基于容器实现GPU虚拟化,以支持各种型号的GPU计算卡是值得考虑的问题之一。
发明内容
本发明实施例提供一种基于容器的图形处理器GPU虚拟化方法、装置和可读介质,用以实现基于容器的GPU虚拟化,以支持各种型号的GPU计算卡。
第一方面,本发明实施例提供一种基于容器的图形处理器GPU虚拟化方法,包括:
代理库接收所述统一计算架构CUDA应用在容器启动后初始化过程中发送的注册请求,所述注册请求用于发往标准库,所述容器为物理机在接收到GPU资源申请请求后创建;
所述代理库调用与所述标准库中同名的初始化函数,从所述容器的控制配置文件中提取所述容器的容器配置信息,所述控制配置文件存储有所述容器的容器配置信息及物理机根据所述GPU资源申请请求为所述容器配置GPU资源的GPU配置信息;
所述代理库将所述容器配置信息发送给物理机,以使所述物理机根据所述容器配置信息确定所述容器中服务进程的进程信息,并将所述进程信息写入到所述容器配置信息对应的进程信息文件中;
所述代理库将所述注册请求转发给所述标准库,由所述标准库调用其内初始化函数完成所述容器的GPU初始化。
第二方面,本发明实施例还提供一种基于容器的图形处理器GPU虚拟化方法,包括:
在接收到GPU资源申请请求后,根据所述GPU资源申请请求中携带的所要申请的GPU资源,为待创建容器配置GPU资源;
将配置GPU资源的GPU配置信息和待创建容器的容器配置信息写入控制配置文件中;
根据所要申请的GPU资源、GPU配置信息和所述待创建容器的挂载控制路径,创建并启动所述容器;
接收所述容器中代理库在初始化过程中发送的容器配置信息,所述容器配置信息为所述代理库在接收到注册请求后,调用与标准库中同名的初始化函数,从所述容器的控制配置文件中提取到的;
根据所述容器配置信息确定所述容器中服务进程的进程信息;
将所述进程信息写入到所述容器配置信息对应的进程信息文件中。
第三方面,本发明实施例提供一种代理库控制装置,包括:
接收单元,用于接收所述统一计算架构CUDA应用在容器启动后初始化过程中发送的注册请求,所述注册请求用于发往标准库,所述容器为物理机在接收到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配置信息和所述待创建容器的挂载控制路径,创建并启动所述容器;在容器启动后初始化过程中,CUDA应用会向代理库发送注册请求,这样,代理库在接收到注册请求后,调用与所述标准库中同名的初始化函数,从所述容器的控制配置文件中提取所述容器的容器配置信息,并将所述容器配置信息发送给物理机,这样一来,物理机可以根据接收到的容器配置信息准确地确定出当前正在进行初始化的容器,并确定所述容器中服务进程的进程信息,并将所述进程信息写入到所述容器配置信息对应的进程信息文件中;另一方面,代理库将所述注册请求转发给所述标准库,由所述标准库调用其内初始化函数完成所述容器的GPU初始化。这样一来,实现了基于容器的GPU虚拟化,此外,通过存储控制配置文件和进程信息文件,这样后续基于容器的显存申请时可以直接读取控制配置文件或进程信息文件无需再将请求发送给物理机,避免了物理机挂掉,所有容器中执行的函数全部被挂起的情况发生。此外,本发明中实现的是基于容器的GPU初始化,能够支持所有CUDA特性,同时支持各种型号的GPU计算卡,用户无需升级计算卡,切换代价小。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1a为容器的逻辑架构图;
图1b为虚拟机的逻辑架构图;
图2a为本发明实施例提供的基于容器的图形处理器GPU虚拟化方法的应用场景示意图;
图2b为本发明实施例提供的服务器12的执行逻辑架构图;
图3为本发明实施例提供的基于容器的GPU虚拟化方法的流程示意图;
图4为本发明实施例提供的对控制配置文件进行存储的流程示意图;
图5为本发明实施例提供的显存申请处理流程示意图;
图6为本发明实施例提供的确定所述容器已使用的显存的显存使用量的流程示意图;
图7为本发明实施例提供的对GPU利用率进行控制的流程示意图;
图8为本发明实施例提供的更新剩余令牌数量的流程示意图;
图9为本发明实施例提供的代理库控制装置的结构示意图;
图10为本发明实施例提供的基于容器的图形处理器GPU虚拟化装置的结构示意图;
图11本发明实施例提供的实施基于容器的图形处理器GPU虚拟化方法的计算装置的结构示意图。
具体实施方式
本发明实施例提供的基于容器的图形处理器GPU虚拟化方法、装置和可读介质,用以实现基于容器的GPU虚拟化,以支持各种型号的GPU计算卡。
以下结合说明书附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
为了便于理解本发明,本发明涉及的技术术语中:
1、容器:docker,是一种对应用层代码和依赖关系的一种抽象,多个容器运行在同一个物理机(也称宿主机)上,共享着同一个操作***(Operating System,OS)内核。而虚拟机是一种对物理设备的一种抽象,将一台宿主机抽象成多个机器,每个虚拟机提供一个完整的操作***,参考图1a和图1b所示,图1a为容器的逻辑架构图,图1b为虚拟机的逻辑架构图。容器与虚拟机的比较结果如下所示:容器内的所有应用App,不需要经过虚拟化的过程,而虚拟机的应用都要经历各种虚拟化过程,需要多次的上下文切换,性能会比容器内的App差。
2、标准库,显卡生产商提供的运行库,可以执行统一计算架构(Compute UnifiedDeviceArchitecture,CUDA)通用计算。
3、代理库,具有标准库中所有的函数,保留完整的标准库中的接口定义、函数名称和函数参数,对一些需要拦截的函数做特殊处理的运行库,例如,本发明中,通过对代理库中culnit函数进行改写,在函数原有的指令中增加向物理机中的管理器Manager返回容器配置信息的步骤,以使Manager接收到容器配置信息后,确定该容器配置信息对应的容器中所有服务进程的进程信息,并写入到该容器配置信息对应的进程信息文件中。
4、令牌,为流量控制的一个单位,剩余令牌数量为正,表明有资源可以下发流量;剩余令牌数量为负,表明当前流量过大,需要被限制。
5、用户设备,为可以安装各类应用程序,并且能够将已安装的应用程序中提供的对象进行显示的电子设备,该电子设备可以是移动的,也可以是固定的。例如,手机、平板电脑、各类可穿戴设备、车载设备、个人数字助理(personal digital assistant,PDA)、销售终端(point of sales,POS)、地铁站内的监控设备或其它能够实现上述功能的电子设备等。
现有技术中采用的NVIDIA的GRID虚拟化方案存在GRID不能完全支持CUDA通用计算,使用Unified Memory的CUDA程序无法在vGPU上运行,再者,vGPU技术需要license,而license一旦过期,所有的附加功能全部消失。
此外,现有技术还采用了使用应用程序接口(API)拦截并将申请显存和Kernel函数发往宿主机中的Manager,以使Manager执行后再返回执行结果来到达GPU虚拟化,而这种API拦截方案存在以下问题:(1)只要有关显存申请和Kernel函数,虚拟机都要通过远程过程调用(Remote Procedure Call,RPC)调用方式发往宿主机中的Manager,对于计算量特别大,或频繁执行Kernel函数的应用程序来说,性能损坏非常大;(2)API拦截方式需要Manager建立指针映射关系,Manager一旦重启,之前建立的关系会丢失;(3)Manager一旦挂掉,所有需要执行Kernel函数的应用程序会被全部挂起,导致无法执行任务;(4)对每个应用程序能使用的GPU资源没有限制,在资源共享公平性上没有保证。
为了解决现有技术存在的以上问题,本发明实施例给出了解决方案,参考图2a所示的应用场景示意图,图2a中的服务器12可以为云平台侧用于实现基于容器的GPU虚拟化的设备,服务器12,也可称作物理机,根据用户的GPU资源申请请求,可以在物理机上创建至少一个容器,以在每一个容器上实现GPU虚拟化,物理机包括操作平台Platform和管理器Manager,每一个容器中包括应用Application、标准库和代理库,标准库由驱动Drv负责,而代理库由代理驱动负责,可以记为AgentDrv,参考图2b所示的服务器12的执行逻辑架构图,基于图2a和图2b,本发明实现基于容器的GPU虚拟化的过程为:服务器12向基于用户设备11向用户10展示GPU资源申请操作界面,然后用户10基于该操作平台Platform可以输入所要申请的GPU资源,然后基于操作平台向服务器12中的Manager发送GPU资源申请请求,Manager根据上述GPU资源申请请求中携带的所要申请的GPU资源,为待创建容器配置GPU资源;然后将配置GPU资源的GPU配置信息和待创建容器的容器配置信息写入控制配置文件中;并根据所要申请的GPU资源和所述待创建容器的挂载控制路径,创建并启动容器;在容器启动后,容器中的CUDA应用会对容器进行初始化。而在初始化过程中,本发明提出,CUDA应用将本需要发往标准库的注册请求先发往代理库,这样,代理库在接收到注册请求后,一方面,调用与上述标准库中同名的初始化函数,从容器的控制配置文件中提取容器的容器配置信息,然后代理库将容器配置信息发送给Manager,另一方面,代理库将注册请求转发给标准库,由标准库调用其内初始化函数完成容器的GPU初始化。由此实现了基于容器的GPU虚拟化。此外,Manager在接收到容器配置信息后,可以基于容器配置信息准确地确定出是哪个容器正在进行初始化,然后确定该容器中所有服务进程的进程信息,并将所有服务进程的进程信息写入到容器配置信息对应的进程信息文件中,进而使得后续执行基于容器的显存申请等任务时,可以直接读取控制配置文件或进程信息文件,而无需再将任务一一发送给Manager,进而也就避免了Manager崩溃时,容器内执行任务的所有应用因全部被挂起而导致的任务无法执行的情况发生。
需要说明的是,本发明中由代理库实施的基于容器的图形处理器GPU虚拟化方法时,可以由代理库中的AgentDrv实施,标准库在接收到注册请求后,可以由标准库中的Drv完成基于容器的GPU虚拟化。
需要说明的是,用户设备11与服务器12之间通过网络进行通信连接,该网络可以为局域网、广域网等。用户设备11可以为便携设备(例如:手机、平板、笔记本电脑等),也可以为个人电脑(PC,Personal Computer),服务器12可以为任何能够提供互联网服务的设备。
下面结合图2a所示的应用场景,参考图3-图11来描述根据本发明示例性实施方式提供的基于容器的图形处理器GPU虚拟化方法。需要注意的是,上述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。
如图3所示,为本发明实施例提供的基于容器的GPU虚拟化方法的流程示意图,以图2b所示的物理机和容器来实施上述方法为例进行说明,可以包括以下流程:
S31、Platform向Manager转发接收到的GPU资源申请请求。
本步骤中,用户可以基于服务器提供的操作平台填写用户所要申请的GPU资源,填写完成后提交,这样操作平台可以将用户触发的GPU资源申请请求发送至服务器物理机的Manager。
具体地,上述GPU资源可以但不限于为申请的最大GPU显存容量等。
S32、Manager接收到GPU资源申请请求后,根据GPU资源申请请求中携带的所要申请的GPU资源,为待创建容器配置GPU资源。
本步骤中,Manager在接收到GPU资源申请请求后,为用户分配一个容器(即步骤S32中的待创建容器),然后根据用户所要申请的GPU资源为该容器配置为容器配置GPU资源。
S33、Manager将配置GPU资源的GPU配置信息和待创建容器的容器配置信息写入控制配置文件中。
本步骤中,Manager在为容器配置GPU资源过程中,为了后续调用方便,可以将GPU资源的GPU资源配置信息和容器的容器配置信息写入到控制配置文件中。
具体地,可以按照图4所示的流程对控制配置文件进行存储,包括以下步骤:
S41、为容器创建控制目录。
S42、在所述控制目录下写入控制配置文件。
图4所示的流程中,在创建容器后,可以为该容器创建唯一的控制目录,然后将该步骤S33中的控制配置文件写入到控制目录下。这样一来,由于各个容器的控制目录不同,容器可以基于其唯一的控制目录读取控制配置文件,由此避免了读取的控制配置文件发生紊乱的情况发生。
可选地,本发明中的GPU配置信息可以但不限于包括GPU的总线ID、GPU设备号、容器申请的GPU核数、显存容量和标准库的版本信息等;以及本发明中的容器配置信息可以但不限于包括容器名称和容器的身份标识号码等。具体地,GPU的总线ID可以用GPU的BusID,用UID来表示容器的身份标识号码。
S34、Manager将待创建容器的挂载控制路径和待创建容器配置的GPU配置信息发送给Platform。
本步骤中,Manager为了能够创建容器,会为该容器配置一个挂载控制路径,为了便于Platform创建容器,Manager会将配置的容器需要的挂载控制路径和GPU配置信息发送给Platform。
具体地,由于Platform仅识别GPU设备的GPU设备号,故Manager在向Platform发送GPU配置信息,可以仅发送GPU设备号。
S35、Platform根据所要申请的GPU资源、GPU配置信息和待创建容器的挂载控制路径,创建并启动容器。
本步骤中,当Platform收到待创建容器的挂载控制路径和GPU设备号后,会基于GPU设备号和需要的挂载控制路径,进行容器拉起操作,同时根据用户所要申请的GPU资源创建并启动容器。
S36、CUDA应用在容器启动后初始化过程中向代理库发送注册请求。
本步骤中,容器创建完成后,为了可以在容器上运行业务,为用户提供服务,需要对容器进行初始化处理,则在初始化过程中,CUDA会调用culnit初始化函数,该函数为所有执行CUDA通用计算首要调用的函数。为了避免后续执行所有任务时都需要发往Manager而存在因Manager出现问题而导致任务无法完成的情况发生,本申请中提供了代理库,且在代理库中配置与标准库中同名的函数,这样一来,当CUDA进行容器初始化时,将需要发往标准库的注册请求先发送给代理库,然后由代理库执行一系列操作后再发往标准库。
可选地,在执行步骤S36之前,还包括:
CUDA确认所述代理库中存储有初始化函数。
具体地,CUDA通过调用代理库中与标准库同名的culnit函数来拦截调用标准库中的culnit函数以实现向代理库发送注册请求。具体实施时,CUDA可以使用动态库加载的方式调用代理库中的初始化函数,大致过程为:按照顺序到指定的位置读取动态库文件提供的函数符号表,根据函数名查找函数符号表中是否有当前调用的函数名,当查找到该函数名时,就认为该函数可以使用,并将该函数的地址加载到内存中,当再次调用时就不需要去函数符号表中进行查找,可直接使用代理库本身编译后提供的与标准库同名的函数,这样就可以将代理库中的同名的函数加载到内存中,当调用该函数时就会先调用代理库中同名的函数,进而使得代理库在向标准库发送注册请求之前,执行一些额外的操作,例如向Manager发送用于让Manager准确地获知当前执行初始化的容器的相关信息。
S37、代理库在接收到注册请求后,调用与标准库中同名的初始化函数,从容器的控制配置文件中提取容器的容器配置信息。
可选地,本发明中的控制配置文件存储于物理机为所述容器创建的控制目录下,则可以按照下述过程实施步骤S37,包括:
代理库从所述容器的控制目录下获取所述控制配置文件,并从所述控制配置文件中提取所述容器的容器配置信息。
本步骤中,Manager为每一容器创建唯一的控制目录,这样,代理库在接收到注册请求后,可以从该容器唯一的控制目录下获取控制配置文件,进而可以从该控制配置文件中提取出容器的容器配置信息。具体地,在提取容器配置信息时,可以仅提取容器名称和容器的UID。
S38、代理库将所述容器配置信息发送给Manager。
S39、代理库将注册请求转发给所述标准库。
本步骤中,代理库可以通过RPC方式将提取到的容器配置信息发送给Manager,这样一来,Manager可以准确地确定出当前正在进行GPU虚拟化的是哪个容器。另一方面,由于CUDA调用的是代理库中的culnit函数,并不是CUDA应用实际应该调用的标准库中的culnit函数,故仅基于代理库中的culnit函数无法完成容器的GPU虚拟化,为了完成容器的GPU虚拟化操作,代理库还需要将注册请求发送给标准库,即让CUDA调用标准库中的culnit函数,以完成容器的初始化操作,而当完成初始化这一操作后,相当于将GPU资源成功配置到该容器上,从而实现了容器的GPU虚拟化。
具体实施时,本发明对步骤S38和S39的执行顺序不进行限定。
S310、Manager在接收到容器配置信息后,根据容器配置信息确定容器中服务进程的进程信息。
本步骤中,Manager基于接收到的容器名称和UID,可以确定容器名称和UID对应的容器中所有服务进程的进程信息。可选地,本发明中的进程信息可以但不限于为进程身份标识号码(PID)。
S311、Manager将进程信息写入到容器配置信息对应的进程信息文件中。
本步骤中,Manager在确定出步骤S309中容器中所有服务进程的PID后,可以将其写入到进程信息文件(PID文件)。
具体地,Manager可以将PID文件存储至容器的控制配置文件所在的控制目录下,也就是说,针对每一容器,该容器的控制配置文件与PID文件存储于Manager为该容器创建的控制目录下,便于后续查找。
S312、标准库调用其内初始化函数完成容器的GPU初始化。
本步骤中,标准库在接收到注册请求后,可以其内的culnit函数完成容器的初始化,即:将用户申请的GPU资源成功配置到容器上,这样也就实现了容器的GPU虚拟化。
需要说明的是,图3中与代理库的相关流程,实际上是管理代理库的AgentDrv实施的,同理,图3中有关标准库的流程,实际上是管理标准库的Drv执行的。
图3所述基于容器的GPU虚拟化流程中,通过存储控制配置文件和PID文件,后续用户基于容器申请显存或需要执行Kernel函数时,只需从控制配置文件或PID文件获取需要获取的信息,而无需将任务通过RPC一一发往Manager,即不限于多次向Manager发送RPC请求,有效解决了现有技术中每次都需要将任务通过RPC发往Manager时,因PRC本身的调用延迟到导致的增加任务的处理时间,同时也避免了因Manager故障而导致的容器中所有任务无法执行的情况发生,减少性能损耗,此外,由于本发明中Manager在进行容器的GPU虚拟化时,不需要维护指针映射关系,Manager重启不会对容器中已经运行的应用造成影响。
在按照图3所示的流程完成基于容器的GPU虚拟化之后,即可向用户提供服务,以用户基于容器申请显存为例进行说明,如图5所示,为本发明实施例提供的显存申请处理流程示意图,可以包括以下步骤:
S51、CUDA在接收到用户触发的显存申请请求后,将所述显存申请请求转发给代理库。
本发明中的显存申请请求携带有所要申请的显存申请容量。
本步骤中,用户在需要执行一些与显存相关的业务时,会向CUDA发送显存申请指令,同初始化流程类似,CUDA会向代理库发送显存申请请求,可以理解为,CUDA会调用代理库中与显存相关的函数。具体地,代理库实现标准库中所有同名的函数,调用与显存相关的函数就是调用代理库中的与显存相关的同名的函数,相当于代理库发送CUDA应用发送了显存申请的请求。
具体地,本发明中与显存申请相关的函数可以但不限于为:显存申请函数和显存查询函数,其中,显存申请函数可以但不限于包括:cuMemAllocManaged,cuMemAlloc_v2,cuMemAlloc,cuMemAllocPitch_v2,cuMemAllocPitch,cuArrayCreate_v2,cuArrayCreate,cuArray3DCreate_v2,cuArray3DCreate,cuMipmappedArrayCreate等,而显存查询函数可以但不限于包括:cuDeviceTotalMem_v2,cuDeviceTotalMem,cuMemGetInfo_v2和cuMemGetInfo等。
S52、代理库在接收到显存申请请求后,确定所述容器已使用的显存的显存使用量。
具体地,代理库可以按照下述过程确定接收到显存申请请求,包括:代理库确定CUDA利用动态加载的方式调用代理库中与所述标准库中同名的显存申请函数;然后根据调用的显存申请函数确定接收到显存申请请求。
可选地,代理库可以按照图6所示的流程确定所述容器已使用的显存的显存使用量,包括以下步骤:
S61、利用预设的函数,确定在已分配的GPU上的服务进程的进程信息和各个服务进程占用的显存占用量。
本步骤中,以预设的函数为nvmlDeviceGetComputeRunningProcesses函数为例进行说明,代理库可以读取挂载到容器内部的nvmlDeviceGetComputeRunningProcesses函数来获取容器中当前所有在已分配的GPU设备上的服务进程的显存申请情况,即容器中在已分配的GPU设备上的所有服务进程的PID和各个服务进程占用的显存占用量。具体地,上述nvmlDeviceGetComputeRunningProcesses函数会以数组[{进程信息,显存占用量}……]的形式返回GPU设备的服务进程的PID和服务进程的显存占用量,利用上述函数返回的数组为[{PID1,10},{PID2,20},{PID2,40}],其中,PID1、PID2和PID3分别为服务进程1、服务进程2和服务进程3的进程信息,则可以得出服务进程1、服务进程2和服务进程3的显存占用量依次分别为10M、20M和40M。
S62、根据确定出的进程信息和所述容器的容器配置信息对应的进程信息文件包含的进程信息确定属于所述容器的进程信息。
本步骤中,代理库可以从容器的控制目录下PID文件中读取该容器中所有服务进程的PID,然后取步骤S61中确定出的在已分配的GPU设备上的所有服务进程的PID和读取到的该容器中所有服务进程的PID的交集,这样即可确定出属于当前正在运行且属于该容器的PID,也即确定出该容器中正在运行的服务进程。
S63、将属于所述容器的进程信息分别对应的服务进程占用的显存占用量的和值确定为所述容器已使用的显存的显存使用量。
在确定出该容器中正在运行的服务进程后,可以基于步骤S61中统计出的在已分配的GPU设备上的所有服务进程的显存占用量后,可以确定出该容器中正在运行的服务进程的显存占用量,然后将正在运行的服务进程的显存占用量进行求和处理,求和结果即为容器已使用的显存的显存使用量。
S53、代理库根据所述显存申请容量和所述显存使用量,确定所述容器使用的显存使用总量。
本步骤中,将图6所示的流程确定出的显存使用量和用户申请的显存申请容量的和值确定为容器使用的显存使用总量。例如,基于图6所示的流程确定出容器A的显存使用量为60M,而用户基于容器A申请的显存申请容量为10M,则可以确定出容器A的显存使用总量为70M。
S54、代理库若确定出所述显存使用总量大于所述显存容量,则返回显存申请失败的结果。
本步骤中,当代理库确定出容器的显存使用总量大于容器创建时配置的显存容量,则表示当前容器显存使用容量超过了限制,则向用户返回显存申请失败的结果,即不向标准库转发显存申请请求。需要说明的是,还可以返回用户可申请的显存申请容量,还以容器A为例进行说明,容器A配置GPU资源时的显存容量为65M,则可以明显确定出容器A的显存使用总量70M大于65M,则在向用户返回显存申请失败的结果时,可以返回用户最多可以申请65M-60M=5M的显存申请容量。
S55、代理库若确定出所述显存使用总量不大于所述显存容量,则向标准库转发所述显存申请请求。
本步骤中,当代理库确定出容器的显存使用总量不大于容器创建时配置的显存容量,则表示当前容器的显存容量还有剩余,还可以为用户分配,故此时可以将用户申请的显存申请请求转发给标准库,由标准库为用户分配显存,并将显存分配结果通过CUDA发送给用户。
需要说明的是,步骤S54和S55在实际应用中同一时间仅执行其中一个流程。
为了更好的理解显存申请流程,以容器A和容器B配置GPU资源时的显存容量均为50M为例进行说明,用户A基于容器A中CUDA通过调用cuMalloc函数申请的显存申请容量为10M,用户B基于容器B中CUDA通过调用cuMalloc函数申请的显存申请容量为20M,则代理库通过调用nvmlDeviceGetComputeRunningProcesses函数返回一个数组[{PID1,10},{PID2,20},{PID2,40}],可以得出运行在该容器分配的GPU设备上的服务进程的显存占用量,即:服务进程1使用10M显存,服务进程2使用20M显存,服务进程3使用40M显存。以代理库从容器A的控制目录下提取出的PID文件中包括PID1和PID3为例进行说明,则代理库可以对数组[{PID1,10},{PID2,20},{PID2,40}]中的服务进程的进程信息与PID文件中的进程信息取交集,则可以确定出在已配置的GPU设备上、容器A中正在运行的服务进程为服务进程1和服务进程3,则可以确定出容器A的显存使用量为10M+40M=50M,再基于用户A申请的显存申请容量10M可以确定出容器A的显存使用总量为50M+10M=60M,而60M显然大于容器A配置GPU资源时的显存容量50M,超过了容器A的显存限制,则代理库返回OutOfMemory,拒绝用户A的显存申请,即向用户A返回显存申请失败的结果。以代理库从容器B的控制目录下提取出的PID文件中包括PID2为例进行说明,则可以确定出容器B的显存使用量为20M,再基于用户B申请的显存申请容量20M可以确定出容器B的显存使用总量为20M+20M=40M<50M,即没有超过容器B的显存限制,则代理库可以将用户B的显存申请请求转发给标准库,通过调用标准库中的cuMalloc函数为用户B分配用户B基于容器B申请的显存,并将显存申请结果通过CUDA返回给用户B。
可选地,为了实现容器的GPU利用率的可控制,本发明提出,在实施图3或图5所示的流程的过程中定期对容器的GPU利用率进行监控,具体可以按照图7所示的流程对GPU利用率进行控制,包括以下步骤:
S71、代理库在确定容器中当前服务进程调用其内需要限速的函数时,则确定所述服务进程的剩余令牌数量。
本步骤中,当需要对一些任务涉及的函数进行限速时,可以对这些函数进行监控,当CUDA执行需要限速的函数时会调用代理库中这些函数,这样代理库可以确定出容器中服务进程调用其内需要限速的函数。
可选地,本发明中需要限速的函数可以但不限于包括KN函数,所述KN函数可以但不限于为:cuLaunchKernel_ptsz,cuLaunchKernel,cuLaunch,cuLaunchCooperativeKernel_ptsz,cuLaunchCooperativeKernel,cuLaunchGrid和cuLaunchGridAsync等。
S72、代理库确定剩余令牌数量是否满足限速条件,若是,则执行步骤S73;否则执行步骤S74。
本步骤中,上述限速条件可以为剩余令牌数量是否为大于预设阈值等,以该预设阈值为0为例进行说明,代理库可以确定服务进程当前的剩余令牌数量是否大于0,若是则表明容器当前GPU利用率低于用户基于容器申请的GPU核数,则表明容器还可以提供服务;若不大于0,则表明容器当前GPU利用率高于用户基于容器申请的GPU核数,即容器当前GPU利用率太高,为了保证容器的性能,可以对服务进程进行限速处理。
S73、代理库通过***睡眠函数或限速函数将所述服务进程挂起,以延迟所述服务进程调用标准库中所述需要限速的函数。
本步骤中,当剩余令牌数量不大于0时,则代理库可以在服务进程执行的需要限速的函数位置处***限速或睡眠函数,以暂停服务进行执行后续操作,这样有效延迟了服务进程调用标准库中所述需要限速的函数,进而缓解容器中GPU利用率。
S74、代理库允许所述服务进程调用标准库中所述需要限速的函数。
本步骤中,当剩余令牌数量大于0时,则代理库允许服务进程调用标准库中的所述需要限速的函数。
可选地,本发明中可以周期性地执行图7所示的流程,监控周期可以但不限于为100ms等。
优选地,在对GPU利用率进行控制过程中,还可以包括下述过程:
代理库根据所述容器的GPU利用率,更新所述剩余令牌数量。
当代理库允许服务进程调用标准库中的KN函数时,服务进程务必会占用容器的GPU资源,进而影响容器的GPU利用率,所以需要根据容器的GPU利用率对服务进程的剩余令牌数量进行更新处理。
可选地,代理库可以按照图8所示的流程更新剩余令牌数量,包括以下步骤:
S81、代理库利用查询函数查询所述容器的GPU利用率。
S82、代理库确定GPU利用率是否高于所述容器配置的GPU核数,若是,则执行步骤S83;否则,执行步骤S84。
S83、代理库减少所述剩余令牌数量。
S84、代理库增加所述剩余令牌数量。
具体地,可以按照下述公式实施步骤S81~S84:
上述公式中,CUcores为剩余令牌数量;CUconfig为容器配置的GPU核数;flag为标志位,其取值为:CUused为容器的GPU利用率。也就是说,当容器的GPU利用率小于容器配置的GPU核数,则flag取+1,进而可以得出更新后的剩余令牌数量为更新前的剩余令牌数量若容器的GPU利用率不小于容器配置的GPU核数,则flag取-1,进而可以得出更新后的剩余令牌数量为更新前的剩余令牌数量
可选地,本发明中当所述服务进程首次运行时,所述服务进程的剩余令牌数量为初始令牌数量,所述初始令牌数量为根据所述容器配置的GPU核数、GPU的统一计算架构CUDA核数和每个CUDA核所能承载的线程数确定出的。
具体地,初始令牌数量的表达式可以为:初始令牌数量=容器配置的GPU核数*GPU的统一计算架构CUDA核数*每个CUDA核所能承载的线程数。
需要说明的是,本发明可以启动2个线程,一个线程用于对容器的GPU利用率进行控制,即实施图7的流程,另一个线程则用于更新服务进程的剩余令牌数量,即实施图8所示的流程。
通过实施图7的流程,实现了对容器中GPU利用率进行监控和控制,这样一来,当用户A申请的容器A中GPU利用率较低,有空闲的GPU资源时,可以给其他使用,以实现多容器共享GPU资源,提高了GPU资源使用效率。另外,还可以保证GPU资源的公平性,在多容器共享GPU资源时,若用户A和用户B需要处理的任务都是计算消耗较大,此时若用户A和用户B申请的GPU使用率比例为8:2,则通过实施图7所示的流程提供的剩余令牌数量监控方法,在基于容器A处理用户A的任务时,若GPU利用率太高则暂停处理,处理用户B的任务的情况与处理用户A的任务情况类似,这样一来,可以使得处理用户A的处理用户B的计算时间的比例也为8:2,明显区别于基于虚拟机的先到先得的处理方法,保证了用户申请资源的公平性。
本发明提供的基于容器的图形处理器GPU虚拟化方法,基于用户申请的GPU资源申请请求创建容器,并将容器与GPU相关配置信息写入到控制配置文件中,然后在容器启动后,先由代理库内的初始化函数拦截注册请求,从控制配置文件中提取容器配置信息并发送给物理机,然后代理库将注册请求发送给标准库,由标准库完成容器的GPU虚拟化,这样一来,物理机可以找到正确的容器,并确定该容器中服务进程的进程信息,从而将进程信息写入到该容器配置信息对应的进程信息文件中,这样后续基于容器的显存申请时可以直接读取控制配置文件或进程信息文件无需再将请求发送给物理机,避免了因物理机挂掉而导致的所有容器中执行的函数全部被挂起的情况发生。此外,本发明中实现的是基于容器的GPU初始化,能够支持所有CUDA特性,同时支持各种型号的GPU计算卡,用户无需升级计算卡,切换代价小。
基于同一发明构思,本发明实施例中还提供了一种代理库控制装置,由于上述装置解决问题的原理与代理库侧提供的基于容器的图形处理器GPU虚拟化方法相似,因此上述装置的实施可以参见方法的实施,重复之处不再赘述。
如图9所示,为本发明实施例提供的代理库控制装置的结构示意图,包括:
接收单元91,用于接收所述统一计算架构CUDA应用在容器启动后初始化过程中发送的注册请求,所述注册请求用于发往标准库,所述容器为物理机在接收到GPU资源申请请求后创建;
提取单元92,用于调用与所述标准库中同名的初始化函数,从所述容器的控制配置文件中提取所述容器的容器配置信息,所述控制配置文件存储有所述容器的容器配置信息及物理机根据所述GPU资源申请请求为所述容器配置GPU资源的GPU配置信息;
第一发送单元93,用于将所述容器配置信息发送给物理机,以使所述物理机根据所述容器配置信息确定所述容器中服务进程的进程信息,并将所述进程信息写入到所述容器配置信息对应的进程信息文件中;
第二发送单元94,用于将所述注册请求转发给所述标准库,由所述标准库调用其内初始化函数完成所述容器的GPU初始化。
可选地,所述控制配置文件与所述进程信息文件存储于物理机为所述容器创建的控制目录下;
所述提取单元92,具体用于从所述容器的控制目录下获取所述控制配置文件,并从所述控制配置文件中提取所述容器的容器配置信息。
可选地,所述容器的GPU配置信息包括显存容量,以及
所述接收单元91,还用于接收CUDA转发的显存申请请求,所述显存申请请求携带有所要申请的显存申请容量;
在此基础之上,本发明提供的代理库控制装置,还包括:
第一确定单元95,用于确定所述容器已使用的显存的显存使用量;根据所述显存申请容量和所述显存使用量,确定所述容器使用的显存使用总量;
结果反馈单元96,用于若确定出所述显存使用总量大于所述显存容量,则返回显存申请失败的结果。
可选地,所述第一确定单元95,具体用于利用预设的函数,确定在已分配的GPU上的服务进程的进程信息和各个服务进程占用的显存占用量;根据确定出的进程信息和所述容器的容器配置信息对应的进程信息文件包含的进程信息确定属于所述容器的进程信息;将属于所述容器的进程信息分别对应的服务进程占用的显存占用量的和值确定为所述容器已使用的显存的显存使用量。
可选地,所述接收单元91,具体用于代理库确定CUDA利用动态加载的方式调用代理库中与所述标准库中同名的显存申请函数;根据所述显存申请函数确定接收到显存申请请求。
可选地,本发明提供的代理库控制装置,还包括:
第二确定单元97,用于在确定容器中当前服务进程调用其内需要限速的函数时,则确定所述服务进程的剩余令牌数量;
限速处理单元98,用于若确定出所述剩余令牌数量满足限速条件,则通过***睡眠函数或限速函数将所述服务进程挂起,以延迟所述服务进程调用标准库中所述需要限速的函数;若确定出所述剩余令牌数量不满足限速条件,则允许所述服务进程调用标准库中所述需要限速的函数。
可选地,本发明提供的代理库控制装置,还包括:
更新单元99,用于根据所述容器的GPU利用率,更新所述剩余令牌数量。
进一步地,所述更新单元99,具体用于利用查询函数查询所述容器的GPU利用率;若确定出所述GPU利用率高于所述容器配置的GPU核数,减少所述剩余令牌数量;若确定出所述GPU利用率不高于所述容器配置的GPU核数,则增加所述剩余令牌数量;
其中,当所述服务进程首次运行时,所述服务进程的剩余令牌数量为初始令牌数量,所述初始令牌数量为根据所述容器配置的GPU核数、GPU的统一计算架构CUDA核数和每个CUDA核所能承载的线程数确定出的。
为了描述的方便,以上各部分按照功能划分为各模块(或单元)分别描述。当然,在实施本发明时可以把各模块(或单元)的功能在同一个或多个软件或硬件中实现。
基于同一发明构思,本发明实施例中还提供了一种基于容器的图形处理器GPU虚拟化装置,由于上述装置解决问题的原理与物理机侧提供的基于容器的图形处理器GPU虚拟化方法相似,因此上述装置的实施可以参见方法的实施,重复之处不再赘述。
如图10所示,为本发明实施例提供的基于容器的图形处理器GPU虚拟化装置的结构示意图,包括:
资源配置单元101,用于在接收到GPU资源申请请求后,根据所述GPU资源申请请求中携带的所要申请的GPU资源,为待创建容器配置GPU资源;
第一信息写入单元102,用于将配置GPU资源的GPU配置信息和待创建容器的容器配置信息写入控制配置文件中;
创建单元103,用于根据所要申请的GPU资源、GPU配置信息和所述待创建容器的挂载控制路径,创建并启动所述容器;
接收单元104,用于接收所述容器中代理库在初始化过程中发送的容器配置信息,所述容器配置信息为所述代理库在接收到注册请求后,调用与标准库中同名的初始化函数,从所述容器的控制配置文件中提取到的;
确定单元105,用于根据所述容器配置信息确定所述容器中服务进程的进程信息;
第二信息写入单元106,用于将所述进程信息写入到所述容器配置信息对应的进程信息文件中。
可选地,所述GPU配置信息包括GPU的总线ID、容器申请的GPU核数、显存容量和标准库的版本信息;以及所述容器配置信息包括容器名称和容器的身份标识号码。
可选地,本发明提供的基于容器的图形处理器GPU虚拟化装置,还包括:
文件写入单元107,用于将所述控制配置文件和所述进程信息文件写入为所述容器创建的控制目录下。
为了描述的方便,以上各部分按照功能划分为各模块(或单元)分别描述。当然,在实施本发明时可以把各模块(或单元)的功能在同一个或多个软件或硬件中实现。
在介绍了本发明示例性实施方式的基于容器的图形处理器GPU虚拟化方法、装置和可读介质之后,接下来,介绍根据本发明的另一示例性实施方式的计算装置。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为***、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“***”。
在一些可能的实施方式中,根据本发明的计算装置可以至少包括至少一个处理单元、以及至少一个存储单元。其中,所述存储单元存储有程序代码,当所述程序代码被所述处理单元执行时,使得所述处理单元执行本说明书上述描述的根据本发明各种示例性实施方式的基于容器的图形处理器GPU虚拟化方法中的步骤。例如,所述处理单元可以执行如图3所示的步骤S31~S312中基于容器的图形处理器GPU虚拟化流程。
下面参照图11来描述根据本发明的这种实施方式的计算装置110。图11显示的计算装置110仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图11所示,计算装置110以通用计算设备的形式表现。计算装置110的组件可以包括但不限于:上述至少一个处理单元111、上述至少一个存储单元112、连接不同***组件(包括存储单元112和处理单元111)的总线113。
总线113表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、***总线、处理器或者使用多种总线结构中的任意总线结构的局域总线。
存储单元112可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)1121和/或高速缓存存储器1122,还可以进一步包括只读存储器(ROM)1123。
存储单元112还可以包括具有一组(至少一个)程序模块1124的程序/实用工具1125,这样的程序模块1124包括但不限于:操作***、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
计算装置110也可以与一个或多个外部设备114(例如键盘、指向设备等)通信,还可与一个或者多个使得用户能与计算装置110交互的设备通信,和/或与使得该计算装置110能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口115进行。并且,计算装置110还可以通过网络适配器116与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器116通过总线113与用于计算装置11的其它模块通信。应当理解,尽管图中未示出,可以结合计算装置110使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID***、磁带驱动器以及数据备份存储***等。
在一些可能的实施方式中,本发明提供的基于容器的图形处理器GPU虚拟化方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在计算机设备上运行时,所述程序代码用于使所述计算机设备执行本说明书上述描述的根据本发明各种示例性实施方式的基于容器的图形处理器GPU虚拟化方法中的步骤,例如,所述计算机设备可以执行如图3所示的步骤S31~S312中基于容器的图形处理器GPU虚拟化流程。
本发明的实施方式的用于基于容器的图形处理器GPU虚拟化方法的程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在计算设备上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (15)

1.一种基于容器的图形处理器GPU虚拟化方法,其特征在于,包括:
代理库接收统一计算架构CUDA应用在容器启动后初始化过程中发送的注册请求,所述注册请求用于发往标准库,所述容器为物理机在接收到GPU资源申请请求后创建;
所述代理库调用与所述标准库中同名的初始化函数,从所述容器的控制配置文件中提取所述容器的容器配置信息,所述控制配置文件存储有所述容器的容器配置信息及物理机根据所述GPU资源申请请求为所述容器配置GPU资源的GPU配置信息;
所述代理库将所述容器配置信息发送给物理机,以使所述物理机根据所述容器配置信息确定所述容器中服务进程的进程信息,并将所述进程信息写入到所述容器配置信息对应的进程信息文件中;
所述代理库将所述注册请求转发给所述标准库,由所述标准库调用其内初始化函数完成所述容器的GPU初始化。
2.如权利要求1所述的方法,其特征在于,所述控制配置文件与所述进程信息文件存储于物理机为所述容器创建的控制目录下;
所述代理库从所述容器的控制配置文件中提取所述容器的容器配置信息,具体包括:
所述代理库从所述容器的控制目录下获取所述控制配置文件,并从所述控制配置文件中提取所述容器的容器配置信息。
3.如权利要求2所述的方法,其特征在于,所述容器的GPU配置信息包括显存容量,所述方法还包括:
所述代理库接收CUDA转发的显存申请请求,所述显存申请请求携带有所要申请的显存申请容量;
所述代理库确定所述容器已使用的显存的显存使用量;
所述代理库根据所述显存申请容量和所述显存使用量,确定所述容器使用的显存使用总量;
所述代理库若确定出所述显存使用总量大于所述显存容量,则返回显存申请失败的结果。
4.如权利要求3所述的方法,其特征在于,所述代理库确定所述容器已使用的显存的显存使用量,具体包括:
利用预设的函数,确定在已分配的GPU上的服务进程的进程信息和各个服务进程占用的显存占用量;
根据确定出的进程信息和所述容器的容器配置信息对应的进程信息文件包含的进程信息确定属于所述容器的进程信息;
将属于所述容器的进程信息分别对应的服务进程占用的显存占用量的和值确定为所述容器已使用的显存的显存使用量。
5.如权利要求3所述的方法,其特征在于,所述代理库接收CUDA转发的显存申请请求,具体包括:
代理库确定CUDA利用动态加载的方式调用代理库中与所述标准库中同名的显存申请函数;
根据所述显存申请函数确定接收到显存申请请求。
6.如权利要求1或3所述的方法,其特征在于,还包括:
所述代理库在确定容器中当前服务进程调用其内需要限速的函数时,则确定所述服务进程的剩余令牌数量;
若确定出所述剩余令牌数量满足限速条件,则通过***睡眠函数或限速函数将所述服务进程挂起,以延迟所述服务进程调用标准库中所述需要限速的函数;
若确定出所述剩余令牌数量不满足限速条件,则允许所述服务进程调用标准库中所述需要限速的函数。
7.如权利要求6所述的方法,其特征在于,还包括:
所述代理库根据所述容器的GPU利用率,更新所述剩余令牌数量。
8.如权利要求7所述的方法,其特征在于,所述代理库根据所述容器的GPU利用率,更新所述剩余令牌数量,具体包括:
所述代理库利用查询函数查询所述容器的GPU利用率;
若确定出所述GPU利用率高于所述容器配置的GPU核数,减少所述剩余令牌数量;
若确定出所述GPU利用率不高于所述容器配置的GPU核数,则增加所述剩余令牌数量;
其中,当所述服务进程首次运行时,所述服务进程的剩余令牌数量为初始令牌数量,所述初始令牌数量为根据所述容器配置的GPU核数、GPU的统一计算架构CUDA核数和每个CUDA核所能承载的线程数确定出的。
9.一种基于容器的图形处理器GPU虚拟化方法,其特征在于,包括:
在接收到GPU资源申请请求后,根据所述GPU资源申请请求中携带的所要申请的GPU资源,为待创建容器配置GPU资源;
将配置GPU资源的GPU配置信息和待创建容器的容器配置信息写入控制配置文件中;
根据所要申请的GPU资源、GPU配置信息和所述待创建容器的挂载控制路径,创建并启动所述容器;
接收所述容器中代理库在初始化过程中发送的容器配置信息,所述容器配置信息为所述代理库在接收到注册请求后,调用与标准库中同名的初始化函数,从所述容器的控制配置文件中提取到的;
根据所述容器配置信息确定所述容器中服务进程的进程信息;
将所述进程信息写入到所述容器配置信息对应的进程信息文件中。
10.如权利要求9所述的方法,其特征在于,所述GPU配置信息包括GPU的总线ID、容器申请的GPU核数、显存容量和标准库的版本信息;以及所述容器配置信息包括容器名称和容器的身份标识号码。
11.如权利要求9所述的方法,其特征在于,还包括:
将所述控制配置文件和所述进程信息文件写入为所述容器创建的控制目录下。
12.一种代理库控制装置,其特征在于,包括:
接收单元,用于接收所述统一计算架构CUDA应用在容器启动后初始化过程中发送的注册请求,所述注册请求用于发往标准库,所述容器为物理机在接收到GPU资源申请请求后创建;
提取单元,用于调用与所述标准库中同名的初始化函数,从所述容器的控制配置文件中提取所述容器的容器配置信息,所述控制配置文件存储有所述容器的容器配置信息及物理机根据所述GPU资源申请请求为所述容器配置GPU资源的GPU配置信息;
第一发送单元,用于将所述容器配置信息发送给物理机,以使所述物理机根据所述容器配置信息确定所述容器中服务进程的进程信息,并将所述进程信息写入到所述容器配置信息对应的进程信息文件中;
第二发送单元,用于将所述注册请求转发给所述标准库,由所述标准库调用其内初始化函数完成所述容器的GPU初始化。
13.一种基于容器的图形处理器GPU虚拟化装置,其特征在于,包括:
资源配置单元,用于在接收到GPU资源申请请求后,根据所述GPU资源申请请求中携带的所要申请的GPU资源,为待创建容器配置GPU资源;
第一信息写入单元,用于将配置GPU资源的GPU配置信息和待创建容器的容器配置信息写入控制配置文件中;
创建单元,用于根据所要申请的GPU资源、GPU配置信息和所述待创建容器的挂载控制路径,创建并启动所述容器;
接收单元,用于接收所述容器中代理库在初始化过程中发送的容器配置信息,所述容器配置信息为所述代理库在接收到注册请求后,调用与标准库中同名的初始化函数,从所述容器的控制配置文件中提取到的;
确定单元,用于根据所述容器配置信息确定所述容器中服务进程的进程信息;
第二信息写入单元,用于将所述进程信息写入到所述容器配置信息对应的进程信息文件中。
14.一种计算机可读介质,存储有计算机可执行指令,其特征在于,所述计算机可执行指令用于执行如权利要求1至11任一权利要求所述的方法。
15.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1至11任一权利要求所述的方法。
CN201910055399.6A 2019-01-21 2019-01-21 基于容器的图形处理器gpu虚拟化方法、装置和可读介质 Pending CN110196753A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910055399.6A CN110196753A (zh) 2019-01-21 2019-01-21 基于容器的图形处理器gpu虚拟化方法、装置和可读介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910055399.6A CN110196753A (zh) 2019-01-21 2019-01-21 基于容器的图形处理器gpu虚拟化方法、装置和可读介质

Publications (1)

Publication Number Publication Date
CN110196753A true CN110196753A (zh) 2019-09-03

Family

ID=67751165

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910055399.6A Pending CN110196753A (zh) 2019-01-21 2019-01-21 基于容器的图形处理器gpu虚拟化方法、装置和可读介质

Country Status (1)

Country Link
CN (1) CN110196753A (zh)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110688202A (zh) * 2019-10-09 2020-01-14 腾讯科技(深圳)有限公司 服务进程调度方法、装置、设备及存储介质
CN111078412A (zh) * 2019-12-12 2020-04-28 中山大学 一种通过api截获对gpu进行资源管理的方法
CN111274041A (zh) * 2020-02-24 2020-06-12 北京达佳互联信息技术有限公司 图形处理器挂载方法、装置、电子设备及存储介质
CN111880936A (zh) * 2020-07-31 2020-11-03 广州华多网络科技有限公司 资源调度方法、装置、容器集群、计算机设备和存储介质
CN111966504A (zh) * 2020-10-23 2020-11-20 腾讯科技(深圳)有限公司 图形处理器中的任务处理方法及相关设备
CN112527513A (zh) * 2021-02-09 2021-03-19 南京飞灵智能科技有限公司 多个gpu动态分配方法及***
CN112825042A (zh) * 2019-11-20 2021-05-21 上海商汤智能科技有限公司 资源管理方法和装置、电子设备及存储介质
CN113742171A (zh) * 2021-08-17 2021-12-03 苏州浪潮智能科技有限公司 一种容器的gpu进程统计方法和装置
CN114418828A (zh) * 2021-12-23 2022-04-29 北京百度网讯科技有限公司 显存管理方法、装置、设备、存储介质及程序产品
CN115114003A (zh) * 2022-07-04 2022-09-27 上海交通大学 Gpu动态多任务可控并发执行方法及***
CN116188240A (zh) * 2022-12-28 2023-05-30 摩尔线程智能科技(北京)有限责任公司 一种用于容器的gpu虚拟化方法及装置、电子设备
CN110688202B (zh) * 2019-10-09 2024-06-21 腾讯科技(深圳)有限公司 服务进程调度方法、装置、设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103631634A (zh) * 2012-08-24 2014-03-12 中国电信股份有限公司 实现图形处理器虚拟化的方法与装置
CN106406977A (zh) * 2016-08-26 2017-02-15 山东乾云启创信息科技股份有限公司 一种gpu虚拟化实现***及方法
CN107015845A (zh) * 2015-12-02 2017-08-04 想象技术有限公司 Gpu虚拟化
US20190004868A1 (en) * 2017-07-01 2019-01-03 TuSimple System and method for distributed graphics processing unit (gpu) computation

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103631634A (zh) * 2012-08-24 2014-03-12 中国电信股份有限公司 实现图形处理器虚拟化的方法与装置
CN107015845A (zh) * 2015-12-02 2017-08-04 想象技术有限公司 Gpu虚拟化
CN106406977A (zh) * 2016-08-26 2017-02-15 山东乾云启创信息科技股份有限公司 一种gpu虚拟化实现***及方法
US20190004868A1 (en) * 2017-07-01 2019-01-03 TuSimple System and method for distributed graphics processing unit (gpu) computation

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110688202A (zh) * 2019-10-09 2020-01-14 腾讯科技(深圳)有限公司 服务进程调度方法、装置、设备及存储介质
CN110688202B (zh) * 2019-10-09 2024-06-21 腾讯科技(深圳)有限公司 服务进程调度方法、装置、设备及存储介质
CN112825042A (zh) * 2019-11-20 2021-05-21 上海商汤智能科技有限公司 资源管理方法和装置、电子设备及存储介质
CN111078412B (zh) * 2019-12-12 2023-03-14 中山大学 一种通过api截获对gpu进行资源管理的方法
CN111078412A (zh) * 2019-12-12 2020-04-28 中山大学 一种通过api截获对gpu进行资源管理的方法
CN111274041A (zh) * 2020-02-24 2020-06-12 北京达佳互联信息技术有限公司 图形处理器挂载方法、装置、电子设备及存储介质
CN111880936A (zh) * 2020-07-31 2020-11-03 广州华多网络科技有限公司 资源调度方法、装置、容器集群、计算机设备和存储介质
CN111880936B (zh) * 2020-07-31 2023-08-08 广州华多网络科技有限公司 资源调度方法、装置、容器集群、计算机设备和存储介质
CN111966504A (zh) * 2020-10-23 2020-11-20 腾讯科技(深圳)有限公司 图形处理器中的任务处理方法及相关设备
CN112527513A (zh) * 2021-02-09 2021-03-19 南京飞灵智能科技有限公司 多个gpu动态分配方法及***
CN112527513B (zh) * 2021-02-09 2021-05-28 南京飞灵智能科技有限公司 多个gpu动态分配方法及***
CN113742171A (zh) * 2021-08-17 2021-12-03 苏州浪潮智能科技有限公司 一种容器的gpu进程统计方法和装置
CN113742171B (zh) * 2021-08-17 2023-07-14 苏州浪潮智能科技有限公司 一种容器的gpu进程统计方法和装置
CN114418828A (zh) * 2021-12-23 2022-04-29 北京百度网讯科技有限公司 显存管理方法、装置、设备、存储介质及程序产品
CN115114003A (zh) * 2022-07-04 2022-09-27 上海交通大学 Gpu动态多任务可控并发执行方法及***
CN115114003B (zh) * 2022-07-04 2024-05-28 上海交通大学 Gpu动态多任务可控并发执行方法及***
CN116188240A (zh) * 2022-12-28 2023-05-30 摩尔线程智能科技(北京)有限责任公司 一种用于容器的gpu虚拟化方法及装置、电子设备
CN116188240B (zh) * 2022-12-28 2024-04-05 摩尔线程智能科技(北京)有限责任公司 一种用于容器的gpu虚拟化方法及装置、电子设备

Similar Documents

Publication Publication Date Title
CN110196753A (zh) 基于容器的图形处理器gpu虚拟化方法、装置和可读介质
US11714684B2 (en) Methods and apparatus to manage compute resources in a hyperconverged infrastructure computing environment
CN110764901B (zh) 基于gpu资源的数据处理方法、电子设备及***
Pahl Containerization and the paas cloud
CN106301829B (zh) 一种网络业务扩容的方法和装置
CN104253865B (zh) 一种混合型桌面云服务平台的两级管理方法
US8141090B1 (en) Automated model-based provisioning of resources
US7912955B1 (en) Model-based provisioning of resources
CN107689882A (zh) 一种虚拟化网络中业务部署的方法和装置
CN112988400B (zh) 显存优化方法、装置、电子设备以及可读存储介质
WO2019060228A1 (en) SYSTEMS AND METHODS FOR SERVICE INSTANCATION ON SERVICES
CN110032413A (zh) 一种桌面虚拟化方法、相关设备及计算机存储介质
JP2022516486A (ja) リソース管理方法と装置、電子デバイス、及び記録媒体
WO2017190357A1 (zh) 一种网络功能实例的管理方法及相关设备
WO2020177564A1 (zh) Vnf的生命周期管理方法及装置
CN109375986A (zh) 基于元数据的虚拟机配置
CN114244717B (zh) 虚拟网卡资源的配置方法、装置、计算机设备及介质
CN107491340B (zh) 跨物理机的巨型虚拟机实现方法
CN107066292A (zh) 服务器环境部署方法和装置
US20150150004A1 (en) Determining virtual machine placement
CA2982132A1 (en) Network service infrastructure management system and method of operation
CN112000439A (zh) 一种实现云原生应用管理虚拟机的方法
KR20190028210A (ko) 컨테이너 기반 인공지능 어플리케이션을 배포하는 클라우드 서비스 방법과 시스템
CN113377493A (zh) 一种容器云仿真***及其设计方法
Li et al. Kubernetes virtual warehouse placement based on reinforcement learning

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