CN113377545A - 用于分配gpu物理内存的方法及装置 - Google Patents
用于分配gpu物理内存的方法及装置 Download PDFInfo
- Publication number
- CN113377545A CN113377545A CN202110772139.8A CN202110772139A CN113377545A CN 113377545 A CN113377545 A CN 113377545A CN 202110772139 A CN202110772139 A CN 202110772139A CN 113377545 A CN113377545 A CN 113377545A
- Authority
- CN
- China
- Prior art keywords
- memory
- gpu
- virtual
- video
- video memory
- 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.)
- Granted
Links
- 230000015654 memory Effects 0.000 title claims abstract description 970
- 238000000034 method Methods 0.000 title claims abstract description 55
- 238000013508 migration Methods 0.000 claims description 62
- 230000005012 migration Effects 0.000 claims description 62
- 238000013507 mapping Methods 0.000 claims description 33
- 238000004590 computer program Methods 0.000 claims description 9
- 238000010586 diagram Methods 0.000 description 14
- 238000004891 communication Methods 0.000 description 9
- 238000013135 deep learning Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 7
- 238000012549 training Methods 0.000 description 7
- 238000012545 processing Methods 0.000 description 6
- 239000003795 chemical substances by application Substances 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 238000013527 convolutional neural network Methods 0.000 description 3
- 238000002955 isolation Methods 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000010977 jade Substances 0.000 description 1
- 239000002184 metal Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
- 230000000007 visual effect Effects 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/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/5011—Allocation 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/5016—Allocation 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
-
- 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/5061—Partitioning or combining of resources
- G06F9/5077—Logical 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)
- Memory System (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本说明书实施例提供了一种用于分配GPU显存的方法及装置。在该方法中,响应于显存请求,在该请求指定的GPU显存对应配置的预设虚拟内存中分配第一虚拟内存,预设虚拟内存的容量大于GPU显存的容量;反馈第一虚拟内存对应的虚拟内存指针,虚拟内存指针对应有虚拟内存指针管理结构,虚拟内存指针管理结构包括第一虚拟内存的容量、与第一虚拟内存对应映射的物理内存地址;在执行内存访问操作时,在GPU显存上分配与所述第一虚拟内存相同容量的第一显存;以及根据所分配的第一显存来更新虚拟内存指针管理结构中的物理内存地址,以使内存访问驱动根据物理内存地址访问第一显存。
Description
技术领域
本说明书实施例涉及计算机技术领域,具体地,涉及用于分配GPU物理内存的方法及装置。
背景技术
GPU是一种广泛使用的能够减少对CPU依赖、并进行部分原本CPU工作的微处理器,并且具有高性能计算加速特点,广泛用于AI、深度学习的训练和在线服务。GPU在应用过程中,大多数的功能任务都运行在GPU上,尤其是需要强大算力支撑的功能任务。
当GPU运行一个功能任务时,GPU会从所具有的显存中为该功能任务分配一部分显存以用于运行,一般显存的分配方式是预先分配,即,预先分配完所有显存,然后由框架层来管理对象分配。然而,GPU的显存容量有限,比如,一般在16GB、32GB等,这样有限的显存制约了很多大型的计算任务,比如,在深度学习训练中,BERT-large模型、GPT-3等高精度模型都需要较大的显存才能运行在GPU之上,否则无法完成训练。因此,GPU的显存容量成为制约在GPU上运行大规模计算任务的瓶颈。
发明内容
鉴于上述,本说明书实施例提供了一种用于分配GPU物理内存的方法及装置。通过设置容量比GPU显存更大的预设虚拟内存,并将容量更大的预设虚拟内存呈现给应用层,从而实现更大容量的显存。此外,应用程序请求内存时仅为其分配虚拟内存,仅在应用程序实际执行内存访问操作时才分配物理内存,实现对GPU显存的动态分配,从而将GPU显存的利用最大化。
根据本说明书实施例的一个方面,提供了一种用于分配GPU显存的方法,包括:响应于显存请求,在所述请求指定的GPU显存对应配置的预设虚拟内存中分配第一虚拟内存,所述预设虚拟内存的容量大于所述GPU显存的容量;反馈所述第一虚拟内存对应的虚拟内存指针,所述虚拟内存指针对应有虚拟内存指针管理结构,所述虚拟内存指针管理结构包括所述第一虚拟内存的容量、与所述第一虚拟内存对应映射的物理内存地址;在执行内存访问操作时,在所述GPU显存上分配与所述第一虚拟内存相同容量的第一显存;以及根据所分配的第一显存来更新所述虚拟内存指针管理结构中的物理内存地址,以使内存访问驱动根据所述物理内存地址访问所述第一显存。
根据本说明书实施例的另一方面,还提供一种用于分配GPU物理内存的装置,包括:至少一个处理器,与所述至少一个处理器耦合的存储器,以及存储在所述存储器上的计算机程序,所述至少一个处理器执行所述计算机程序来实现:响应于显存请求,在所述请求指定的GPU显存对应配置的预设虚拟内存中分配第一虚拟内存,所述预设虚拟内存的容量大于所述GPU显存的容量;反馈所述第一虚拟内存对应的虚拟内存指针,所述虚拟内存指针对应有虚拟内存指针管理结构,所述虚拟内存指针管理结构包括所述第一虚拟内存的容量、与所述第一虚拟内存对应映射的物理内存地址;在执行内存访问操作时,在所述GPU显存上分配与所述第一虚拟内存相同容量的第一显存;以及根据所分配的第一显存来更新所述虚拟内存指针管理结构中的物理内存地址,以使内存访问驱动根据所述物理内存地址访问所述第一显存。
根据本说明书实施例的另一方面,还提供一种电子设备,包括:至少一个处理器;以及存储器,所述存储器存储指令,当所述指令被所述至少一个处理器执行时,使得所述至少一个处理器执行如上所述的用于分配GPU物理内存的方法。
根据本说明书实施例的另一方面,还提供一种机器可读存储介质,其存储有可执行指令,所述指令当被执行时使得所述机器执行如上所述的用于分配GPU物理内存的方法。
附图说明
通过参照下面的附图,可以实现对于本说明书实施例内容的本质和优点的进一步理解。在附图中,类似组件或特征可以具有相同的附图标记。
图1示出了GPU系统架构的一个示例的示意图。
图2示出了根据本说明书实施例的用于实现分配GPU显存方法的GPU的一个示例的系统架构示意图。
图3A~3C示出了根据本说明书实施例的GPU的部署环境的示意图。
图4示出了根据本说明书实施例的用于分配GPU显存的方法的一个示例的流程图。
图5示出了根据本说明书实施例的虚拟内存指针管理结构的一个示例的示意图。
图6示出了根据本说明书实施例的用于实际分配GPU显存的方法的一个示例的流程图。
图7示出了根据本公开实施例的用于分配GPU显存的装置的一个示例的方框图。
图8示出了本说明书实施例的用于实现GPU显存分配方法的电子设备的方框图。
具体实施方式
以下将参考示例实施方式讨论本文描述的主题。应该理解,讨论这些实施方式只是为了使得本领域技术人员能够更好地理解从而实现本文描述的主题,并非是对权利要求书中所阐述的保护范围、适用性或者示例的限制。可以在不脱离本说明书实施例内容的保护范围的情况下,对所讨论的元素的功能和排列进行改变。各个示例可以根据需要,省略、替代或者添加各种过程或组件。另外,相对一些示例所描述的特征在其它例子中也可以进行组合。
如本文中使用的,术语“包括”及其变型表示开放的术语,含义是“包括但不限于”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一实施例”表示“至少一个实施例”。术语“另一个实施例”表示“至少一个其他实施例”。术语“第一”、“第二”等可以指代不同的或相同的对象。下面可以包括其他的定义,无论是明确的还是隐含的。除非上下文中明确地指明,否则一个术语的定义在整个说明书中是一致的。
图1示出了GPU系统架构的一个示例100的示意图。
如图1所示,GPU系统架构100可以包括GPU硬件130、GPU驱动140、一个服务器端120以及至少一个客户端110。其中,GPU硬件130包括至少一个GPU硬件主体,GPU驱动140用于驱动GPU硬件130。
服务器端120运行在GPU驱动140之上,服务器端120是一个在系统后台长时间运行的守护进程(long running daemon)。服务器端120上可以部署有一个服务实例,该服务实例可封装运行在docker容器里。服务器端120可以管理GPU硬件130中一个或者多个GPU硬件主体。一个服务器端120可以对应多个客户端主体113,或者一个GPU硬件主体对应多个客户端主体113。
服务器端120可以包括设备及请求管理调度单元、资源隔离及优先级管理单元、性能及扩展性优化单元以及信息数据处理单元等。其中,设备及请求管理调度单元被配置为发现GPU硬件130中的GPU硬件资源并请求GPU硬件资源。资源隔离及优先级管理单元被配置为GPU硬件运行API指令分配隔离资源,以及为管理API指令在GPU硬件上运行的优先级。性能及扩展性优化单元被配置为对GPU性能以及GPU扩展性优进行运行优化处理。信息数据处理单元被配置为对GPU中的信息数据进行监控、追踪统计、热迁移等处理。
服务器端120可以获取GPU硬件资源和资源配置策略,根据资源配置策略和GPU硬件资源创建多个虚拟GPU资源,根据资源配置策略,生成GPU硬件资源和多个虚拟GPU资源之间的资源映射关系,针对多个虚拟GPU资源导出GPU服务。
服务器端120通信连接的每个客户端110由应用层111和客户端主体113打包在一起。客户端主体113向应用层111导出用于访问GPU的API(Application ProgrammingInterface,应用程序编程接口)接口。向应用层111导出的API接口与GPU的原始API接口保持一致。GPU包括GPU硬件和GPU驱动。
每个客户端主体113通过IPC(Inter-Process Communication,进程间通信)或者网络方式与服务器端120通信连接。每个客户端主体113与服务器端120上保存并维护有相同的资源映射关系。每个客户端主体113根据资源映射关系,以及预先与服务器端120约定的目标GPU服务,获得多个GPU资源中的目标GPU资源。具体的,每个客户端110根据资源映射关系以及预先与服务端约定的目标GPU服务,发现虚拟GPU资源,申请虚拟GPU资源,并使用目标GPU资源完成目标任务。
应用层111中的应用程序可以包括CNN(Convolutional Neural Networks,卷积神经网络)、RNN(Recurrent Neural Network,循环神经网络)、LSTM(Longshort termmemory,长短期记忆网络)、GAN(Generative Adversarial Networks,生成式对抗网络)等应用模型,客户端主体113向服务器端120申请目标GPU资源,以用于应用模型的训练或者基于应用模型的在线服务。
每个客户端110还可以包括框架层112,框架层112可以包括TensorFlow、PyTorch、Caffe2等框架,框架层112所包括的框架都支持GPU运行,框架层112绑定动态链接库,动态链接库可以为应用层111的应用程序提供访问GPU所需的API接口。
然而,GPU的显存容量有限,比如,一般在16GB、32GB等,这样有限的显存制约了很多大型的计算任务,比如,在深度学习训练中,BERT-large模型、GPT-3等高精度模型都需要较大的显存才能运行在GPU之上,否则无法完成训练。因此,GPU的显存容量成为制约在GPU上运行大规模计算任务的瓶颈。
鉴于上述,在本说明书实施例中,提供了一种用于分配GPU物理内存的方法及装置。在该方法中,响应于显存请求,在请求指定的GPU显存对应配置的预设虚拟内存中分配第一虚拟内存,预设虚拟内存的容量大于GPU显存的容量;反馈第一虚拟内存对应的虚拟内存指针,虚拟内存指针对应有虚拟内存指针管理结构,虚拟内存指针管理结构包括第一虚拟内存的容量、与第一虚拟内存对应映射的物理内存地址;在执行内存访问操作时,在GPU显存上分配与第一虚拟内存相同容量的第一显存;以及根据所分配的第一显存来更新虚拟内存指针管理结构中的物理内存地址,以使内存访问驱动根据物理内存地址访问所述第一显存。通过设置容量比GPU显存更大的预设虚拟内存,并将容量更大的预设虚拟内存呈现给应用层,从而实现更大容量的显存。此外,应用程序请求内存时仅为其分配虚拟内存,仅在应用程序实际执行内存访问操作时才分配物理内存,实现对GPU显存的动态分配,从而将GPU显存的利用最大化。
图2示出了根据本说明书实施例的用于实现分配GPU显存方法的GPU的一个示例200的系统架构示意图。
如图2所示,用于实现本说明书实施例提供的分配GPU显存方法的GPU相比于图1所示的GPU增加了GPU显存虚拟化单元,该GPU显存虚拟化单元可以是用于执行分配GPU显存方法操作的执行主体。
GPU显存虚拟化单元执行的GPU显存分配方法可以应用于需要GPU分配显存的应用场景,尤其是大规模的任务需要较大的GPU显存,比如,网络游戏、深度学习等应用场景中。本说明书实施例以深度学习为例进行说明。例如,应用程序通过深度学习框架(比如,TensorFlow,PyTorch)可以提交计算任务在GPU中异步执行,所提交的每个计算任务都需要一定容量的显存来支持该计算任务的执行。
本说明书实施例中的GPU可以被部署在裸机环境、容器环境或者虚拟机环境。参考图3A~图3C所示。这里要说明的是,图3A~3C中示出的客户端是本说明书的实施例中公开的客户端210的客户端主体。
在GPU被部署在裸机环境中时,如图3A所示,服务端和客户端主体都运行在主操作系统(host OS)上(例如,都运行在linux上)。服务端通过GPU驱动接管所有对GPU资源的访问。其中,若客户端主体与服务端在同一机器,通信可以采用IPC方式通信;若客户端主体与服务端不在同一机器,则采用TCP协议、IP协议或者RDMA协议等通信。
在GPU被部署在容器环境中时,如图3B所示,服务端以容器化方式运行并管理GPU资源。客户端主体(例如K8S pod)与服务端运行在同一物理机上,客户端主体与服务端之间的通信可以采用IPC(例如UNIX socket,Pipe或者shmem),或者网络协议实现。
在GPU被部署在虚拟机环境中时,如图3C所示,GPU资源给特定的物理机,然后在VMGuest OS里启动服务端或客户端主体,等同于裸机环境。
由此可见,该GPU可以同时支持部署在裸机环境、容器环境以及虚拟机环境,从而使得部署非常灵活。
图4示出了根据本说明书实施例的用于分配GPU显存的方法的一个示例400的流程图。
如图4所示,在410,响应于显存请求,在该请求指定的GPU显存对应配置的预设虚拟内存中分配第一虚拟内存。
在本说明书实施例中,显存请求可以是由应用对象发送的,应用对象可以包括应用层的应用程序、框架层的框架等。例如,应用层中的应用程序CNN在运行过程中可以请求显存,框架层中的TensorFlow框架在深度学习中被调用时可以请求显存。下面以应用程序为例进行说明。
在本说明书实施例中,应用程序运行于应用层中,应用程序运行过程中可以发起不同的功能任务,应用程序发起的功能任务需要GPU显存的支持才能执行,因此,应用程序可以向GPU请求各个功能任务所需的显存,然后将GPU分配的显存对应分配给各个功能任务。应用程序请求显存的一种方式可以是调用API cuMemAlloc,API cuMemAlloc可以指定所请求分配的显存容量,以向GPU请求分配指定容量的显存。在一个示例中,指定容量可以被包括在显存请求中。
应用程序发起的不同功能任务所需的显存可以不同,基于此,指定容量可以根据各个功能任务来确定,应用程序可以根据各个不同的功能任务来向GPU请求相应容量的显存。
应用程序在请求GPU内存之前,可以查询系统中的所有GPU,以从系统所安装的GPU中指定一个GPU作为本地GPU,该本地GPU为该应用程序分配显存的GPU。例如,系统中有4个GPU:GPU1、GPU2、GPU3和GPU4,每个GPU的显存为16G,应用程序可以指定GPU1为该应用程序的本地GPU。在本说明书中,系统是GPU所属的系统,也是支持应用程序运行的系统,系统可以包括至少一个GPU、CPU等。
在本说明书实施例中,预设虚拟内存可以是显存请求指定的,显存请求指定的方式可以是显存请求中包括所指定的预设虚拟内存的标识。在一个示例中,当显存请求由应用程序发送时,预设虚拟内存可以是应用程序指定的,从预设虚拟内存中分配的第一虚拟内存供应用程序使用,第一虚拟内存的容量是指定容量。
在一个示例中,系统中每个GPU(即,物理GPU)的GPU显存可以配置成一个或多个预设虚拟内存。当一个GPU显存配置成一个预设虚拟内存时,该GPU显存的容量与该预设虚拟内存的容量对应。例如,一个16G的GPU显存配置成一个64G的预设虚拟内存,则该64G的预设虚拟内存实际对应的物理内存是16G的GPU显存。当一个GPU显存配置成多个预设虚拟内存时,该GPU显存的容量也被分成与预设虚拟内存的数量一致的份数,每一份GPU显存对应一个预设虚拟内存。例如,一个16G的GPU显存被分成两份,每份GPU显存是8G,每份8G的GPU显存配置成一个64G的预设虚拟内存,则该64G的预设虚拟内存实际对应的物理内存是8G的GPU显存。
GPU显存可以根据用于请求显存的应用对象的数量以及每个应用对象的内存需求量来配置对应数量的多个预设虚拟内存。多个应用对象中的每个应用对象的内存需求量较小,在一个示例中,多个应用对象中的各个应用对象的内存需求量之和小于GPU显存的容量,此时,可以将一个GPU显存分成多份显存,每一份显存对应设置一个预设虚拟内存,然后将各个预设虚拟内存分配给该多个应用对象中的各个应用对象。这样对于该多个应用对象来说,都是运行在同一个GPU显存上,节省了GPU显存资源。例如,两个应用程序都仅需8G的显存,系统中的一个GPU显存为16G,则可以将该16G的GPU显存分成两份,每份显存为8G,每份显存对应设置一个预设虚拟内存,则将该两个预设虚拟内存分配给该两个应用程序后,该两个应用程序实际都运行在该16G的GPU显存上。
针对系统中的每个GPU,可以预先为该GPU显存配置对应的预设虚拟内存。设置的虚拟内存用于呈现给各个应用对象,对于各个应用对象来说,在查询系统中的显存时所查询到的是各个显存对应的预设虚拟内存。预设虚拟内存的容量大于对应的GPU显存的容量,比如,一个GPU的显存为16G,该GPU显存对应的预设虚拟内存的容量可以是64G。这样,呈现给应用对象的是容量更大的预设虚拟内存,对于应用对象来说可供支配的显存容量更大,从而为需要较大显存的应用对象的可靠运行提供了可行性。
在本说明书的一个示例中,预设虚拟内存的容量可以根据系统中各个GPU显存和其他物理内存来确定,其他物理内存可以包括CPU内存和/或非易失性内存(PersistentMemory),还可以包括磁盘等其他物理内存。
在该示例中,预设虚拟内存的容量可以大于对应的GPU显存的容量、且小于系统的物理内存总容量,系统的物理内存总容量为各个GPU显存以及其他物理内存的总容量之和。例如,系统中包括有2个16G容量的GPU、128G的CPU内存以及64G的非易失性内存,则该系统的物理内存总容量为224G。每个GPU对应的预设虚拟内存的容量可以相同,也可以不同。
在本说明书的另一个示例中,预设虚拟内存的容量可以根据系统中各个GPU显存和其他物理内存构成的物理内存总容量以及系统中的GPU个数来确定。在该示例中,各个GPU对应的预设虚拟内存的容量之和可以小于或等于系统中的物理内存总容量,
在一个示例中,可以将物理内存总容量按照GPU个数来均分或者随机分配,将所得到的每一份物理内存容量确定为对应的预设虚拟内存的容量。例如,系统中包括有2个GPU,物理内存总容量为224G,则均分为两份物理内存,每份物理内存的容量为112G,则可以确定每个GPU对应的预设虚拟内存的容量为112G。
在另一个示例中,可以设定一个小于物理内存总容量的待分配总容量,然后可以将待分配总容量按照GPU个数来均分或者随机分配,将所得到的每一份容量确定为对应的预设虚拟内存的容量。例如,系统中包括有2个GPU,物理内存总容量为224G,则可以确定待分配总容量为160G,将160G的待分配总容量均分为两份,每份容量为80G,则可以确定每个GPU对应的预设虚拟内存的容量为80G。通过设定小于物理内存总容量的待分配总容量,留出一定欲量的物理内存作为物理内存的保障值,避免物理内存超出导致影响各个应用程序的运行。
在设置预设虚拟内存的一个示例中,还可以查询系统中的物理内存,比如,GPU内存、CPU内存、非易失性内存,并统计各个物理内存中的可用物理内存,然后将所统计的可用物理内存从系统上分配完,即将所统计的可用物理内存都分配给GPU显存虚拟化单元,以仅供GPU显存虚拟化单元所用的可用物理内存。
GPU显存虚拟化单元可以将所有可用物理内存进行池化处理,以将所有可用物理内存合并成为一个物理内存池,该物理内存池中的所有物理内存都仅供GPU显存虚拟化单元分配,这样可以确定GPU显存虚拟化单元的可用物理内存上限,且该上限的物理内存总量仅GPU显存虚拟化单元能够分配,便于GPU显存虚拟化单元对物理内存进行管理。
最后,在得到GPU显存虚拟化单元的物理内存池后,可以根据物理内存池中的总容量来设置预设虚拟内存,从而避免所设置的虚拟内存的总容量超出物理内存池中的可用容量。
在本说明书实施例中,每个预设虚拟内存可以维护相应的内存管理信息,以便于对各个预设虚拟内存进行管理和分配。每个预设虚拟内存的内存管理信息可以包括虚拟内存总量、虚拟内存已分配量、总物理内存已分配量、总物理内存峰值分配量、指定GPU的显存保障值、指定GPU的显存弹性上限值以及指定GPU的显存峰值分配量等。
其中,各级虚拟内存总量和虚拟内存已分配量可以确定出虚拟内存的可用容量。总物理内存峰值分配量是根据历史分配记录统计出的在一段时间内的总物理内存分配峰值,该总物理内存是系统中分配给GPU显存虚拟化单元的所有可用物理内存。指定GPU的显存保障值是该GPU显存的总容量,比如,GPU显存的容量为16G,则显存保障值是16G。
指定GPU的显存弹性上限值是指该指定GPU对应的各个预设虚拟内存所对应使用的显存上限,该指定GPU的显存弹性上限值不超过该指定GPU的显存容量。当指定GPU对应配置为一个预设虚拟内存时,则该预设虚拟内存对应的显存弹性上限为该指定GPU的总容量。当指定GPU对应配置为多个预设虚拟内存时,每个预设虚拟内存仅对应一份显存,每份显存是指定GPU显存中的一部分,则每个预设虚拟内存对应的显存弹性上限为对应的每份显存的容量。例如,16G的指定GPU被分成两份,每份显存的容量为8G,则每份显存对应的预设虚拟内存对应的显存弹性上限为8G。
在一个示例中,当指定GPU对应配置为多个预设虚拟内存时,被分配该指定GPU的多个应用对象没有同时执行,则未执行的应用对象对应的一部分显存可以作为弹性显存分配给当前在执行的应用对象,则此时执行的应用对象对应的显存弹性上限值增加,该显存弹性上限值由该应用对象本身对应的一份显存和未执行的应用对象对应的一部分显存构成。例如,16G的指定GPU被分成两份,每份显存的容量为8G,当被分配的两个应用程序同时运行时,每个应用程序对应的显存弹性上限为8G,当其中一个运行另一个不运行时,则运行的应用程序对应额显存弹性上限为16G。
在本说明书实施例中,物理内存池维护的内存管理信息可以包括物理内存总容量、物理内存可用容量以及物理内存的已分配量。
回到图4,在420,反馈第一虚拟内存对应的虚拟内存指针。
在一个示例中,可以向请求显存的应用对象反馈虚拟内存指针。虚拟内存指针用于指示第一虚拟内存,即虚拟内存指针所指向的是第一虚拟内存。虚拟内存指针对应有虚拟内存指针管理结构,虚拟内存指针管理结构可以包括第一虚拟内存的容量、与第一虚拟内存对应映射的物理内存地址。在本说明书中,每个虚拟内存指针的虚拟内存指针管理结构可以反映出虚拟内存与物理内存的对应映射关系,对应映射的虚拟内存和物理内存都分配给同一个应用对象,虚拟内存用于呈现给应用对象,对应映射的物理内存实际分配给应用对象使用。在本说明书实施例中,第一虚拟内存呈现给请求显存的应用程序,对应映射的物理内存地址所表征的物理内存实际分配给该应用对象使用。
在一个示例中,虚拟内存指针管理结构还可以包括物理内存类型,物理内存类型可以包括指定GPU内存、远程GPU内存、CPU内存和非易失性内存等,其中,远程GPU是系统中除指定GPU以外的其他GPU,各个GPU之间可以通过互联总线连接。
在另一个示例中,虚拟内存指针管理结构还可以包括内存状态信息,内存状态信息用于指示GPU显存的分配状态,分配状态可以包括待分配状态、数据迁移状态和已分配状态,其中,数据迁移状态可以包括数据迁移进行状态和数据已迁出状态,数据迁移进行状态包括数据迁入进行状态和数据迁出进行状态,数据迁入进行状态用于表征待访问数据正在从其他物理内存中迁入应用对象指定的GPU显存,数据迁出进行状态用于表征待访问数据正在从指定的GPU显存迁出至其他物理内存,数据已迁出状态用于表示待访问数据已经从应用对象指定的GPU显存迁出到其他物理内存。
图5示出了根据本说明书实施例的虚拟内存指针管理结构的一个示例的示意图。如图5所示,vGPUPtr表示该虚拟内存指针管理结构对应的虚拟内存指针,size表示所分配的第一虚拟内存的容量,state表示内存状态信息,可以有四种状态,init表示待分配的初始化状态,mapped表示已分配状态,swapping表示数据迁移进行状态,swapped表示数据已迁出状态。其中,swapping又可以分为swapping_in和swapping_out,swapping_in表示数据迁入进行状态,swapping_out表示数据迁出进行状态。phyAddr表示物理内存地址,phyAddr包括三种物理内存地址:phyGPUAddr、phyCPUAddr和phypMemAddr,phyGPUAddr表示GPU显存中的地址,phyCPUAddr表示CPU内存中的地址,phypMemAddr表示非易失性内存中的地址。phyMemType表示物理内存类型。
通过上述410和420的操作,已为应用对象分配了虚拟内存。从应用对象的角度来说,已成功分配了所请求的指定容量的内存。而实际上仅为该应用对象分配了虚拟内存,而没有实际地为该应用对象分配物理内存,即GPU显存。而此时,应用对象不需要执行访问显存的操作,从而不需要占用GPU显存,通过上述操作,在响应应用对象的内存请求的基础上,不为应用对象实际的分配GPU显存,节省了GPU显存容量,提高了GPU显存的利用率。
在本说明书实施例的一个示例中,在应用对象执行内存访问操作之前,当应用对象的待访问数据在其他物理内存上时,内存状态信息所指示的分配状态为数据已迁出状态(swapped),这里的其他物理内存是系统中除所有GPU显存以外的其他物理内存。此时,可以基于应用程序的历史访问记录来预测应用对象的访问时间点。在一个示例中,应用对象有规律地访问GPU内存,例如,应用对象是在深度学习的应用场景下,在深度学习训练中的每一个循环过程中,应用对象都要执行相同的计算操作,每个循环过程的时长一致,则每隔该时长,可以确定应用对象需要执行计算操作,从而需要访问GPU显存。
在预测出访问时间点后,可以进一步地确定在该访问时间点之前的第一指定时长的时间点,所确定的时间点在相邻的访问时间点之前,且相隔第一指定时长。在所确定的时间点,将待访问数据从其他物理内存中迁移至GPU显存上。在迁移过程中,可以将内存状态信息更新为指示数据迁入进行状态(swapping_in),在迁移完成时,再将内存状态信息更新为指示已分配状态(mapped)。
在该示例中,在应用对象再次访问内存之前,通过预测应用对象的访问时间点来提前将待访问数据迁移至GPU显存上,使得应用对象在需要访问内存时可以直接访问GPU显存,无需等待执行数据迁移操作,提高了应用对象的执行效率。
在本说明书实施例的一个示例中,在应用对象还未执行内存访问操作或者已完成内存访问操作的情况下,可以设定数据迁出触发事件,数据迁出触发事件是用于表征当该事件发生时可以触发执行数据从GPU显存迁移到其他物理内存的操作,数据迁出触发事件可以包括GPU显存的可用容量低于第一虚拟内存的容量阈值、和/或GPU显存中存储有在以当前时刻为起点的指定时长的时间段内不使用的数据。例如,GPU显存中存储的一些数据经过预测可以确定下一次访问的时间点与当前时间点之间的时间间隔大于指定时长时,可以将这一部分数据暂时迁移出GPU显存,以释放GPU显存。
在该示例中,当GPU显存中存在数据迁出触发事件时,可以确定GPU显存中的待迁出的对应数据。具体地,当数据迁出触发事件是GPU显存的可用容量低于第一虚拟内存的容量阈值时,可以预测GPU显存中各个数据下一次被访问的时间点,然后将距离当前时刻最远的一个或多个数据确定为待迁出的对应数据。当数据迁出触发事件是GPU显存中存储有在以当前时刻为起点的指定时长的时间段内不使用的数据时,可以将该不使用的数据确定为待迁出的对应数据。
然后,将所确定的待迁出的对应数据从GPU显存中迁移至其他物理内存中,在在迁移过程中,可以将内存状态信息更新为指示数据迁出进行状态(swapping_out),在迁移完成时,再将内存状态信息更新为指示数据已迁出状态(swapped)。
在该示例中,基于设定的数据迁出触发事件将GPU显存中的暂时不使用的数据迁出至其他物理内存存储,以释放GPU显存空间,避免GPU显存可用容量不足而不能为应用对象分配显存、影响应用对象的运行。
接着,在为应用对象分配第一虚拟内存后,在430,在应用对象执行内存访问操作时,在GPU显存上为应用对象分配与所述第一虚拟内存相同容量的第一显存。
在一个示例中,所分配的第一显存的容量可以是显存请求所请求的容量(即,指定容量)。此时,第一显存的容量、第一虚拟内存的容量以及显存请求的指定容量三者相同。
在本说明书实施例中,应用对象执行的内存访问操作可以包括计算操作、写入操作和读取操作等,在执行内存访问操作的过程中需要访问GPU显存。当应用对象执行内存访问操作时,需要为应用对象实际地分配GPU显存,即第一显存,以供应用对象访问。
在分配第一显存后,在440,根据所分配的第一显存来更新虚拟内存指针管理结构中的物理内存地址,所更新的物理内存地址即为第一显存在指定GPU显存中的地址。这样,虚拟内存指针管理结构与虚拟内存指针对应,且包括第一显存的物理内存地址,从而虚拟内存管理结构可以将虚拟内存指针与第一显存的物理内存地址对应映射起来,该映射关系即表征第一虚拟内存与第一显存的对应映射关系。通过该对应映射关系,可以使得内存访问驱动根据物理内存地址访问第一显存。
在本说明书实施例的一个示例中,在针对第一显存的内存访问操作完成后,可以释放第一显存,从而增加GPU显存的可用容量。还可以释放第一显存以及第一虚拟内存,在增加GPU显存的可用容量的同时增加预设虚拟内存的可用容量。
在一个示例中,可以先预测应用对象下一次访问内存的时间点,当该时间点距离当前时间点的时长大于第二指定时长时,可以释放第一显存,否则,可以不释放第一显存,在应用程序下一次执行内存访问操作时直接复用第一显存。
图6示出了根据本说明书实施例的用于实际分配GPU显存的方法的一个示例600的流程图。
如图6所示,在应用对象执行内存访问操作时,在610,应用对象可以调用API以请求访问虚拟内存指针所指向的内存,应用对象所调用的API请求中包括有虚拟内存指针。GPU显存虚拟化单元可以截获API请求,并从API请求中获取虚拟内存指针。
然后,在620,判断虚拟内存指针对应的虚拟内存指针管理结构中的内存状态信息所指示的分配状态。
当判断出内存状态信息指示为待分配状态时,在630,可以在GPU显存上为应用对象分配与第一虚拟内存的容量相同的第一显存。接着,在650,根据所分配的第一显存来更新虚拟内存指针管理结构中的物理内存地址。在660,内存访问驱动根据物理内存地址访问第一显存。
当判断出内存状态信息指示为数据迁移状态时,进一步确定内存状态信息所指示的是数据已迁出状态还是数据迁入进行状态。当内存状态信息指示的是数据已迁出状态时,在640,可以在GPU显存上为应用对象分配与第一虚拟内存的容量相同的第一显存。其中,执行640操作的执行主体装置与上述执行630操作的执行主体装置可以相同,也可以不同。
然后,在643,基于所分配的第一显存执行数据迁入操作。具体地,可以将待访问数据从原存储位置复制至第一显存位置处,然后将原存储位置处的待访问数据删除,以便于释放物理内存容量。
在执行数据迁入操作过程中,在645,可以实时监控数据迁移进度,以便于及时监控到数据迁移完成,若数据迁入未完成,则继续执行数据迁入操作,若数据迁入完成,则执行后续操作。在一个示例中,还可以将数据迁入完成事件确定为依赖事件,并添加该依赖事件,当数据迁入完成事件发生时,可以执行后续操作。
在数据迁入完成时,在650,根据所分配的第一显存来更新虚拟内存指针管理结构中的物理内存地址。接着,在660,内存访问驱动可以根据物理内存地址访问第一显存。
此外,当内存状态信息指示的是数据迁入进行状态时,表示当前正在执行数据迁入操作。在数据迁入完成时,分别执行650和660的操作,即,根据所分配的第一显存来更新虚拟内存指针管理结构中的物理内存地址,以使内存访问驱动根据物理内存地址访问第一显存。
当判断出内存状态信息指示为已分配状态时,表示当前在GPU显存上已为应用程序分配了第一显存,此时,可以执行660的操作,即,内存访问驱动可以根据物理内存地址访问第一显存。
在本说明书实施例的一个示例中,GPU所在的系统包括有多个GPU,各个GPU之间通过总线互联,从而各个GPU之间可以通过总线进行通信以及数据传输等操作。
在应用对象执行内存访问操作时,需要为该应用对象分配GPU显存。当应用对象指定的GPU上的显存的可用容量小于第一虚拟内存的容量(即,应用对象所请求的指定容量)时,可以从与该指定的GPU互联的其他GPU显存上为该应用对象分配与第一虚拟内存的容量相同的第二显存。然后,基于该其他GPU与指定GPU之间的总线来从其他GPU显存上访问第二显存。
在该示例中,可以将虚拟内存指针管理结构中的物理内存地址更新为第二显存的地址,从而建立第一虚拟内存与第二显存的对应映射关系。根据该对应映射关系,在应用程序根据虚拟内存指针访问第一虚拟内存时,实际访问的是第二显存,从而实现为应用程序分配物理内存。
在该示例中,各个GPU之间总线的互联速度快,在应用程序指定的GPU显存的可用容量不足的情况下将其他GPU显存作为扩展显存,进一步地扩展了可用的GPU显存容量。
在本说明书实施例的一个示例中,在分配第一显存后,可以建立第一虚拟内存与第一显存的映射关系。在一个示例中,可以预先建立虚拟内存与物理内存的映射表,在映射表中存储各个映射关系,每个映射关系由分配的虚拟内存和物理内存对应构成,分配的虚拟内存用于呈现给应用层的应用对象,分配的物理内存是应用对象实际访问的内存。在每次新建一个映射关系后,可以将新建的映射关系存储至映射表中,在映射关系中的虚拟内存和物理内存释放时,该映射关系也可以从映射表中删除。
然后,基于建立的映射关系,将应用对象所调用的API接口请求中的虚拟内存指针替换为第一显存的物理内存地址,再将包括物理内存地址的内存请求提交给内存访问驱动,以使内存访问驱动根据物理内存地址来访问第一显存。
在本说明书实施例的另一个示例中,在分配第一显存并更新虚拟内存指针管理结构中的物理内存地址后,可以将应用对象所调用的包括有虚拟内存指针的API接口请求以及第一显存的物理内存地址提交给内存访问驱动。内存访问驱动在接收到API接口请求和物理内存地址后,可以使用该内存访问驱动所提供的内存访问API来创建第一虚拟内存与第一显存的映射关系,然后,内存访问驱动根据所创建的映射关系将API接口请求中的虚拟内存指针替换为第一显存的物理内存地址,内存访问驱动调用内存访问API根据API接口请求中的物理内存地址来访问第一显存。
在该示例中,由内存访问驱动来建立虚拟内存与显存的映射关系,并执行物理内存地址的替换操作,有效地分担了GPU显存虚拟化单元的部分数据处理,减轻了GPU显存虚拟化单元的负载压力。
图7示出了根据本公开实施例的用于分配GPU显存的装置(以下称为GPU显存分配装置700)的一个示例的方框图。
如图7所示,GPU显存分配装置700包括虚拟内存分配单元710、虚拟内存指针反馈单元720、GPU显存分配单元730和物理内存地址更新单元740。
虚拟内存分配单元710,被配置为响应于显存请求,在请求指定的GPU显存对应配置的预设虚拟内存中分配第一虚拟内存,预设虚拟内存的容量大于GPU显存的容量。
虚拟内存指针反馈单元720,被配置为向应用程序反馈第一虚拟内存对应的虚拟内存指针,虚拟内存指针对应有虚拟内存指针管理结构,虚拟内存指针管理结构包括第一虚拟内存的容量、与第一虚拟内存对应映射的物理内存地址。
GPU显存分配单元730,被配置为在执行内存访问操作时,在GPU显存上分配与第一虚拟内存相同容量的第一显存。
物理内存地址更新单元740,被配置为根据所分配的第一显存来更新虚拟内存指针管理结构中的物理内存地址,以使内存访问驱动根据物理内存地址访问第一显存。
在一个示例中,虚拟内存指针管理结构还可以包括内存状态信息,内存状态信息用于指示待分配状态。GPU显存分配单元730还可以被配置为在执行内存访问操作时,当内存状态信息指示为待分配状态时,在GPU显存上分配与第一虚拟内存相同容量的第一显存。
在一个示例中,所述内存状态信息还用于指示数据迁移状态,所述数据迁移状态包括数据迁入进行状态和数据已迁出状态,GPU显存分配单元730还可以被配置为:在执行内存访问操作时,当内存状态信息指示为数据已迁出状态时,在GPU显存上分配与第一虚拟内存相同容量的第一显存;以及基于所分配的所述第一显存执行数据迁入操作。物理内存地址更新单元740还可以被配置为:在数据迁入完成时,根据所分配的第一显存来更新虚拟内存指针管理结构中的物理内存地址,以使内存访问驱动根据物理内存地址访问第一显存。
在一个示例中,物理内存地址更新单元740还可以被配置为:在执行内存访问操作时,当内存状态信息指示为数据迁入进行状态时,当数据迁入完成时,根据所分配的第一显存来更新虚拟内存指针管理结构中的物理内存地址,以使内存访问驱动根据物理内存地址访问所述第一显存。
在一个示例中,GPU显存分配装置700还可以包括:访问时间点预测单元,被配置为在执行内存访问操作之前,当待访问数据在其他物理内存上时,基于历史访问记录来预测访问时间点。数据迁移单元,被配置为在访问时间点之前的第一指定时长的时间点,将待访问数据从其他物理内存上迁移至GPU显存上。内存状态信息更新单元,被配置为更新内存状态信息。
在一个示例中,数据迁移单元还可以被配置为在GPU显存中存在数据迁出触发事件时,将GPU显存中的对应数据迁移至其他物理内存中。内存状态信息更新单元还可以被配置为更新所迁移数据对应的虚拟内存指针管理结构中的内存状态信息。
在一个示例中,GPU所在的系统包括有多个GPU,GPU显存分配装置700还可以包括:第二显存分配单元,被配置为在GPU显存上的可用容量小于第一虚拟内存的容量时,在其他GPU显存上分配与第一虚拟内存相同容量的第二显存,以及基于其他GPU显存与GPU显存之间的总线来从其他GPU显存上访问第二显存。
在一个示例中,GPU显存分配装置700还可以包括释放单元,该释放单元被配置为在针对第一显存的内存访问操作完成后,释放第一显存,或者释放第一显存以及第一虚拟内存。
在一个示例中,GPU显存分配装置700还可以包括:映射关系建立单元,被配置为建立第一虚拟内存与第一显存的映射关系。物理内存地址替换单元,被配置为将应用对象所调用的API接口请求中的虚拟内存指针替换为第一显存的物理内存地址。请求提交单元,被配置为将包括物理内存地址的内存请求提交给内存访问驱动,以使内存访问驱动根据物理内存地址来访问第一显存。
在一个示例中,GPU显存分配装置700还可以包括:请求及地址提交单元,被配置为将应用对象所调用的包括有虚拟内存指针的API接口请求以及第一显存的物理内存地址提交给内存访问驱动,以使内存访问驱动使用内存访问驱动提供的内存访问API来创建第一虚拟内存与第一显存的映射关系,并基于映射关系来访问第一显存。
在一个示例中,GPU显存分配装置700还可以包括:可用物理内存统计单元,被配置为统计GPU所在的系统中各个物理内存中的可用物理内存。可用物理内存分配单元,被配置为将所统计的可用物理内存从系统上分配完,以作为供GPU显存虚拟化单元来分配的物理内存池。虚拟内存设置单元,被配置为基于物理内存池的总容量来设置预设虚拟内存。
以上参照图1到图7,对根据本说明书实施例的用于分配GPU显存的方法及装置的实施例进行了描述。
本说明书实施例的用于分配GPU显存的装置可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将存储器中对应的计算机程序指令读取到内存中运行形成的。在本说明书实施例中,用于分配GPU显存的装置例如可以利用电子设备实现。
图8示出了本说明书实施例的用于实现GPU显存分配方法的电子设备800的方框图。
如图8所示,电子设备800可以包括至少一个处理器810、存储器(例如,非易失性存储器)820、内存830和通信接口840,并且至少一个处理器810、存储器820、内存830和通信接口840经由总线850连接在一起。至少一个处理器810执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
在一个实施例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器810:响应于显存请求,在请求指定的GPU显存对应配置的预设虚拟内存中分配第一虚拟内存,预设虚拟内存的容量大于GPU显存的容量;反馈第一虚拟内存对应的虚拟内存指针,虚拟内存指针对应有虚拟内存指针管理结构,虚拟内存指针管理结构包括第一虚拟内存的容量、与第一虚拟内存对应映射的物理内存地址;在执行内存访问操作时,在GPU显存上分配与第一虚拟内存相同容量的第一显存;以及根据所分配的第一显存来更新虚拟内存指针管理结构中的物理内存地址,以使内存访问驱动根据物理内存地址访问第一显存。
应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器810进行本说明书的各个实施例中以上结合图1-7描述的各种操作和功能。
根据一个实施例,提供了一种例如机器可读介质的程序产品。机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本说明书的各个实施例中以上结合图1-7描述的各种操作和功能。
具体地,可以提供配有可读存储介质的系统或者装置,在该可读存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机或处理器读出并执行存储在该可读存储介质中的指令。
在这种情况下,从可读介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的可读存储介质构成了本发明的一部分。
本说明书各部分操作所需的计算机程序代码可以用任意一种或多种程序语言编写,包括面向对象编程语言,如Java、Scala、Smalltalk、Eiffel、JADE、Emerald、C++、C#、VB、NET以及Python等,常规程序化编程语言如C语言、Visual Basic 2003、Perl、COBOL2002、PHP以及ABAP,动态编程语言如Python、Ruby和Groovy,或者其他编程语言等。该程序编码可以在用户计算机上运行,或者作为独立的软件包在用户计算机上运行,或者部分在用户计算机上运行另一部分在远程计算机运行,或者全部在远程计算机或服务器上运行。在后一种情况下,远程计算机可以通过任何网络形式与用户计算机连接,比如局域网(LAN)或广域网(WAN),或连接至外部计算机(例如通过因特网),或者在云计算环境中,或者作为服务使用,比如软件即服务(SaaS)。
可读存储介质的实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD-RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上或云上下载程序代码。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
上述各流程和各系统结构图中不是所有的步骤和单元都是必须的,可以根据实际的需要忽略某些步骤或单元。各步骤的执行顺序不是固定的,可以根据需要进行确定。上述各实施例中描述的装置结构可以是物理结构,也可以是逻辑结构,即,有些单元可能由同一物理实体实现,或者,有些单元可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。
在整个本说明书中使用的术语“示例性”意味着“用作示例、实例或例示”,并不意味着比其它实施例“优选”或“具有优势”。出于提供对所描述技术的理解的目的,具体实施方式包括具体细节。然而,可以在没有这些具体细节的情况下实施这些技术。在一些实例中,为了避免对所描述的实施例的概念造成难以理解,公知的结构和装置以框图形式示出。
以上结合附图详细描述了本说明书的实施例的可选实施方式,但是,本说明书的实施例并不限于上述实施方式中的具体细节,在本说明书的实施例的技术构思范围内,可以对本说明书的实施例的技术方案进行多种简单变型,这些简单变型均属于本说明书的实施例的保护范围。
本说明书内容的上述描述被提供来使得本领域任何普通技术人员能够实现或者使用本说明书内容。对于本领域普通技术人员来说,对本说明书内容进行的各种修改是显而易见的,并且,也可以在不脱离本说明书内容的保护范围的情况下,将本文所定义的一般性原理应用于其它变型。因此,本说明书内容并不限于本文所描述的示例和设计,而是与符合本文公开的原理和新颖性特征的最广范围相一致。
Claims (18)
1.一种用于分配GPU显存的方法,包括:
响应于显存请求,在所述请求指定的GPU显存对应配置的预设虚拟内存中分配第一虚拟内存,所述预设虚拟内存的容量大于所述GPU显存的容量;
反馈所述第一虚拟内存对应的虚拟内存指针,所述虚拟内存指针对应有虚拟内存指针管理结构,所述虚拟内存指针管理结构包括所述第一虚拟内存的容量、与所述第一虚拟内存对应映射的物理内存地址;
在执行内存访问操作时,在所述GPU显存上分配与所述第一虚拟内存相同容量的第一显存;以及
根据所分配的第一显存来更新所述虚拟内存指针管理结构中的物理内存地址,以使内存访问驱动根据所述物理内存地址访问所述第一显存。
2.如权利要求1所述的方法,其中,所述预设虚拟内存的容量根据系统中各个GPU显存和其他物理内存来确定。
3.如权利要求2所述的方法,其中,所述其他物理内存包括CPU内存和/或非易失性内存。
4.如权利要求1所述的方法,其中,所述虚拟内存指针管理结构还包括内存状态信息,所述内存状态信息用于指示待分配状态,
在执行内存访问操作时,在所述GPU显存上分配与所述第一虚拟内存相同容量的第一显存包括:
在执行内存访问操作时,当所述内存状态信息指示为所述待分配状态时,在所述GPU显存上分配与所述第一虚拟内存相同容量的第一显存。
5.如权利要求1所述的方法,其中,所述内存状态信息还用于指示数据迁移状态,所述数据迁移状态包括数据迁入进行状态和数据已迁出状态,
在执行内存访问操作时,在所述GPU显存上分配与所述第一虚拟内存相同容量的第一显存包括:
在执行内存访问操作时,当所述内存状态信息指示为所述数据已迁出状态时,在所述GPU显存上分配与所述第一虚拟内存相同容量的第一显存;以及
基于所分配的所述第一显存执行数据迁入操作;以及
根据所分配的第一显存来更新所述虚拟内存指针管理结构中的物理内存地址,以使内存访问驱动根据所述物理内存地址访问所述第一显存包括:
在数据迁入完成时,根据所分配的第一显存来更新所述虚拟内存指针管理结构中的物理内存地址,以使内存访问驱动根据所述物理内存地址访问所述第一显存。
6.如权利要求5所述的方法,还包括:
在执行内存访问操作时,当所述内存状态信息指示为所述数据迁入进行状态时,当数据迁入完成时,根据所分配的第一显存来更新所述虚拟内存指针管理结构中的物理内存地址,以使内存访问驱动根据所述物理内存地址访问所述第一显存。
7.如权利要求5所述的方法,还包括:
在执行内存访问操作之前,当待访问数据在所述其他物理内存上时,基于历史访问记录来预测访问时间点;
在所述访问时间点之前的第一指定时长的时间点,将所述待访问数据从所述其他物理内存上迁移至所述GPU显存上;以及
更新所述内存状态信息。
8.如权利要求5所述的方法,还包括:
在所述GPU显存中存在数据迁出触发事件时,将所述GPU显存中的对应数据迁移至其他物理内存中;以及
更新所迁移数据对应的虚拟内存指针管理结构中的内存状态信息。
9.如权利要求8所述的方法,其中,所述数据迁出触发事件包括所述GPU显存的可用容量低于所述第一虚拟内存的容量阈值、和/或所述GPU显存中存储有在以当前时刻为起点的指定时长的时间段内不使用的数据。
10.如权利要求1所述的方法,其中,所述GPU所在的系统包括有多个GPU,所述方法还包括:
在所述GPU显存上的可用容量小于所述第一虚拟内存的容量时,在其他GPU显存上分配与所述第一虚拟内存相同容量的第二显存;以及
基于所述其他GPU显存与所述GPU显存之间的总线来从所述其他GPU显存上访问所述第二显存。
11.如权利要求1所述的方法,还包括:
在针对所述第一显存的内存访问操作完成后,释放所述第一显存,或者释放所述第一显存以及所述第一虚拟内存。
12.如权利要求1所述的方法,还包括:
建立所述第一虚拟内存与所述第一显存的映射关系;
将所调用的API接口请求中的所述虚拟内存指针替换为所述第一显存的物理内存地址;以及
将包括所述物理内存地址的所述内存请求提交给所述内存访问驱动,以使所述内存访问驱动根据所述物理内存地址来访问所述第一显存。
13.如权利要求1所述的方法,还包括:
将所调用的包括有所述虚拟内存指针的API接口请求以及所述第一显存的物理内存地址提交给所述内存访问驱动,以使所述内存访问驱动使用所述内存访问驱动提供的内存访问API来创建所述第一虚拟内存与所述第一显存的映射关系,并基于所述映射关系来访问所述第一显存。
14.如权利要求1所述的方法,所述方法由所述GPU中的GPU显存虚拟化单元来执行,所述方法还包括:
统计所述GPU所在的系统中各个物理内存中的可用物理内存;
将所统计的可用物理内存从所述系统上分配完,以作为供所述GPU显存虚拟化单元来分配的物理内存池;以及
基于所述物理内存池的总容量来设置所述预设虚拟内存。
15.如权利要求1所述的方法,其中,所述GPU显存根据用于请求显存的应用对象的数量以及每个应用对象的内存需求量配置成对应的多个预设虚拟内存。
16.一种用于分配GPU物理内存的装置,包括:
至少一个处理器,
与所述至少一个处理器耦合的存储器,以及
存储在所述存储器上的计算机程序,所述至少一个处理器执行所述计算机程序来实现:
响应于显存请求,在所述请求指定的GPU显存对应配置的预设虚拟内存中分配第一虚拟内存,所述预设虚拟内存的容量大于所述GPU显存的容量;
反馈所述第一虚拟内存对应的虚拟内存指针,所述虚拟内存指针对应有虚拟内存指针管理结构,所述虚拟内存指针管理结构包括所述第一虚拟内存的容量、与所述第一虚拟内存对应映射的物理内存地址;
在执行内存访问操作时,在所述GPU显存上分配与所述第一虚拟内存相同容量的第一显存;以及
根据所分配的第一显存来更新所述虚拟内存指针管理结构中的物理内存地址,以使内存访问驱动根据所述物理内存地址访问所述第一显存。
17.一种计算机可读存储介质,其存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1-15中任一所述的方法。
18.一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如权利要求1-15中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110772139.8A CN113377545B (zh) | 2021-07-08 | 2021-07-08 | 用于分配gpu物理内存的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110772139.8A CN113377545B (zh) | 2021-07-08 | 2021-07-08 | 用于分配gpu物理内存的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113377545A true CN113377545A (zh) | 2021-09-10 |
CN113377545B CN113377545B (zh) | 2023-11-14 |
Family
ID=77581472
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110772139.8A Active CN113377545B (zh) | 2021-07-08 | 2021-07-08 | 用于分配gpu物理内存的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113377545B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114168316A (zh) * | 2021-11-05 | 2022-03-11 | 支付宝(杭州)信息技术有限公司 | 显存分配处理方法、装置、设备及系统 |
CN114418828A (zh) * | 2021-12-23 | 2022-04-29 | 北京百度网讯科技有限公司 | 显存管理方法、装置、设备、存储介质及程序产品 |
CN117910576A (zh) * | 2023-12-29 | 2024-04-19 | 暗物质(北京)智能科技有限公司 | 一种用于认知模型问答预测的加速推理方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140049551A1 (en) * | 2012-08-17 | 2014-02-20 | Intel Corporation | Shared virtual memory |
CN104572509A (zh) * | 2014-12-26 | 2015-04-29 | 中国电子科技集团公司第十五研究所 | 一种在龙芯计算平台上实现独立显卡显存分配的方法 |
CN111737019A (zh) * | 2020-08-31 | 2020-10-02 | 西安芯瞳半导体技术有限公司 | 一种显存资源的调度方法、装置及计算机存储介质 |
-
2021
- 2021-07-08 CN CN202110772139.8A patent/CN113377545B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140049551A1 (en) * | 2012-08-17 | 2014-02-20 | Intel Corporation | Shared virtual memory |
CN104572509A (zh) * | 2014-12-26 | 2015-04-29 | 中国电子科技集团公司第十五研究所 | 一种在龙芯计算平台上实现独立显卡显存分配的方法 |
CN111737019A (zh) * | 2020-08-31 | 2020-10-02 | 西安芯瞳半导体技术有限公司 | 一种显存资源的调度方法、装置及计算机存储介质 |
Non-Patent Citations (1)
Title |
---|
RAM: "虚拟内存与共享显存的优化设置", 电脑, no. 09 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114168316A (zh) * | 2021-11-05 | 2022-03-11 | 支付宝(杭州)信息技术有限公司 | 显存分配处理方法、装置、设备及系统 |
CN114418828A (zh) * | 2021-12-23 | 2022-04-29 | 北京百度网讯科技有限公司 | 显存管理方法、装置、设备、存储介质及程序产品 |
CN117910576A (zh) * | 2023-12-29 | 2024-04-19 | 暗物质(北京)智能科技有限公司 | 一种用于认知模型问答预测的加速推理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN113377545B (zh) | 2023-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11188392B2 (en) | Scheduling system for computational work on heterogeneous hardware | |
US10467725B2 (en) | Managing access to a resource pool of graphics processing units under fine grain control | |
JP6646114B2 (ja) | 動的仮想マシンサイジング | |
CN113377545B (zh) | 用于分配gpu物理内存的方法及装置 | |
EP3798835B1 (en) | Method, device, and system for implementing hardware acceleration processing | |
US9183016B2 (en) | Adaptive task scheduling of Hadoop in a virtualized environment | |
CN105830026B (zh) | 用于调度来自虚拟机的图形处理单元工作负荷的装置和方法 | |
CN105579961B (zh) | 数据处理系统及操作方法、用于数据处理系统的硬件单元 | |
JP4769484B2 (ja) | 仮想計算機をマイグレーションするための方法およびシステム | |
US10241550B2 (en) | Affinity aware parallel zeroing of memory in non-uniform memory access (NUMA) servers | |
WO2014090008A1 (zh) | 一种任务处理的方法和虚拟机 | |
US9778997B2 (en) | Server backup method and backup system using the method | |
CN110196681B (zh) | 业务写操作的磁盘数据写入控制方法及装置、电子设备 | |
CN112052068A (zh) | 一种Kubernetes容器平台CPU绑核的方法与装置 | |
US11403150B1 (en) | Replenishment-aware resource usage management | |
WO2019028682A1 (zh) | 一种多系统共享内存的管理方法及装置 | |
US20230281141A1 (en) | Method for order-preserving execution of write request and network device | |
CN115576716A (zh) | 一种基于多进程的内存管理方法 | |
US20190332289A1 (en) | Devices, systems, and methods for reconfiguring storage devices with applications | |
CN117632516A (zh) | 资源分配方法、装置、和计算机设备 | |
CN116578416B (zh) | 一种基于gpu虚拟化的信号级仿真加速方法 | |
CN110447019B (zh) | 存储器分配管理器及由其执行的用于管理存储器分配的方法 | |
US11809911B2 (en) | Resuming workload execution in composed information handling system | |
US11327812B1 (en) | Distributed storage system with per-core rebalancing of thread queues | |
CN112667401A (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 |