CN115309539A - 显存分配方法、系统及非暂时性存储介质 - Google Patents

显存分配方法、系统及非暂时性存储介质 Download PDF

Info

Publication number
CN115309539A
CN115309539A CN202210748218.XA CN202210748218A CN115309539A CN 115309539 A CN115309539 A CN 115309539A CN 202210748218 A CN202210748218 A CN 202210748218A CN 115309539 A CN115309539 A CN 115309539A
Authority
CN
China
Prior art keywords
video memory
data
target
subtasks
video
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
CN202210748218.XA
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.)
Alipay Hangzhou Information Technology Co Ltd
Original Assignee
Alipay Hangzhou Information 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 Alipay Hangzhou Information Technology Co Ltd filed Critical Alipay Hangzhou Information Technology Co Ltd
Priority to CN202210748218.XA priority Critical patent/CN115309539A/zh
Publication of CN115309539A publication Critical patent/CN115309539A/zh
Priority to US18/344,500 priority patent/US20240005446A1/en
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • 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
    • 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
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Abstract

本说明书提供的显存分配方法、系统及非暂时性存储介质,用于对串行的多个子任务进行显存分配,通过对串行的每个子任务产生的目标数据进行标记,将目标数据分为不会被后续的子任务使用的第一数据和可以被后续的子任务使用的第二数据,并使多个子任务的第一数据共享同一个目标物理内存地址,从而节省显存消耗。

Description

显存分配方法、系统及非暂时性存储介质
技术领域
本说明书涉及计算机技术领域,尤其涉及一种显存分配方法、系统及非暂时性存储介质。
背景技术
GPU(Graphic Processing Unit,图形处理器)是一种广泛使用的加速硬件,具有高性能计算加速特点,可进行高速并行计算,适合可并行处理的任务,广泛用于AI、深度学习的训练和在线服务。GPU在应用过程中,大多数的功能任务都运行在GPU上,尤其是需要强大算力支撑的功能任务。在线服务场景中,为了更高的吞吐量性能或更高的资源利用率,往往单个物理机节点布置多个GPU,每个GPU部署模型的多个在线服务实例进行并行运算。其中,每个实例可独立提供服务能力。然而,GPU的显存容量有限(比如一般在16GB、32GB等),有限的显存直接制约了模型并行的实例数,或限制了大型的在线计算任务。因此,节省每个实例运算过程中的显存容量对提高运算量十分重要。
因此,需要提供一种能够节省显存容量、优化GPU显存利用的显存分配方法、系统及非暂时性存储介质。
发明内容
本说明书提供一种能够节省显存容量、优化GPU显存利用的显存分配方法、系统及非暂时性存储介质。
第一方面,本说明书提供一种显存分配方法,用于对目标任务运行时所需的显存进行分配,所述目标任务包括串行的多个子任务,所述显存分配方法包括:响应于所述目标任务运行时的显存分配请求,对所述多个子任务中的每个子任务运行时的目标数据进行分类,所述目标数据的类型至少包括第一数据,所述第一数据不会被后续的子任务使用;为所述多个子任务分配多个目标显存池;以及基于所述目标数据的类型,将所述多个目标显存池中的每个目标显存池划分为至少一个显存块,所述至少一个显存块至少包括与所述第一数据对应第一显存块,所述多个子任务对应的多个第一显存块映射到同一个目标物理内存地址。
在一些实施例中,还包括:在所述每个子任务运行时:基于所述目标数据的类型将所述目标数据存入对应的显存块中;以及当前子任务运行结束后,将所述目标物理内存地址对应的显存空间释放给下一个子任务的所述第一数据。
在一些实施例中,所述对所述多个子任务中的每个子任务运行时的目标数据进行分类,包括:基于所述目标数据的类型对所述目标数据添加类型标签,所述类型标签至少包括与所述第一数据对应的第一标签。
在一些实施例中,所述基于所述目标数据的类型,将所述多个目标显存池中的每个目标显存池划分为至少一个显存块,包括:将所述每个目标显存池的至少部分显存空间划分为所述第一显存块,分配给所述第一数据;以及将所述多个第一显存块映射到所述目标物理内存地址。
在一些实施例中,所述多个第一显存块为虚拟显存,所述将所述多个第一显存块映射到所述目标物理内存地址,包括:基于单例模式将所述多个第一显存块映射到多个虚拟显存;以及将所述多个虚拟显存映射到所述目标物理内存地址,并反馈多个虚拟显存指针,所述多个虚拟显存指针中的每个虚拟显存指针包括其对应的所述第一显存块的容量以及所述目标物理内存地址。
在一些实施例中,所述目标数据的类型还包括第二数据,所述第二数据会被后续的子任务使用,所述类型标签还包括与所述第二数据对应的第二标签,所述至少一个显存块还包括与所述第二数据对应的第二显存块;以及所述基于所述目标数据的类型,将所述多个目标显存池中的每个目标显存池划分为至少一个显存块,还包括:将所述每个目标显存池的至少部分显存空间划分为所述第二显存块,分配给所述第二数据。
在一些实施例中,所述第二数据包括输入数据、输出数据以及默认数据;所述第二标签包括:输入数据标签,与所述输入数据对应;输出数据标签,与所述输出数据对应;以及默认数据标签,与所述默认数据对应;所述第二显存块包括:输入输出显存块,与所述输入数据以及所述输出数据对应;以及默认显存块,与所述默认数据对应。
在一些实施例中,所述第一数据包括激活值数据以及工作空间数据;所述第一标签包括:激活值数据标签,与所述激活值数据对应;以及工作空间数据标签,与所述工作空间数据对应;所述第一显存块包括:激活值显存块,与所述激活值数据对应;以及工作空间显存块,与所述工作空间数据对应。
第二方面,本说明书提供一种显存分配系统,包括:至少一个存储介质,存储有至少一个指令集,用于对目标任务运行时所需的显存进行分配,所述目标任务包括多个串行的子任务;以及至少一个处理器,同所述至少一个存储介质通信连接,其中,当所述显存分配系统运行时,所述至少一个处理器读取所述至少一个指令集,并且根据所述至少一个指令集的指示第一方面所述的显存分配方法。
第三方面,本说明书提供一种非暂时性存储介质,存储有至少一个指令集用于对目标任务运行时所需的显存进行分配,所述目标任务包括多个串行的子任务,当所述至少一个指令集被处理器执行时,所述处理器根据所述至少一个指令集实施第一方面所述的显存分配方法。
由以上技术方案可知,本说明书提供的显存分配方法、系统及非暂时性存储介质,通过对串行的每个子任务产生的目标数据进行标记,从而对目标数据进行分类,将目标数据分为不会被后续的子任务使用的第一数据和可以被后续的子任务使用的第二数据。其中,在当前子任务运行结束后,其产生的第一数据可以被清理。本说明书提供的显存分配方法、系统及非暂时性存储介质可以将GPU显存中的部分显存划分为多个目标显存池,分别分配给多个子任务。其中,每个目标显存池被划分为用于存放第一数据的第一显存块和用于存放第二数据的第二显存块。其中,不同的子任务对应的第二显存块指向不同的物理内存地址,不同的子任务对应的第一显存块通过虚拟显存指针以单例模式指向同一个目标物理内存地址,从而实现不同子任务对应的不同的目标显存池里的第一数据通过不同的虚拟地址跨显存池存储到同一个目标物理内存地址。当多个子任务串行时,一个时刻只有一个子任务在运行,因此,只有一个子任务的第一数据占用所述目标物理内存地址。当前子任务运行结束后,其对应的第一数据会被清除,将所述目标物理地址释放给下一个子任务使用。本说明书提供的显存分配方法、系统及非暂时性存储介质可以提高GPU显存的利用率,节省模型运行时所占用的显存容量,优化GPU显存利用,从而提高GPU的运算量。
本说明书提供的显存分配方法、系统及非暂时性存储介质的其他功能将在以下说明中部分列出。根据描述,以下数字和示例介绍的内容将对那些本领域的普通技术人员显而易见。本说明书提供的显存分配方法、系统及非暂时性存储介质的创造性方面可以通过实践或使用下面详细示例中所述的方法、装置和组合得到充分解释。
附图说明
为了更清楚地说明本说明书实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了根据本说明书的实施例提供的一种显存分配系统的系统架构图;
图2示出了根据本说明书的实施例提供的一种服务器的硬件结构图;
图3示出了根据本说明书的实施例提供的一种显存分配方法流程图;以及
图4示出了根据本说明书的实施例提供的一种目标数据流向示意图。
具体实施方式
以下描述提供了本说明书的特定应用场景和要求,目的是使本领域技术人员能够制造和使用本说明书中的内容。对于本领域技术人员来说,对所公开的实施例的各种局部修改是显而易见的,并且在不脱离本说明书的精神和范围的情况下,可以将这里定义的一般原理应用于其他实施例和应用。因此,本说明书不限于所示的实施例,而是与权利要求一致的最宽范围。
这里使用的术语仅用于描述特定示例实施例的目的,而不是限制性的。比如,除非上下文另有明确说明,这里所使用的,单数形式“一”,“一个”和“该”也可以包括复数形式。当在本说明书中使用时,术语“包括”、“包含”和/或“含有”意思是指所关联的整数,步骤、操作、元素和/或组件存在,但不排除一个或多个其他特征、整数、步骤、操作、元素、组件和/或组的存在或在该系统/方法中可以添加其他特征、整数、步骤、操作、元素、组件和/或组。
考虑到以下描述,本说明书的这些特征和其他特征、以及结构的相关元件的操作和功能、以及部件的组合和制造的经济性可以得到明显提高。参考附图,所有这些形成本说明书的一部分。然而,应该清楚地理解,附图仅用于说明和描述的目的,并不旨在限制本说明书的范围。还应理解,附图未按比例绘制。
本说明书中使用的流程图示出了根据本说明书中的一些实施例的系统实现的操作。应该清楚地理解,流程图的操作可以不按顺序实现。相反,操作可以以反转顺序或同时实现。此外,可以向流程图添加一个或多个其他操作。可以从流程图中移除一个或多个操作。
为了方便展示,在开始描述之前,我们将对后面的描述中将会引用的术语进行如下解释:
吞吐量:是指对网络、设备、端口、虚电路或其他设施,单位时间内成功地传送数据的数量(以比特、字节、分组等测量)。
深度学习:Deep Learning,简称DL,典型的基于深度神经网络(DNN)的机器学习系列方法。
GPU:一种广泛使用的能够减少对CPU依赖、并进行部分原本CPU工作的微处理器,GPU是一种加速硬件,可用于图形显示以及计算加速。GPU具有高速并行计算的特点,适合可并行处理的任务,例如当前典型的深度学习任务,性能比CPU往往可提高5~10X。
显存:GPU卡上的高速内存,带宽很高(达到700GB+/sec),但容量较小(典型16/32GB),所以制约了一些大模型、大样本的深度学习任务。
权重:描述深度学习所训练并最终学习到的特征,模型推理时权重往往全部加载到推理设备的GPU上,一个计算机节点为了性能(例如吞吐量)往往会加载模型的多个实例,从而占用较多显存,每个实例可独立提供服务能力。
激活值:神经网络模型中间层的输出结果,一般占据了神经网络模型所需显存中最大的空间。
GPU虚拟内存:应用程序可见的指针,即虚拟内存指针,用于指向物理内存地址。
GPU虚拟内存-物理内存影射:将虚拟内存与物理内存地址执行关联、绑定的机制。
深度学习算法模型(DL)目前已经广泛用于支付(人脸)、定损(图片识别)、交互与客服(语音识别、内容过滤)等多种场景。典型深度学习算法模型任务需要强大的算力支撑,因此当前绝大多数任务都运行在GPU等加速设备之上。深度学习算法模型在进行在线推理服务时,对GPU显存的需求通常包括以下4部分:
1.模型的输入、输出:占比较小;
2.模型计算过程中产生的中间结果(激活值)以及其他临时开销(工作空间,workspace);
3.模型的权重:典型模型包括多层,每层由训练所得到的权重。模型越大,实例越多,权重的总量也越多,权重初始化时已经布置在显存中了;
4.GPU运行时的开销:例如context,cudnn/cublas handle的开销等,通常固定值。
深度学习算法模型是一种组接性以及模块化极强的算法模型,目前常用的深度学习框架比如Caffe,Mxnet,tensorflow等,它们的设计理念是将深度学习算法模型抽象成一个计算路线图(即为定义好的有向无环图),然后控制算法模型输入数据流动,逐层计算,并且每层都会有一个输入和输出,每一层的输出作为下一层输入依次经过计算路线图中的各个神经网络层,最终给出结果。现有技术中,用于学术研究的深度学习算法模型,在运行过程中,通常会将经过每一层传输的数据(第2类数据)进行存储,而随着神经网络层的加深,所需存储的数据也越来越多,相应的,则需要开辟更多的显存用来存储数据,则一个深度学习算法模型会同时占用大量的显存空间,并且不利于在多个深度学习算法模型之间进行显存资源的分配与复用。在深度模型的在线推理场景中,使用者主要关注的是深度学习算法模型给出的最后值,其它的中间结果则没有任何意义。
现有技术中,对于由多个串行的深度学习子模型构成的模型在运行时,当GPU运行一个子模型任务时,会从所具有的显存中为该子模型任务分配一部分显存以用于运行,一般显存的分配方式是预先分配。计算过程中,每计算完成一个子模型任务,子模型任务产生并使用完成的数据在不被后续的功能任务需要的情况下,其对应的显存会立即被释放。然而,每个子模型任务都预先分配有对应的显存,不同子模型任务间对应的显存是互相独立的,前一个子模型任务被释放的显存无法被后续的子模型任务使用。因此,在模型串行运行的情况下,即便是前一个子模型任务的中间结果所占用的显存及时被释放,后一个子模型任务所需要的中间结果的显存仍然会缓存在各自的显存池里面。因此,现有技术的模型运行时的显存消耗较大。
本说明书提供的显存分配方法、系统及非暂时性存储介质,用于对串行的多个子任务进行显存分配,通过对串行的每个子任务产生的目标数据进行标记,将目标数据分为不会被后续的子任务使用的第一数据和可以被后续的子任务使用的第二数据,并使多个子任务的第一数据共享同一个目标物理内存地址,从而节省显存消耗。
图1示出了根据本说明书的实施例提供的一种显存分配系统001的系统架构图。本说明书提供的显存分配方法,可以应用于如图1所示的显存分配系统001中。本说明书提供的显存分配方法以及显存分配系统001可以用于模型的在线推理服务场景。所述在线推理服务场景可以是基于训练好的模型对新的输入数据进行在线推理计算。所述训练好的模型可以是任意模型,比如,人脸识别模型、数据分类模型、风险识别模型,等等。为了方便描述,我们将所述训练好的模型定义为目标任务。在本说明书中,所述目标任务可以包括串行的多个子任务。如图1所示,显存分配系统001可以包括客户端100以及服务器200。
如图1所示,客户端100可以与服务器200进行通信连接。在一些实施例中,服务器200可以与多个客户端100进行通信连接。在一些实施例中,客户端100可以通过网络与服务器200交互,以接收或发送消息等。客户端100可以采集输入数据所述目标任务的输入数据,并基于所述通信连接将所述输入数据发送给服务器200。在一些实施例中,客户端100可以安装有一个或多个应用(APP)。所述APP能够为客户端100采集所述输入数据。在一些实施例中,客户端100可以包括移动设备、平板电脑、笔记本电脑、机动车辆的内置设备或类似内容,或其任意组合。在一些实施例中,所述移动设备可包括智能家居设备、智能移动设备、虚拟现实设备、增强现实设备或类似设备,或其任意组合。在一些实施例中,所述智能家居装置可包括智能电视、台式电脑等,或任意组合。在一些实施例中,所述智能移动设备可包括智能手机、个人数字辅助、游戏设备、导航设备等,或其任意组合。在一些实施例中,所述虚拟现实设备或增强现实设备可能包括虚拟现实头盔、虚拟现实眼镜、虚拟现实补丁、增强现实头盔、增强现实眼镜、增强现实补丁或类似内容,或其中的任何组合。例如,所述虚拟现实设备或所述增强现实设备可能包括谷歌眼镜、头戴式显示器、VR等。在一些实施例中,所述机动车中的内置装置可包括车载计算机、车载电视等。在一些实施例中,客户端100可以是具有定位技术的设备,用于定位客户端100的位置。
服务器200可以是提供各种服务的服务器,例如对客户端100上显示的页面提供支持的后台服务器。服务器200可以存储有执行本说明书描述的显存分配方法的数据或指令,并可以执行或用于执行所述数据或指令。在一些实施例中,服务器200可以包括具有数据信息处理功能的硬件设备和驱动该硬件设备工作所需必要的程序。服务器200上可以预先安装有所述目标任务的应用程序。服务器200可以与多个客户端100通信连接,并接收客户端100采集的输入数据。服务器200可以执行本说明书描述的显存分配方法,接收客户端100发送的所述输入数据,并基于所述目标任务的应用程序对所述输入数据进行推理计算。
如图1所示,服务器200可以包括至少一个GPU硬件210。每个GPU硬件210上可以部署所述目标任务的一个或多个服务实例(worker)。每个服务实例可单独提供服务能力。多个服务实例在GPU硬件210上并行运行。为了方便描述,我们将每个GPU硬件210上运行的服务实例的数量定义为L。其中,L为不小于1的正整数。多个服务实例分别标记为服务实例P1、服务实例P2、……、服务实例Pi、……、服务实例PL。其中,i=1,2,……,L。
如前所述,所述目标任务可以包括多个串行的子任务。为了方便描述,我们将子任务的数量定义为N。其中,N为大于1的正整数。N个子任务之间串行,即所述目标任务运行时,N个子任务依次运行。为了方便描述,我们将串行的N个子任务按照串行的先后关系依次标记为子任务M1、子任务M2、……、子任务Mj、……、子任务MN。其中,j=1,2,……,N。在每个服务实例Pi中,每一时刻只有一个子任务在运行。
以图1为例,图1中示出了2个GPU硬件210。图1中的每个GPU硬件210上运行了3个服务实例。本领域技术人员应当明白,图1中所示出的数量仅仅是示例性说明,其余数量的GPU硬件210以及每个GPU硬件210上部署的服务实例都在本说明书的保护范围内。
服务器200可以执行本说明书描述的显存分配方法的数据或指令,获取GPU硬件210的资源和资源配置策略,为每个子任务Mj分配运行时所需的显存。
图2示出了根据本说明书的实施例提供的一种服务器200的硬件结构图。服务器200可以执行本说明书描述的显存分配方法。所述显存分配方法将在后面的描述中详细介绍。如前所述,服务器200可以包括至少一个GPU硬件210。服务器200还可以包括至少一个处理器220和至少一个存储介质230。在一些实施例中,服务器200还可以包括通信模块250和内部通信总线260。
内部通信总线260可以连接不同的系统组件,包括GPU硬件210、存储介质230、处理器220以及通信模块250。
存储介质230可以包括数据存储装置。所述数据存储装置可以是非暂时性存储介质,也可以是暂时性存储介质。比如,所述数据存储装置可以包括磁盘232、只读存储介质(ROM)234或随机存取存储介质(RAM)236中的一种或多种。存储介质230还包括存储在所述数据存储装置中的至少一个指令集。所述指令是计算机程序代码,所述计算机程序代码可以包括执行本说明书提供的显存分配方法的程序、例程、对象、组件、数据结构、过程、模块等等。
至少一个处理器220可以同至少一个存储介质230通信连接。至少一个处理器220用以执行上述至少一个指令集。当服务器200运行时,至少一个处理器220读取所述至少一个指令集,并且根据所述至少一个指令集的指示执行本说明书提供的显存分配方法。处理器220可以执行显存分配方法包含的所有步骤。处理器220可以是一个或多个处理器的形式,在一些实施例中,处理器220可以包括一个或多个硬件处理器,例如微控制器,微处理器,精简指令集计算机(RISC),专用集成电路(ASIC),特定于应用的指令集处理器(ASIP),中央处理单元(CPU),图形处理单元(GPU),物理处理单元(PPU),微控制器单元,数字信号处理器(DSP),现场可编程门阵列(FPGA),高级RISC机器(ARM),可编程逻辑器件(PLD),能够执行一个或多个功能的任何电路或处理器等,或其任何组合。仅仅为了说明问题,在本说明书中服务器200中仅描述了一个处理器220。然而,应当注意,本说明书中服务器200还可以包括多个处理器220,因此,本说明书中披露的操作和/或方法步骤可以如本说明书所述的由一个处理器执行,也可以由多个处理器联合执行。例如,如果在本说明书中服务器200的处理器220执行步骤A和步骤B,则应该理解,步骤A和步骤B也可以由两个不同处理器220联合或分开执行(例如,第一处理器执行步骤A,第二处理器执行步骤B,或者第一和第二处理器共同执行步骤A和B)。
通信模块250可以与处理器220连接,用于服务器200同外界的数据通讯,比如服务器200和客户端100。通信模块250可以包括有线通信模块和无线通信模块中的至少一种。
图3示出了根据本说明书的实施例提供的一种显存分配方法P100的流程图。如前所述,服务器200可以执行本说明书所述的显存分配方法P100。具体地,处理器220可以读取存储在其本地存储介质中的指令集,然后根据所述指令集的规定,执行本说明书所述的显存分配方法P100。如图3所示,所述方法P100可以包括:
S120:响应于所述目标任务运行时的显存分配请求,对所述多个子任务中的每个子任务运行时的目标数据进行分类。
如前所述,所述目标任务可以是训练好的深度学习算法模型进行在线推理运算服务的任务。所述子任务可以是所述目标任务中串行的子模型。所述子任务在运行过程中可以产生多种类型的目标数据。不同类型的目标数据具有不同的性质。在一些实施例中,所述目标数据至少可以包括第一数据。所述第一数据可以是不会被后续的子任务使用的数据。所述第一数据可以是当前子任务运行过程中产生的中间数据,比如神经网络模型的中间层计算过程中产生的中间数据。在当前子任务运行结束后,所述第一数据不会被后续运行的子任务所采用,也就是说,在当前子任务运行结束后,所述当前子任务运行过程中产生的所述第一数据将失去意义。在一些实施例中,所述第一数据可以包括激活值数据以及工作空间数据。
如前所述,所述深度学习算法模型可以是神经网络模型。所述神经网络模型可以包括多个神经网络层。每层都会有一个输入和输出,每一层的输出作为下一层输入依次经过计算路线图中的各个神经网络层,最终给出结果。在子任务运行过程中,通常会将经过每一层传输的数据进行存储。所述激活值数据就是所述神经网络模型中在第一层的输入值和最后一层的输出值之外的神经网络其他层的输入值及输出值。所述激活值数据也可以叫做所述子任务在运行过程中产生的中间结果。在所述目标任务运行过程中,每个子任务运行时所产生的所述激活值数据所占用的显存较大。在一些实施例中,所述激活值数据占用的显存是每个子任务运行时所需的显存中最大的。在深度模型的在线推理场景中,使用者主要关注的是每个子任务给出的最后值,其中间结果则没有任何意义。因此,在每个子任务运行结束后,所述子任务运行过程中产生的激活值数据将不会再被使用。因此,在每个子任务运行结束后,所述子任务运行过程中产生的激活值数据可以被清理掉。因此,所述激活值数据可以存放在单独的显存块中。
所述工作空间数据可以包括搜索工作空间数据(搜索workspace),也可以包括计算工作空间数据(计算workspace)。搜索工作空间数据所占用的显存较大,具有临时性。搜索工作空间数据的生命周期仅限于算子搜索的范围。在每个子任务运行结束后,搜索工作空间数据将不再被需要。因此,在每个子任务运行结束后,所述子任务运行过程中产生的搜索工作空间数据可以被清理掉。同样的,在每个子任务运行结束后,计算工作空间数据将不再被需要。因此,在每个子任务运行结束后,所述子任务运行过程中产生的计算工作空间数据可以被清理掉。因此,所述工作空间数据可以存放在单独的显存块中。
在一些实施例中,所述目标数据还可以包括第二数据。所述第二数据可以是会被后续的子任务使用。比如,当前子任务运行过程中产生的输入数据和输出数据。在当前子任务结束后,所述输入数据和输出数据可能会被后续的子任务继续采用。因此,在所有子任务运行结束前,所述第二数据需保留。在一些实施例中,所述第二数据可以包括输入数据、输出数据以及默认数据。
所述输入数据可以是输入当前子任务的数据。在一些实施例中,当前子任务的所述输入数据可以是与当前子任务相邻的上一个子任务的输出数据。在一些实施例中,当前子任务的所述输入数据还可以包括当前子任务之前的任一个或多个子任务的输出数据。所述输出数据可以是当前子任务输出的数据。在一些实施例中,当前子任务的所述输出数据可以是与当前子任务相邻的下一个子任务的输入数据。在一些实施例中,当前子任务的输出数据还可以包括当前子任务之后的任一个或多个子任务的输入数据。所述输入数据以及所述输出数据需要在不同的子任务之间交换。因此,所述输入数据以及所述输出数据的生命周期较长,而且可能需要在不同的子任务之间传递。所述输入数据与所述输出数据占用的显存大小相对固定。因此,所述输入数据和所述输出数据可以放在单独的显存块中,不与其他数据共用显存块。在当前子任务运行结束后,用于存放所述输入数据和所述输出数据的显存块不会被清理,以保证所述输入数据和所述输出数据可以被保留。
所述其他数据可以是所述目标任务的默认参数,比如权重,等等。所述其他数据占用的显存大小固定。所述其他数据在所述目标任务运行过程中可以被重复使用。因此,所述其他数据可以放在单独的显存块中,用于存放所述其他数据的显存块不会被清理,以保证所述其他数据可以被保留。
在一些实施例中,步骤S120可以是:服务器200基于所述目标数据的类型对所述目标数据添加类型标签。服务器200可以通过步骤S120通过添加类型标签对不同类型的目标数据进行标记,以将不同类型的目标数据进行区分,为后续对不同类型的目标数据采取不同的显存分配策略奠定基础。所述类型标签可以是任意形式的可以用于区分不同类型的标记。比如,所述类型标签可以是数据标签,不同类型的目标数据被标记为不同的数据。比如,所述类型标签可以是符号标签,不同类型的目标数据被标记为不同的符号,等等。在一些实施例中,所述类型标签可以包括与所述第一数据对应的第一标签。服务器200可以将所述第一数据标记为所述第一标签。在一些实施例中,所述第一标签可以包括激活值数据标签以及工作空间数据标签。其中,所述激活值数据标签可以与所述激活值数据对应。服务器200可以将所述激活值数据标记为所述激活值数据标签。所述工作空间数据标签可以与所述工作空间数据对应。服务器200可以将所述工作空间数据标记为所述工作空间数据标签。在一些实施例中,所述类型标签还可以包括与所述第二数据对应的第二标签。服务器200可以将所述第二数据标记为所述第二标签。在一些实施例中,所述第二标签可以包括输入数据标签、输出数据标签以及默认数据标签。其中,所述输入数据标签可以与所述输入数据对应。服务器200可以将所述输入数据标记为所述输入数据标签。所述输出数据标签可以与所述输出数据对应。服务器200可以将所述输出数据标记为所述输出数据标签。所述默认数据标签可以与所述默认数据对应。服务器200可以将所述默认数据标记为所述默认数据标签。
如图3所示,所述方法P100还可以包括:
S140:为所述多个子任务分配多个目标显存池。
所述多个子任务与所述多个目标显存池一一对应。如前所述,所述多个子任务标记为N个子任务。则N个子任务对应N个目标显存池。N个目标显存池中的而每个目标显存池用于存放其对应的子任务运行过程中的所述目标数据。服务器200可以将GPU显存的至少部分显存空间分配给所述目标任务。具体地,服务器200可以将GPU显存的至少部分显存空间划分为N个目标显存池,分别分配给N个子任务。在步骤S1140中,服务器200以显存池的方式对N个子任务进行显存分配。
所述显存池指的是预先对所述GPU硬件210所对应的显存空间进行划分而获得的显存容量单位,其作用在于使所述GPU硬件210所对应的显存空间分别分配给N个子任务。所述对所述GPU硬件210所对应的显存空间进行划分,可预先确定每个目标显存池所需的容量,按所述容量划分所述目标显存池。所述每个目标显存池的容量可以预先确定。在一些实施例中,服务器200可以预先进行前向推理,从而确定每个子任务对应的目标显存池的容量。在一些实施例中,服务器200可以进行一次前向推理确定每个目标显存池的容量,也可以进行多次前向推理确定每个目标显存池的容量。
对于所述对所述GPU硬件210所对应的显存空间进行划分的实施过程,可通过GPU存储管理器完成。所述GPU存储管理器的功能与内存管理单元(英文名称MemoryManagementUnit,简称MMU)的功能类似,主要用于进行显存管理,以及提供虚实地址转换等硬件支持。
如图3所示,所述方法P100还可以包括:
S160:基于所述目标数据的类型,将所述多个目标显存池中的每个目标显存池划分为至少一个显存块。
如前所述,所述目标数据的类型至少可以包括所述第一数据。所述至少一个显存块至少可以包括与所述第一数据对应第一显存块。N个子任务对应N个第一显存块。如前所述,所述第一数据在对应的子任务运行结束后,将不会再被后续的子任务采用。因此,所述第一数据在对应的子任务运行结束后,可以被清除,以将所述第一显存块对应的显存空间释放给后续子任务运行时产生的所述第一数据,从而节省显存空间。也就是说,所述N个子任务对应的N个第一显存块可以共享同一个物理显存空间。为了使N个第一显存块可以共享同一个物理显存空间,服务器200可以将所述N个子任务对应的N个第一显存块映射到同一个目标物理内存地址。由于N个子任务之间为串行关系,同一时刻只有一个子任务在运行。也就是说,同一时刻只有一个子任务的第一数据会被存放在所述目标物理内存地址所指向的显存空间内。因此,服务器200可以基于N个子任务串行的特点,将每个子任务在运行期间产生的所述第一数据分时(在不同的时间)存储在所述目标物理内存地址指向的显存空间内,使N个子任务分时(在不同的时间)对所述目标物理内存地址指向的显存空间进行重复使用,从而节省所述第一数据占用的显存空间,优化GPU显存分配。其中,同一时刻,N个子任务中只能有一个子任务占用所述目标物理内存地址指向的显存空间。在一些实施例中,服务器200可以通过虚拟内存指针的方式将所述N个第一显存块指向所述目标物理内存地址。
具体地,步骤S160可以包括:
S162:将所述每个目标显存池的至少部分显存空间划分为所述第一显存块,分配给所述第一数据。
S164:将所述多个第一显存块映射到所述目标物理内存地址。
在一些实施例中,所述第一显存块可以是虚拟显存。步骤S164可以是:服务器200基于单例模式将所述多个第一显存块映射到虚拟显存池中的多个虚拟显存中;以及将所述多个虚拟显存映射到所述目标物理内存地址,并反馈多个虚拟显存指针。所述多个虚拟显存指针中的每个虚拟显存指针包括其对应的所述第一显存块的容量以及所述目标物理内存地址。
所述虚拟显存指的是在将所述GPU硬件210对应的至少部分显存空间的资源同时供给多个虚拟机进行使用(GPU虚拟化)的过程中,每个所述虚拟机所获得的GPU硬件210的使用资源。所述虚拟显存作为虚拟机的一部分,可实现虚拟机的GPU计算功能。因此,所述虚拟显存在虚拟机层次上可作为虚拟机的组成部分。从物理实现而言,所述虚拟显存是基于GPU硬件210对应的显存空间实现的。在一些实施例中,同一个GPU硬件210对应的显存空间一个物理GPU可对应设置多个所述虚拟显存。
GPU硬件210对应的显存空间实现虚拟显存的方式,是通过对GPU硬件210对应的显存空间的资源在时间、空间等维度进行分配而获得的。GPU硬件210对应的显存空间的资源包括运算时间段和显存空间。为虚拟显存分配资源,就是将GPU硬件210对应的显存空间的运算时间段分配给所述虚拟显存,同时为所述虚拟显存分配相应的显存空间。同一GPU硬件210对应的显存空间的资源可通过上述方式分配给多个虚拟显存。每个虚拟显存提供给一个虚拟机使用。
所述N个虚拟显存与所述目标物理内存地址之间的映射关系可以通过虚拟显存指针保存。N个第一显存块对应N个虚拟显存指针。每个虚拟显存指针包括其对应的所述第一显存块的容量以及所述目标物理内存地址。
N个第一显存块与所述目标物理内存地址之间的映射关系可以基于所述单例模式进行设计,以保证同一时间只能有一个第一显存块映射到所述目标物理内存地址中。所述单例模式以及所述虚拟显存指针使得不同的目标显存池中属于第一数据的目标数据可以实现跨显存池映射到同一个目标物理内存地址上。因此,不同子任务对应的第一数据可以在不同的时刻分时共享所述目标物理内存地址所对应的显存空间,从而节省显存消耗。
在一些实施例中,所述第一显存块可以包括激活值显存块以及工作空间显存块。所述激活值显存块与所述激活值数据对应,可以用于存放所述激活值数据。所述工作空间显存块与所述工作空间数据对应,可以用于存放所述工作空间数据。所述激活值显存块以及所述工作空间显存块可以是相互独立并相互间隔开的。在一些实施例中,所述每个虚拟显存可以包括激活值显存块对应的虚拟显存以及工作空间显存块对应的虚拟显存。此时,所述目标物理内存地址可以是一组物理内存地址。所述目标物理内存地址可以包括激活值物理内存地址以及工作空间物理内存地址。激活值物理内存地址与所述激活值显存块以及所述激活值数据相对应。工作空间物理内存地址可以与所述工作空间现存块以及所述工作空间数据相对应。不同的子任务的激活值显存块对应的虚拟显存可以映射到所述激活值物理内存地址。不同的子任务的工作空间显存块对应的虚拟显存可以映射到所述工作空间物理内存地址。
如前所述,所述目标数据的类型还可以所述第二数据。所述至少一个显存块还可以包括与所述第二数据对应的第二显存块。具体地,步骤S160还可以包括:
S166:将所述每个目标显存池的至少部分显存空间划分为所述第二显存块,分配给所述第二数据。
所述N个子任务对应的N个第二显存块指向N个不同的物理内存地址。所述N个不同的显存空间。由于所述第二数据在对应的子任务结束后也需要被保存下来,因此,N个第二显存块不能共用。在一些实施例中,所述第二显存块可以包括输入输出显存块以及默认显存块。所述输入输出显存块与所述输入数据以及所述输出数据对应,可以用于存放所述输入数据以及所述输出数据。所述默认显存块与所述默认数据对应,可以用于存放所述默认数据。所述输入输出显存块以及所述默认显存块可以是相互独立并相互间隔开的。
所述第一显存块与所述第二显存块可以是相互独立并且相互间隔开的。
在对所述每个目标显存池进行显存块划分时,可以通过实验或测试的方式获取所述至少一个显存块中的每个显存块所需的显存容量。比如,服务器200可以采集若干实验数据或测试数据作为所述输入数据,并输入至所述目标任务中,在所述目标任务运行过程中,确定所述每个目标显存池所需的显存容量,以及所述每个显存块所需的显存容量。
在第一次进行测试时,服务器200还不知道各个显存块所需的容量大小,服务器200可以通过所述目标任务的第一次运行,通过传统的显存分配方法,为每个子任务运行时的目标数据分配显存。在第一次测试中,服务器200需要进行算子的搜索和选择,同时还会做激活值数据所需显存的规划。对于激活值数据的显存来说,第一次测试时,激活值数据的显存空间还不是整块,还需要从对应的目标显存池中逐块的按需分配,所以需要的总显存比较大。而且由于激活值数据的显存空间不是整块,需要频繁的再分配显存。因此第一次测试时,服务器200也不将激活值数据的显存空间映射到所述目标物理地址上,而是存放在所述默认数据显存块中。
而对于工作空间数据来说,第一次测试时的工作空间数据包含了搜索工作空间数据和计算工作空间数据,而且搜索工作空间数据还非常大。因此,第一次测试所需要的工作空间的显存容量会比较大,也不能代表稳定下之后正常运行的时候所需要的工作空间的显存容量的大小。因此,第一次测试,我们不将工作空间数据的显存空间映射到所述目标物理地址,而是存放在所述默认数据显存块中。
所述输入数据和所述输出数据它们的生命周期可能会比较长,可能会在不同的子任务之间传递。因此,为了避免在清理所述目标显存池的时候错误的将所述输入数据和所述输出数据也清理掉,所述输入数据和所述输出数据从第一次测试时就放到输入输出显存块里面。第一次测试时与后续正式运行时所占用的显存容量基本没有变化。因此,从第一次测试就可以确定输入输出显存块的容量大小。
在第一次测试结束之后,第二次测试之前,将默认显存块里面所有的整块显存对象全部清理掉,这样从第二次开始,整块激活值数据的大对象会直接从激活值显存块中去分配。
在第二次测试开始的时候,就会打开开关,将激活值数据的处理放到激活值显存块里面。同时,由于此时不再需要去做算子的搜索,不再需要搜索工作空间。因此第二次测试所使用的工作空间数据已经全部是计算中需要的计算工作空间数据。因此第二次测试是可以比较准确的统计出计算工作空间数据所需的显存容量的大小。所以,服务器200在第二次测试的时候,会去统计和计算工作空间数据在运行过程中所达到的峰值,从而进行显存分配。但是第二次测试的工作空间数据仍然存放到默认显存块里面。
在第二次测试的结束的时候,同样会先去清理默认显存块,并且开辟好与统计出来的峰值相当的一个整块的显存空间作为所述工作空间显存块所需的显存空间。而之所以需要给工作空间显存块分一整块的显存,是为了便于与其他子任务中的工作空间显存块去做共享。同时为了避免整块的峰值显存的对象不够用,我们在工作空间显存块里面都提供了Realloc接口,便于在整块峰值显存的对象不够用时,可以再去从后端去分配。
从第三次测试的时候,会再打开一个开关,将工作空间数据的分配分发到工作空间显存块里面。从第三次测试开始,多个第一显存块共享所述目标物理内存地址所指向的显存空间。
在一些实施例中,所述显存分配方法P100还包括:
S180:在所述每个子任务运行时:基于所述目标数据的类型将所述目标数据存入对应的所述目标显存池的显存块中;以及当前子任务运行结束后,将所述目标物理内存地址对应的显存空间释放给下一个子任务的所述第一数据。
具体的,服务器200可以基于所述目标数据对应的类型标签,将所述目标数据存入与所述类型标签对应的显存块中。在每个子任务运行结束后,服务器200可以清理所述目标物理内存地址所指向的显存空间中的数据,将所述目标物理内存地址所指向的显存空间释放给下一个子任务的所述第一显存块。
图4示出了根据本说明书的实施例提供的一种目标数据流向示意图002。图4示出了一个服务实例P1在服务器200上运行时的目标数据流向示意图。如图4所示,N个子任务对应N个目标显存池。为了方便描述,我们将子任务Mj对应的目标显存池定义为目标显存池Gj。目标显存池Gj可以包括第一显存块G1j和第二显存块G2j。第一显存块G1j可以包括激活值显存块G11j和工作空间显存块G12j。第二显存块G2j可以包括输入输出显存块G21j和默认显存块G22j。子任务Mj运行时产生的目标数据分别为第一数据和第二数据。第一数据存放在第一显存块G1j中。第一数据可以包括激活值数据D11j和工作空间数据D12j。激活值数据D11j存放在激活值显存块G11j中。工作空间数据D12j存放在工作空间显存块G12j。第二数据存放在第二显存块G2j中。第二数据可以包括输入数据D21j、输出数据D22j以及默认数据D23j。输入数据D21j、输出数据D22j存放在输入输出显存块G21j中。默认数据D23j存放在默认显存块G22j中。不同子任务对应的激活值显存块G11j和工作空间显存块G12j通过单例模块S发放至虚拟显存池中。不同子任务对应的激活值显存块G11j通过单例模块S发放至激活值虚拟显存池VG11中。不同子任务对应的激活值显存块G11j对应不同的虚拟显存VG11j。激活值虚拟显存池VG11指向激活值物理内存地址RG11。不同子任务对应的工作空间显存块G12j通过单例模块S发放至工作空间虚拟显存池VG12中。不同子任务对应的工作空间显存块G12j对应不同的虚拟显存VG12j。工作空间虚拟显存池VG12指向工作空间物理内存地址RG12。所述目标物理内存地址RG包括激活值物理内存地址RG11以及工作空间物理内存地址RG12。
综上所述,本说明书提供的显存分配方法P100以及显存分配系统001,通过对目标数据进行标记分类,将目标数据分为不会被再利用的第一数据和可以被再利用的第二数据,并通过对目标数据的标记,对目标显存池进行分区,实现对不同类型的目标数据采用不同的显存分配策略。本说明书提供的显存分配方法P100以及显存分配系统001,使串行的多个子任务中的第一数据在不同时刻分时段共享显存空间。同时,本说明书提供的显存分配方法P100以及显存分配系统001,在上层的代码不做任何更改的条件下,实现了串行的子任务之间的第一数据对应的显存空间的透明共享,在维持计算性能不变的情况下,大幅节省目标任务运行时的显存消耗。在一些实施例中,本说明书提供的显存分配方法P100以及显存分配系统001可以节省60%以上的显存。本说明书提供的显存分配方法P100以及显存分配系统001,上层的python代码不需要做任何更改,部署方式也同样不需要做任何更改,保证了数据的无缝平稳迁移,实现透明无侵入性。本说明书提供的显存分配方法P100以及显存分配系统001,在第一次、第二次以及之后的运行过程中,可以动态的调整显存的分配策略,适应原来的框架的特点。本说明书提供的显存分配方法P100以及显存分配系统001可灵活部署在云原生容器、物理裸机等环境。
本说明书另一方面提供一种非暂时性存储介质,存储有至少一组用来进行显存分配的可执行指令。当所述可执行指令被处理器执行时,所述可执行指令指导所述处理器实施本说明书所述的显存分配方法P100的步骤。在一些可能的实施方式中,本说明书的各个方面还可以实现为一种程序产品的形式,其包括程序代码。当所述程序产品在服务器200上运行时,所述程序代码用于使服务器200执行本说明书描述的显存分配方法P100的步骤。用于实现上述方法的程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)包括程序代码,并可以在服务器200上运行。然而,本说明书的程序产品不限于此,在本说明书中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统使用或者与其结合使用。所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。所述计算机可读存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读存储介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。可以以一种或多种程序设计语言的任意组合来编写用于执行本说明书操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在服务器200上执行、部分地在服务器200上执行、作为一个独立的软件包执行、部分在服务器200上部分在远程计算设备上执行、或者完全在远程计算设备上执行。
上述对本说明书特定实施例进行了描述。其他实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者是可能有利的。
综上所述,在阅读本详细公开内容之后,本领域技术人员可以明白,前述详细公开内容可以仅以示例的方式呈现,并且可以不是限制性的。尽管这里没有明确说明,本领域技术人员可以理解本说明书需求囊括对实施例的各种合理改变,改进和修改。这些改变,改进和修改旨在由本说明书提出,并且在本说明书的示例性实施例的精神和范围内。
此外,本说明书中的某些术语已被用于描述本说明书的实施例。例如,“一个实施例”,“实施例”和/或“一些实施例”意味着结合该实施例描述的特定特征,结构或特性可以包括在本说明书的至少一个实施例中。因此,可以强调并且应当理解,在本说明书的各个部分中对“实施例”或“一个实施例”或“替代实施例”的两个或更多个引用不一定都指代相同的实施例。此外,特定特征,结构或特性可以在本说明书的一个或多个实施例中适当地组合。
应当理解,在本说明书的实施例的前述描述中,为了帮助理解一个特征,出于简化本说明书的目的,本说明书将各种特征组合在单个实施例、附图或其描述中。然而,这并不是说这些特征的组合是必须的,本领域技术人员在阅读本说明书的时候完全有可能将其中一部分设备标注出来作为单独的实施例来理解。也就是说,本说明书中的实施例也可以理解为多个次级实施例的整合。而每个次级实施例的内容在于少于单个前述公开实施例的所有特征的时候也是成立的。
本文引用的每个专利,专利申请,专利申请的出版物和其他材料,例如文章,书籍,说明书,出版物,文件,物品等,可以通过引用结合于此。用于所有目的的全部内容,除了与其相关的任何起诉文件历史,可能与本文件不一致或相冲突的任何相同的,或者任何可能对权利要求的最宽范围具有限制性影响的任何相同的起诉文件历史。现在或以后与本文件相关联。举例来说,如果在与任何所包含的材料相关联的术语的描述、定义和/或使用与本文档相关的术语、描述、定义和/或之间存在任何不一致或冲突时,使用本文件中的术语为准。
最后,应理解,本文公开的申请的实施方案是对本说明书的实施方案的原理的说明。其他修改后的实施例也在本说明书的范围内。因此,本说明书披露的实施例仅仅作为示例而非限制。本领域技术人员可以根据本说明书中的实施例采取替代配置来实现本说明书中的申请。因此,本说明书的实施例不限于申请中被精确地描述过的实施例。

Claims (10)

1.一种显存分配方法,用于对目标任务运行时所需的显存进行分配,所述目标任务包括串行的多个子任务,所述显存分配方法包括:
响应于所述目标任务运行时的显存分配请求,对所述多个子任务中的每个子任务运行时的目标数据进行分类,所述目标数据的类型至少包括第一数据,所述第一数据不会被后续的子任务使用;
为所述多个子任务分配多个目标显存池;以及
基于所述目标数据的类型,将所述多个目标显存池中的每个目标显存池划分为至少一个显存块,所述至少一个显存块至少包括与所述第一数据对应第一显存块,所述多个子任务对应的多个第一显存块映射到同一个目标物理内存地址。
2.如权利要求1所述的显存分配方法,其中,还包括:
在所述每个子任务运行时:
基于所述目标数据的类型将所述目标数据存入对应的显存块中;以及
当前子任务运行结束后,将所述目标物理内存地址对应的显存空间释放给下一个子任务的所述第一数据。
3.如权利要求1所述的显存分配方法,其中,所述对所述多个子任务中的每个子任务运行时的目标数据进行分类,包括:
基于所述目标数据的类型对所述目标数据添加类型标签,所述类型标签至少包括与所述第一数据对应的第一标签。
4.如权利要求3所述的显存分配方法,其中,所述基于所述目标数据的类型,将所述多个目标显存池中的每个目标显存池划分为至少一个显存块,包括:
将所述每个目标显存池的至少部分显存空间划分为所述第一显存块,分配给所述第一数据;以及
将所述多个第一显存块映射到所述目标物理内存地址。
5.如权利要求4所述的显存分配方法,其中,所述多个第一显存块为虚拟显存,所述将所述多个第一显存块映射到所述目标物理内存地址,包括:
基于单例模式将所述多个第一显存块映射到多个虚拟显存;以及
将所述多个虚拟显存映射到所述目标物理内存地址,并反馈多个虚拟显存指针,所述多个虚拟显存指针中的每个虚拟显存指针包括其对应的所述第一显存块的容量以及所述目标物理内存地址。
6.如权利要求4所述的显存分配方法,其中,所述目标数据的类型还包括第二数据,所述第二数据会被后续的子任务使用,所述类型标签还包括与所述第二数据对应的第二标签,所述至少一个显存块还包括与所述第二数据对应的第二显存块;以及
所述基于所述目标数据的类型,将所述多个目标显存池中的每个目标显存池划分为至少一个显存块,还包括:
将所述每个目标显存池的至少部分显存空间划分为所述第二显存块,分配给所述第二数据。
7.如权利要求6所述的显存分配方法,其中,所述第二数据包括输入数据、输出数据以及默认数据;
所述第二标签包括:
输入数据标签,与所述输入数据对应;
输出数据标签,与所述输出数据对应;以及
默认数据标签,与所述默认数据对应;
所述第二显存块包括:
输入输出显存块,与所述输入数据以及所述输出数据对应;以及
默认显存块,与所述默认数据对应。
8.如权利要求4所述的显存分配方法,其中,所述第一数据包括激活值数据以及工作空间数据;
所述第一标签包括:
激活值数据标签,与所述激活值数据对应;以及
工作空间数据标签,与所述工作空间数据对应;
所述第一显存块包括:
激活值显存块,与所述激活值数据对应;以及
工作空间显存块,与所述工作空间数据对应。
9.一种显存分配系统,包括:
至少一个存储介质,存储有至少一个指令集,用于对目标任务运行时所需的显存进行分配,所述目标任务包括多个串行的子任务;以及
至少一个处理器,同所述至少一个存储介质通信连接,
其中,当所述显存分配系统运行时,所述至少一个处理器读取所述至少一个指令集,并且根据所述至少一个指令集的指示执行权利要求1-8中任一项所述的显存分配方法。
10.一种非暂时性存储介质,存储有至少一个指令集用于对目标任务运行时所需的显存进行分配,所述目标任务包括多个串行的子任务,当所述至少一个指令集被处理器执行时,所述处理器根据所述至少一个指令集实施权利要求1-8中任一项所述的显存分配方法。
CN202210748218.XA 2022-06-29 2022-06-29 显存分配方法、系统及非暂时性存储介质 Pending CN115309539A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202210748218.XA CN115309539A (zh) 2022-06-29 2022-06-29 显存分配方法、系统及非暂时性存储介质
US18/344,500 US20240005446A1 (en) 2022-06-29 2023-06-29 Methods, systems, and non-transitory storage media for graphics memory allocation

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210748218.XA CN115309539A (zh) 2022-06-29 2022-06-29 显存分配方法、系统及非暂时性存储介质

Publications (1)

Publication Number Publication Date
CN115309539A true CN115309539A (zh) 2022-11-08

Family

ID=83854780

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210748218.XA Pending CN115309539A (zh) 2022-06-29 2022-06-29 显存分配方法、系统及非暂时性存储介质

Country Status (2)

Country Link
US (1) US20240005446A1 (zh)
CN (1) CN115309539A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116450055A (zh) * 2023-06-15 2023-07-18 支付宝(杭州)信息技术有限公司 一种多处理卡间的存储区域分配方法和系统

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116450055A (zh) * 2023-06-15 2023-07-18 支付宝(杭州)信息技术有限公司 一种多处理卡间的存储区域分配方法和系统
CN116450055B (zh) * 2023-06-15 2023-10-27 支付宝(杭州)信息技术有限公司 一种多处理卡间的存储区域分配方法和系统

Also Published As

Publication number Publication date
US20240005446A1 (en) 2024-01-04

Similar Documents

Publication Publication Date Title
US9734546B2 (en) Split driver to control multiple graphics processors in a computer system
CN107766148B (zh) 一种异构集群及任务处理方法和装置
CN107003892B (zh) Gpu虚拟化方法、装置、系统及电子设备、计算机程序产品
US11106261B2 (en) Optimal operating point estimator for hardware operating under a shared power/thermal constraint
US20160239333A1 (en) Apparatus and method for scheduling graphics processing unit workloads from virtual machines
US20100115510A1 (en) Virtual graphics device and methods thereof
CN112445713A (zh) 用于对内存有效分区的技术
CN104641396A (zh) 用于调度图形处理单元命令流的延迟抢占技术
CN111400024B (zh) 渲染过程中的资源调用方法、装置和渲染引擎
KR101609079B1 (ko) 그래픽 프로세싱 유닛에서의 명령 선별
US20130305241A1 (en) Sharing Reconfigurable Computing Devices Between Workloads
US9886735B2 (en) Hybrid engine for central processing unit and graphics processor
CN110554913A (zh) 神经网络系统及其操作方法以及应用处理器
CN104050706A (zh) 用于低功率图形渲染的像素着色器旁路
CN111984400A (zh) 神经网络的内存分配方法及装置
CN109727376B (zh) 生成配置文件的方法、装置及售货设备
CN115309539A (zh) 显存分配方法、系统及非暂时性存储介质
US11494321B1 (en) State buffer memloc reshaping
US10593103B2 (en) Method and apparatus for managing graphics layers within a data processing system
US11562554B1 (en) Workload reduction for non-maximum suppression operation
CN116483584B (zh) Gpu的任务处理方法、装置、电子设备和存储介质
CN113377529A (zh) 一种智能加速卡及基于智能加速卡的数据处理方法
US9779535B2 (en) Configuring resources used by a graphics processing unit
DE102022128966A1 (de) Parallelverarbeitung zur kombinatorischen optimierung
CN114724103A (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