CN111078395B - 一种基于张量的深度学习gpu内存管理优化方法及系统 - Google Patents
一种基于张量的深度学习gpu内存管理优化方法及系统 Download PDFInfo
- Publication number
- CN111078395B CN111078395B CN201911105147.6A CN201911105147A CN111078395B CN 111078395 B CN111078395 B CN 111078395B CN 201911105147 A CN201911105147 A CN 201911105147A CN 111078395 B CN111078395 B CN 111078395B
- Authority
- CN
- China
- Prior art keywords
- tensor
- memory
- access information
- gpu
- tensors
- 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
Links
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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/167—Interprocessor communication using a common memory, e.g. mailbox
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/04—Inference or reasoning models
- G06N5/046—Forward inferencing; Production systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/454—Vector or matrix data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/455—Image or video data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/50—Control mechanisms for virtual memory, cache or TLB
- G06F2212/502—Control mechanisms for virtual memory, cache or TLB using adaptive policy
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/10—Interfaces, programming languages or software development kits, e.g. for simulating neural networks
- G06N3/105—Shells for specifying net layout
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computer Hardware Design (AREA)
- Neurology (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于张量的深度学习GPU内存管理优化方法,至少包括如下步骤:执行至少一个计算操作,其中,所述计算操作以张量为输入并产生张量作为输出;在一个计算操作被执行时,对张量的访问信息进行跟踪,并基于所述访问信息制定内存管理优化决策,在训练的第一次迭代中被动地在CPU内存和GPU内存之间进行内存交换以获得一次完整迭代的张量的访问信息根据获取的关于完整迭代的张量的访问信息,制定内存管理优化决策;在后续迭代中,根据运行时的反馈对制定的内存管理优选决策进行动态调整。
Description
技术领域
本发明属于深度学习系统优化领域,更具体地,涉及一种基于张量的深度学习GPU内存管理优化方法及系统。
背景技术
深度神经网络需要大量的计算和内存。由于各种新兴的异构硬件(如TPU、ASIC和GPU)提供了巨大的计算能力,深度神经网络在当今变得非常流行,其中GPU是目前最流行的训练设备选择。越来越深、越来越宽的神经网络的训练对GPU的内存构成了巨大的挑战。例如,最新的BERT有768个隐藏层,在训练过程中消耗了73GB的内存(批量大小为64)。然而,高带宽的GPU内存是一种稀缺的资源:最新的Nvidia GPU V100的内存最多只有32GB,而商业云中的主流GPU类型(如P100)的内存只有16GB。这限制了探索各种结构的深度神经网络的灵活性。
为了解决这个问题,有两种主要的技术可以减少内存占用:内存交换和重计算。两种方法都采用了在前向传播中释放特征映射内存,然后在后向传播中重新生成特征映射的原则。具体来说,内存交换利用CPU DRAM作为额外的外部内存,在GPU和CPU之间来回异步复制数据;而重计算通过在反向传播中重新计算前向传播中的操作来获得所需特性映射。这两种方法都不会影响训练的精度。例如,公开号为CN109919310A的专利文献,其公开了一种面向深度学习训练任务的GPU内存优化方法及系统,该方法包括:(1)设计基本换入换出操作;(2)在训练开始前首先进行静态数据采集;(3)不采取换入换出策略,先训练若干个epoches,在此期间进行动态数据采集;(4)建立换入换出策略的性能模型,并明确GPU计算、内存、PCIe通信三者之间的制约关系;(5)根据性能模型确定最优策略;(6)剩余的epoch采用最优minibatch size及其匹配的换入换出策略继续训练直至结束。本发明解决了超深神经网络模型无法训练或可训练minibatch size太小引起训练效率低的问题,能够充分利用GPU资源提升超深神经网络模型训练效率。
即,现有技术是基于对计算图的静态分析,并根据不同神经网络层的特性执行分层的GPU内存管理。这种静态分析会产生三个问题:(1)硬件的异构和输入大小的变化使得每层的计算时间难以预测。即使对于同一类型的层,计算时间也有很大的变化。因此,基于层类型静态地确定内存优化目标将限制内存优化的潜力。(2)基于粗略获得的“定性”信息的决策不能量化特定内存操作的开销,因此很难对可优化的内存进行优先级排序以及如何在内存交换和重计算中进行选择。(3)深度神经网络不断快速发展,从卷积神经网络和循环神经网络,再到Transformer和图神经网络,有时甚至会有用户自定义的操作。对于新类型的神经网络,先验知识是不起作用的。另外,对于在执行前没有计算图的深度学习框架,如PyTorch和Tensorflow的eager模式,基于计算图的内存管理并不能在这种命令式编程模式下工作。因此,本发明旨在提供一种能够克服上述缺陷的深度学习GPU内存管理优化方法。
此外,一方面由于对本领域技术人员的理解存在差异;另一方面由于发明人做出本发明时研究了大量文献和专利,但篇幅所限并未详细罗列所有的细节与内容,然而这绝非本发明不具备这些现有技术的特征,相反本发明已经具备现有技术的所有特征,而且申请人保留在背景技术中增加相关现有技术之权利。
发明内容
如本文所用的词语“模块”描述任一种硬件、软件或软硬件组合,其能够执行与“模块”相关联的功能。
针对现有技术之不足,本发明提供一种基于张量的深度学习GPU内存管理优化方法,至少包括如下步骤:执行至少一个计算操作,其中,所述计算操作以张量为输入并产生张量作为输出;在一个计算操作被执行时,对张量的访问信息进行跟踪,并基于所述访问信息制定内存管理优化决策,在训练的第一次迭代中被动地在CPU内存和GPU内存之间进行内存交换以获得一次完整迭代的张量的访问信息;根据获取的关于完整迭代的张量的访问信息,制定内存管理优化决策;在后续迭代中,根据运行时的反馈对制定的内存管理优选决策进行动态调整。
与公开号为CN109919310A的现有技术相比,本发明至少具有区别技术特征A:在训练的第一次迭代中被动地在CPU内存和GPU内存之间进行内存交换以获得一次完整迭代的张量的访问信息;区别技术特征B:根据获取的关于完整迭代的张量的访问信息,制定内存管理优化决策;区别技术特征C:在后续迭代中,根据运行时的反馈对制定的内存管理优选决策进行动态调整。
本申请要解决的技术问题为:如何提升内存优化的潜力。本申请达到的技术效果为:在运行时动态追踪张量访问信息,从而有效感知内存超额信息以及分别利用内存交换和重计算所带来的性能开销,因此能够选择更优的方法来优化某一张量的内存,从而给深度学习的训练带来更少的性能开销。
现有技术要解决的技术问题为:如何提高超神经网络模型的训练效率。现有技术达到的技术效果为:能够充分利用GPU资源提升超深神经网络模型训练效率。综上,本申请与现有技术解决的技术问题不同,采用的技术手段不同,达到的技术效果也不同。
此外,本发明还具有如下有益技术效果:
(1)本发明基于张量来进行深度学习GPU内存管理,由于张量是深度学习中普遍且通用的数据抽象,且所有计算操作都是基于张量,因此本系统采用的方法相较于基于层的内存管理更加细粒度和灵活,且能完全挖掘出内存优化空间,有助于训练更大更深的神经网络。
(2)本发明提出的深度学习GPU内存优化方法只需要在深度学习框架的计算前后打信息采集补丁即可,所需修改的代码量少,使用方便。同时,在符号编程和命令式编程的深度学习框架中都具有同样的张量访问特性,因此本系统采用的方法在所有深度学习框架中均可使用。
附图说明
图1是本发明优选的深度学习GPU内存管理优化系统的模块化结构示意图;
图2是本发明优选的深度学习GPU内存管理优化方法的流程示意图;
图3是本发明优选的符号式编程模式下的实验结果示意图;
图4是本发明优选的命令式编程模式下的实验结果示意图;
图5是本发明优选的获取一次完整迭代的张量的访问信息的流程示意图;和
图6是本发明优选的向前调整张量的内存换入的触发张量访问的流程示意图。
附图标记列表
1:张量模块 2:执行器 3:内存分配器
4:张量存取跟踪器 5:决策器 6:内存池
7:执行队列
具体实施方式
下面结合附图进行详细说明。
为了便于理解,将本申请中的技术用语进行解释。
张量:张量是深度学习中,对向量、矩阵或是更高维的数据的抽象。现有的深度学习系统基本是张量作为数据抽象,所有的计算操作均是以张量为输入并产生张量作为输出。
张量的被动交换:在GPU内存分配失败时移出一些张量到CPU内存,在这些张量再次被访问到时被动换入到GPU内存。
实施例1
如图1所示,本发明提供一种基于张量的深度学习GPU内存管理优化系统,至少包括张量模块1、执行器2、内存分配器3、张量存取跟踪器4、决策器5和内存池6。张量模块1、执行器2、内存分配器3和决策器5均耦合至张量存取跟踪器4。内存池6能够耦合至内存分配器3。张量模块1用于存储张量。张量是深度学习中,对向量、矩阵或是更高维的数据的抽象。现有的深度学习系统基本是张量作为数据抽象,所有的计算操作均是以张量为输入并产生张量作为输出。张量中的每个元素都有相同且已知的数据类型。例如,在本发明中,张量的数据类型可以是整型或浮点型。执行器2可以是处理计算的原子处理单元,其以张量的向量和kernel(计算核函数)作为输入,产生张量的向量作为输出。针对GPU的内存分配器3,其可以是包装底层的内存分配接口和内存释放接口。例如,NVIDIA GPU的cudaMalloc以及NVIDIAGPU的cudaFree。从而可以向上层模块提供动态内存分配和释放来避免物理上分配释放内存的开销。即当一个张量的引用计数到0后,内存分配器3会自动回收该张量对应的底层内存。张量存取跟踪器4能够用于跟踪张量的访问信息。例如,张量存取跟踪器4能够在一个操作被执行的前后分别插入张量访问记录函数来追踪张量的访问信息。决策器5能够根据张量的访问信息制定内存管理优化决策。例如,内存优化管理策略至少包括第一控制命令、第二控制命令和第三控制命令。第一控制命令和第二控制命令能够通过张量存取跟踪器4传输至内存分配器3,其中,内存分配器3能够基于第一控制命令或第二控制命令执行内存交换操作。具体的,内存交换操作至少包括换出操作和换入操作。换出操作是指将内存池6根据内存分配器发出的控制指令,将对应的张量移出到CPU内存中以回收该张量对应的底层GPU内存。换入操作是指将内存池根据内存分配器发出的控制指令,将对应的张量从CPU内存移入到GPU内存中以进行执行。第一控制命令能够配置为触发内存分配器3执行换出操作。第二控制命令可以配置为触发内存分配器3执行换入操作。第三控制命令能够经张量存取跟踪器4传输至执行器2。执行器2能够响应于第三控制命令而执行重计算操作。重计算操作是指在反向传播中重新计算前向传播中的操作以获取所需的特性映射。
优选的,如图1所示,执行器2按照如下步骤执行重计算操作:
A1:执行填充血统关系操作(fill lineage)。
具体的,填充血统关系操作是指填写张量血统关系,即该张量是由哪些张量以及什么操作计算出来的。其目的是为了在需要做重计算的时候能根据该血统关系找到重计算需要的重新执行的操作。
A2:在张量存取跟踪器4将第三控制命令传输至执行器2的情况下,执行器2从张量模块1中获取重计算的操作(get recomputing ops)。
具体的,获取重计算的操作是指从当前张量开始反向遍历张量血统关系,直至找到最近的可用张量从而能计算出该张量。从最近可用张量开始到当前张量血统关系路径上的操作即该张量重计算的操作。目的是能以最小的开销计算出该张量。
A3:执行器2将重计算加入至GPU的执行队列7中。
A4:执行填充内存地址操作(fill addr)。
具体的,填充内存地址操作是指填充张量底层数据的内存地址。张量在换入和重计算时会在GPU内存池中去申请一块新的内存,该内存地址被用来填充张量的内存地址这一字段。其目的是当该张量再次被访问时能从正确的内存地址中去读取数据。
优选的,如图1所示,内存分配器3按照如下步骤执行换入操作或换出操作:
B1:在第一控制命令经张量存取跟踪器4传输至内存分配器3的情况下,内存分配器3执行换出操作,或者在第二控制命令经张量存取跟踪器4传输至内存分配器3的情况下,内存分配器3执行换入操作。
B2:执行填充内存地址操作。
具体的,填充内存地址操作是指填充张量底层数据的内存地址。张量在换入和重计算时会在GPU内存池中去申请一块新的内存,该内存地址被用来填充张量的内存地址这一字段。其目的是当该张量再次被访问时能从正确的内存地址中去读取数据。
优选的,本发明的深度学习GPU内存管理优化系统执行一个计算操作至少包括如下步骤:记录输入张量向量中所有张量的访问信息,并存储到张量访问信息表内;判断张量访问是否会触发内存交换或是重计算,如果触发,则由内存分配器3执行内存交换操作或者由执行器2执行重计算操作;将计算操作添加至GPU执行队列;将输出张量向量中所有张量的访问次数初始化为零,并将其对应的所有访问信息存储至访问信息表。
优选的,执行器2能够用于执行至少一个计算操作。张量存取跟踪器4其能够用于在一个计算操作被执行时,对张量的访问信息进行跟踪。决策器5能够用于基于访问信息制定内存管理优化决策。决策器5被配置为:在训练的第一次迭代中被动地进行内存交换以获得一次完整迭代的张量的访问信息;根据获取的关于完整迭代的张量的访问信息,制定内存管理优化决策;在后续迭代中,根据运行时的反馈对制定的内存管理优选决策进行动态调整。
优选的,内存分配器3能够在张量访问被判定为会触发内存交换的情况下,执行内存交换操作。执行器2还配置为:在判定张量访问会触发重计算的情况下,执行重计算操作;将计算操作添加至GPU执行队列。
优选的,深度学习的训练过程包含前向计算和反向计算,且包含多次迭代,给了本发明优化内存的机会。本发明对于所有深度学习算法的训练都是适用的。例如:ResNet-50,BERT等深度神经网络。深度神经网络的训练过程采用反向传播算法,其中,神经网络参数的更新可采用例如是随机梯度下降、Adam等算法。
实施例2
本实施例是对实施例1的进一步改进,重复的内容不再赘述。
如图2所示,本发明还提供一种基于张量的深度学习GPU内存管理优化方法,至少包括如下步骤:
S1:在训练的第一次迭代中被动地进行内存交换以获得一次完整迭代的张量的访问信息。
具体的,至少包括如下步骤:
S10:构建张量访问信息表,使得每当张量被访问时,张量的访问信息能够存储至所述张量访问信息表。
具体的,在计算中被访问到的张量均可以存储在张量模块1中,张量可以作为输入而被执行器2访问调用。张量访问信息表可以预存于张量模块1中。进而每当张量被访问一次时,便将张量的访问信息存储至张量访问信息表中。张量的访问信息表至少包括编号(id)、计数(count)和时间戳(timestamp),其具体实现形式可以如表1所示。编号表示一个张量所对应的唯一名称,其能够用于对不同的张量进行区分。例如,其可以通过数字编号1、2…n进行区分表示。计数表示张量在一次迭代中被访问的次数。当一个张量产生时,计数会被设置为例如是零的初始值,并且在每被访问以此时,其对应的计数值增加1。时间戳表示张量最近一次被访问的时间,张量每被访问一次时,时间戳会被更新一次。
表1
S11:当产生内存溢出(OOM,Out of Memory)时,从张量访问信息表中最开始寻找一个或多个张量,被动交换出GPU内存直至此次内存溢出消失,并记录此次交换对应的CPU内存地址。
具体的,当产生内存溢出时,基于张量被访问时的时间戳的先后顺序,依次从张量访问信息表中筛选出一个或多个张量,使得一个或多个张量在被动交换出GPU内存而进入CPU内存时,内存溢出能够被消除,其中,一个或多个张量在被动交换后所对应的CPU内存地址能够形成记录。内存溢出是指内存已经被占满,使得内存申请失败。从张量访问信息表中寻找一个或多个张量是指根据访问的时间戳,从最早访问的张量开始选择。
S12:当产生张量访问错误时,确定其对应的CPU内存地址,并将其被动地交换进GPU内存。
具体的,张量访问错误是指该张量在内存溢出时被交换到CPU,因此在GPU中再次被访问时已经不在GPU中从而产生错误。张量模块1可以看作是对底层数据的一个描述,例如该张量的shape、数据在GPU上的物理地址等等,该模块本来就是保存在CPU内存中,因为它并不保存张量实际的数据。内存池6包括CPU内存池和GPU内存池,根据操作类型在GPU和CPU内存之间换入/换出。
S13:当一次迭代结束时,将张量的访问信息的时间戳减去其前面所有被动内存交换的时间以得到一次完整迭代的张量的访问信息。
具体的,如图5所示,假设计算0会访问到张量A,计算1会访问到张量B,计算2会访问到张量C,在被动内存交换时它们分别在时间戳t0,t1,t2被访问。此时将t1减去ts0作为张量B被访问的时间戳。将(t2-ts0-ts1)作为张量C被访问的时间戳。可以理解的是,可以假设拥有一块无限大的GPU内存的情况下去运行该程序时的张量访问时间戳信息。
S2:根据获取的关于完整迭代的张量的访问信息,制定内存管理优化决策。
具体的,制定内存管理优化决策至少包括如下步骤:
S20:根据确定的张量的访问信息,获得用于内存优化的若干个候选张量。
具体的,候选张量是指访问次数出现至少两次且处于峰值内存中的张量。训练过程中GPU内存使用呈现一个逐渐上升到一个峰值,持续一段时间后,逐渐下降的状态。处于峰值内存中指处于峰值这段时间内的张量。
S21:获取候选张量的空闲时间(FreeTime),在基于空闲时间的对候选张量进行降序排序的情况下,为空闲时间最大的候选张量选择内存换入的触发张量访问,并分别计算出内存交换操作所需的第一开销和重计算操作所需的第二开销,其中,在第一开销小于第二开销的情况下,为该候选张量配置内存交换操作,或者在第一开销大于第二开销的情况下,为该候选张量配置重计算操作。
具体的,触发张量访问是指一个特定的张量访问(用张量id和其访问计数来标识,例如张量A的第二次访问),目的在于在该次张量访问时去触发一个特定张量的换出/换入或者是重计算。第一开销根据该张量的空闲时间计算,当空闲时间大于O时,第一开销为O,当空闲时间小于O时,第一开销为空闲时间的绝对值。第二开销的计算方法是在获得重计算所需执行的所有操作后,将所有操作的执行时间加起来。即其等于所有执行时间之和。
S22:根据选择的空闲时间最大的候选张量更新剩余候选张量的空闲时间。
具体的,张量的空闲时间计算方法如下:(1)确定张量分别需要被换出和换入的时间戳。例如,根据该张量的访问信息表,其中访问时间间隔最大的两次访问时间即该张量分别需要被换出和换入的时间戳。(2)根据张量所占的内存大小以及GPU到CPU的PCI-e带宽计算出该张量所需的交换时间(SwapTime),例如,SwapTime可以通过计算公式确定,其中,Tmem为张量所占的内存大小,Bpcie为GPU和CPU间的PCI-e带宽。(3)计算出该张量换出的结束时间(SwapOutEndTime),其等于该张量换出的时间戳加上(SwapTime)。(4)计算出该张量最迟需要开始换入的开始时间(SwapInStartTime),其等于该张量需要换入的时间戳减去该张量的(SwapTime)。(5)张量的FreeTime能够通过计算公式FreeTime=SwapInStartTime-SwapOutEndTime进行确定。在一次迭代中,一个张量被访问的次数是相同的,以及相对于迭代开始被访问的时间戳基本是固定的,因此针对一次迭代的张量访问模式制定内存管理优化决策能很好地被应用到接下来的迭代中。
S23:重复步骤S21和S22,直至选择出来的候选张量的大小满足内存减小的需求。
具体的,当产生内存溢出时,从张量访问信息表中最开始寻找一个或多个张量,被动交换出GPU内存直至此次内存溢出消失。在上述过程中,若被动换出的所有张量大小之和为内存减小的需求,则表明候选张量的大小满足内存减小的需求。
S3:在后续迭代中,根据运行时的反馈对内存管理优化决策进行动态调整。
具体的,对内存管理优化决策进行动态调整至少包括如下步骤:
S30:在张量被访问时,检查其状态,其中,在该张量处于正在换入GPU内存的状态的情况下,向前调整该张量的内存换入的触发张量访问,并使其在下次迭代时生效。
具体的,如图6所示,T2在第一次被访问时需要被换出,那么第二次被访问时它需要及时被换入GPU内存中,其初始的内存换入的触发张量访问是T6的第一次访问(假设T6只被访问一次,虚线所示)。此时在T2的第二次访问时检查其状态,若发现处于正在换入GPU内存的状态(没有及时被换入),则调整其触发张量访问从T6的第一次访问到T9的第一次访问(假设T9也只被访问到一次)。调整原则是:从初始的触发张量访问开始往前找,直到一个张量访问的时间戳和初始触发张量访问时间戳的间隔大于T2的SwapTime×5%。
S31:在张量并不处于正在换入GPU内存的状态的情况下,不对该张量的换入触发张量访问做调整。
具体的,张量处于正在换入GPU内存的状态,表示该张量未被及时换入。
实施例3
本实施例是对前述实施例的进一步改进,重复的内容不再赘述。
如图3和如图4所示,本发明针对提出的深度学习GPU内存管理优化方法进行了验证实验。具体的,本发明进行验证实验的机器配置了Nvidia P100GPU,CPU为Intel XeonE5-2680v4,CPU内存大小为256GB,PCI-e为3.0x16。运行的是Ubuntu 16.04系统,CUDAToolkit版本为9.0,cuDNN版本为7.3.1,Tensorflow的版本为1.11,并且Capuchin(配置了本发明提出的深度学习GPU内存管理优化方法)也是基于该版本。
优选的,分别在Tensorflow的符号化编程模式和命令式编程模式下进行了实验。如图3所示,对比了Tensorflow原版以及现有的工作vDNN和OpenAI实现的重计算。首先对比Tensorflow原版的训练速度可以发现,本发明在运行时记录张量的访问信息所带来的额外开销是非常小的,在1%以内。在内存占用减少上,本发明能达到的最大的批尺寸(batchsize)是Tensorflow自身的5.34倍,是vDNN和OpenAI中较大者的1.88倍。在性能损失上,vDNN表现最差,达到70.0%,这是由于vDNN的静态分析,并且在强计算力的P100下,计算时间很短,并不能很好地掩盖掉内存交换的开销。相较于vDNN和OpenAI,本发明设计的Capuchin可以有效感知内存超载的程度以及内存交换,重计算所带来的性能开销,因此Capuchin较于vDNN和OpenAI分别带来了最大3.86和1.32倍的性能提升,平均提升为3.61倍和1.23倍。
优选的,如图4所示,由于没有现有的工作能够优化命令式编程模式下的GPU内存,因此只对比了Tensorflow原版。此模式下,本发明设计的Capuchin带来的额外开销相较于计算图模式下稍大,这是因为在命令式模式下一个操作只能在上一个操作完成后才能开始,因此记录张量访问中申请锁和释放锁的操作会使得计算停滞,但整体开销在2%左右,仍是可接受的。Capuchin较于Tensorflow原版将最大的batch size提升了171%。而在性能上,Capuchin随着batch size变大性能在逐步提升,这是由于对于DenseNet这个神经网络它的计算量并不足以使得P100的计算资源饱和,因此当Capuchin使得它能达到的batchsize往上增长时,P100GPU仍能容纳更多的计算量,所需的计算时间并不是线性上增,所以最后的性能反而会提升。
实施例4
本实施例是对前述实施例的进一步改进,重复的内容不再赘述。
优选的,本发明还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,所述计算机程序被执行时能够实现如前述实施例中所述的技术方案,其实现原理类似,此处不再赘述。计算机可读存储介质可以是任何能够存储数据且可以被计算装置读取的有形介质。
优选的,本发明还提供一种电子设备,至少包括:一个或多个处理器以及存储器。存储器用于存储可执行指令。一个或多个处理器被配置为经由可执行指令来实现如前述实施例中所述的技术方案,其实现原理类似,此处不再赘述。
需要注意的是,上述具体实施例是示例性的,本领域技术人员可以在本发明公开内容的启发下想出各种解决方案,而这些解决方案也都属于本发明的公开范围并落入本发明的保护范围之内。本领域技术人员应该明白,本发明说明书及其附图均为说明性而并非构成对权利要求的限制。本发明的保护范围由权利要求及其等同物限定。
Claims (10)
1.一种基于张量的深度学习GPU内存管理优化方法,至少包括如下步骤:
执行至少一个计算操作,其中,所述计算操作以张量为输入并产生张量作为输出;
在一个计算操作被执行时,对张量的访问信息进行跟踪,并基于所述访问信息制定内存管理优化决策,
其特征在于,
在训练的第一次迭代中被动地在CPU内存和GPU内存之间进行内存交换以获得一次完整迭代的张量的访问信息;
所述获得一次完整迭代的张量的访问信息至少包括如下步骤:
(1)构建张量访问信息表,使得每当张量被访问时,张量的访问信息能够存储至所述张量访问信息表,
(2)当产生内存溢出时,从张量访问信息表中最开始寻找一个或多个张量,被动交换出GPU内存直至此次内存溢出消失,并记录此次交换对应的CPU内存地址,
(3)当产生张量访问错误时,确定其对应的CPU内存地址,并将其被动地交换进GPU内存,
(4)当一次迭代结束时,将张量的访问信息的时间戳减去其前面所有被动内存交换的时间以得到一次完整迭代的张量的访问信息;
根据获取的关于完整迭代的张量的访问信息,制定内存管理优化决策;
在后续迭代中,根据运行时的反馈对制定的内存管理优选决策进行动态调整。
2.根据权利要求1所述的深度学习GPU内存管理优化方法,其特征在于,获得一次完整迭代的张量的访问信息至少包括如下步骤:
构建张量访问信息表,使得每当张量被访问时,张量的访问信息能够存储至所述张量访问信息表;
当产生内存溢出时,基于张量被访问时的时间戳的先后顺序,依次从所述张量访问信息表中筛选出一个或多个张量,使得所述一个或多个张量在被动交换出GPU内存而进入CPU内存时,所述内存溢出能够被消除,其中,所述一个或多个张量在被动交换后所对应的CPU内存地址能够形成记录;
当产生张量访问错误时,基于所述记录确定该张量对应的CPU内存地址,并将该张量被动地交换进GPU内存;
当一次迭代结束时,将张量的访问信息的时间戳减去其前面所有被动内存交换的时间以得到一次完整迭代的张量的访问信息。
3.根据权利要求2所述的深度学习GPU内存管理优化方法,其特征在于,制定内存管理优化决策至少包括如下步骤:
根据确定的张量的访问信息,获得用于内存优化的若干个候选张量;
获取候选张量的空闲时间,为空闲时间最大的候选张量选择内存换入的触发张量访问,并分别计算出内存交换操作所需的第一开销和重计算操作所需的第二开销,其中,在第一开销小于第二开销的情况下,为该候选张量配置内存交换操作,或者在第一开销大于第二开销的情况下,为该候选张量配置重计算操作;
根据选择的空闲时间最大的候选张量更新剩余候选张量的空闲时间;
重复上述步骤,直至选择出来的候选张量的大小满足内存减小的需求。
4.根据权利要求3所述的深度学习GPU内存管理优化方法,其特征在于,对内存管理优化决策进行动态调整至少包括如下步骤:
在张量被访问时,检查其状态,其中,在该张量处于正在换入GPU内存的状态的情况下,向前调整该张量的内存换入的触发张量访问,并使其在下次迭代时生效。
6.根据权利要求5所述的深度学习GPU内存管理优化方法,其特征在于,执行一个计算操作至少包括如下步骤:
记录输入张量向量中所有张量的访问信息,并将其存储到张量访问信息表内;
在判定张量访问会触发内存交换的情况下,执行内存交换操作,或者在判定张量访问会触发重计算的情况下,执行重计算操作;
将计算操作添加至GPU执行队列;
将输出张量向量中所有张量的访问次数初始化,并将其对应的所有访问信息存储至所述张量访问信息表。
7.一种基于张量的深度学习GPU内存管理优化系统,其特征在于,所述深度学习GPU内存管理优化系统至少包括:
执行器(2),其用于执行至少一个计算操作,其中,所述计算操作以张量为输入并产生张量作为输出;
张量存取跟踪器(4),其用于在一个计算操作被执行时,对张量的访问信息进行跟踪;
决策器(5),其用于基于所述访问信息制定内存管理优化决策,其中,所述决策器(5)被配置为:
在训练的第一次迭代中被动地在CPU内存和GPU内存之间进行内存交换以获得一次完整迭代的张量的访问信息;
所述获得一次完整迭代的张量的访问信息至少包括如下步骤:
(1)构建张量访问信息表,使得每当张量被访问时,张量的访问信息能够存储至所述张量访问信息表,
(2)当产生内存溢出时,从张量访问信息表中最开始寻找一个或多个张量,被动交换出GPU内存直至此次内存溢出消失,并记录此次交换对应的CPU内存地址,
(3)当产生张量访问错误时,确定其对应的CPU内存地址,并将其被动地交换进GPU内存,
(4)当一次迭代结束时,将张量的访问信息的时间戳减去其前面所有被动内存交换的时间以得到一次完整迭代的张量的访问信息;
根据获取的关于完整迭代的张量的访问信息,制定内存管理优化决策;
在后续迭代中,根据运行时的反馈对制定的内存管理优选决策进行动态调整。
8.根据权利要求7所述深度学习GPU内存管理优化系统,其特征在于,所述深度学习GPU内存管理优化系统还包括:
内存分配器(3),其能够在张量访问被判定为会触发内存交换的情况下,执行内存交换操作,其中,所述执行器(2)还配置为:
在判定张量访问会触发重计算的情况下,执行重计算操作;
将计算操作添加至GPU执行队列。
9.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,所述计算机程序被执行时能够实现权利要求1-6中任一项所述的深度学习GPU内存管理优化方法。
10.一种电子设备,其特征在于,所述电子设备至少包括:
一个或多个处理器;
存储器,其用于存储可执行指令;
所述一个或多个处理器被配置为经由所述可执行指令来实现权利要求1-6中任一项所述的深度学习GPU内存管理优化方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911105147.6A CN111078395B (zh) | 2019-11-12 | 2019-11-12 | 一种基于张量的深度学习gpu内存管理优化方法及系统 |
US16/946,690 US11625320B2 (en) | 2019-11-12 | 2020-07-01 | Tensor-based optimization method for memory management of a deep-learning GPU and system thereof |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911105147.6A CN111078395B (zh) | 2019-11-12 | 2019-11-12 | 一种基于张量的深度学习gpu内存管理优化方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111078395A CN111078395A (zh) | 2020-04-28 |
CN111078395B true CN111078395B (zh) | 2023-06-20 |
Family
ID=70310937
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911105147.6A Active CN111078395B (zh) | 2019-11-12 | 2019-11-12 | 一种基于张量的深度学习gpu内存管理优化方法及系统 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11625320B2 (zh) |
CN (1) | CN111078395B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020132833A1 (en) * | 2018-12-24 | 2020-07-02 | Intel Corporation | Methods and apparatus to process machine learning model in multi-process web browser environment |
US11521062B2 (en) * | 2019-12-05 | 2022-12-06 | International Business Machines Corporation | Neural network training using a data flow graph and dynamic memory management |
US11663056B2 (en) * | 2019-12-20 | 2023-05-30 | Intel Corporation | Unified programming interface for regrained tile execution |
CN111488987B (zh) * | 2020-04-16 | 2022-12-06 | 苏州浪潮智能科技有限公司 | 一种深度学习大模型训练的方法、系统、设备及介质 |
US11915056B2 (en) | 2020-10-15 | 2024-02-27 | Nec Corporation | Combination of multiple data processing and machine learning frameworks for a target hardware |
CN114443263A (zh) * | 2020-11-03 | 2022-05-06 | 阿里巴巴集团控股有限公司 | 显存管理方法、装置、设备及系统 |
CN112306697B (zh) * | 2020-12-31 | 2021-04-27 | 之江实验室 | 基于Tensor访问的深度学习内存管理方法及系统 |
CN112926736B (zh) * | 2021-02-26 | 2023-12-08 | 国网智能电网研究院有限公司 | 一种深度学习技术工具链系统 |
CN113703768A (zh) * | 2021-07-13 | 2021-11-26 | 清华大学 | 张量程序优化方法及装置 |
CN113485837B (zh) * | 2021-07-21 | 2024-05-07 | 瀚博半导体(上海)有限公司 | 一种基于并行分支和张量切分的张量处理方法和处理系统 |
CN113806078A (zh) * | 2021-08-27 | 2021-12-17 | 南京中科逆熵科技有限公司 | 一种用于边缘ai推理框架的内存调度方法 |
CN115080240B (zh) * | 2022-06-29 | 2023-10-10 | 美的集团(上海)有限公司 | 语音处理模型的部署方法、电子设备及存储介质 |
CN114860461B (zh) * | 2022-07-07 | 2022-10-28 | 中国科学技术大学 | Gpu设备间高效内存置换的方法、系统、设备及存储介质 |
CN115373839A (zh) * | 2022-08-12 | 2022-11-22 | 北京觉非科技有限公司 | 一种推理过程的资源配置方法及系统 |
CN115269204B (zh) * | 2022-09-27 | 2022-12-30 | 之江实验室 | 一种用于神经网络编译的内存优化方法及装置 |
CN117892769B (zh) * | 2024-03-15 | 2024-06-11 | 之江实验室 | 神经网络训练方法、显存调度方法、系统、设备和产品 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9256915B2 (en) * | 2012-01-27 | 2016-02-09 | Qualcomm Incorporated | Graphics processing unit buffer management |
CN109919310A (zh) * | 2019-01-15 | 2019-06-21 | 中国科学院信息工程研究所 | 一种面向深度学习训练任务的gpu内存优化方法及系统 |
CN109976903A (zh) * | 2019-02-22 | 2019-07-05 | 华中科技大学 | 一种基于层宽内存分配的深度学习异构计算方法和系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7154500B2 (en) * | 2004-04-20 | 2006-12-26 | The Chinese University Of Hong Kong | Block-based fragment filtration with feasible multi-GPU acceleration for real-time volume rendering on conventional personal computer |
-
2019
- 2019-11-12 CN CN201911105147.6A patent/CN111078395B/zh active Active
-
2020
- 2020-07-01 US US16/946,690 patent/US11625320B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9256915B2 (en) * | 2012-01-27 | 2016-02-09 | Qualcomm Incorporated | Graphics processing unit buffer management |
CN109919310A (zh) * | 2019-01-15 | 2019-06-21 | 中国科学院信息工程研究所 | 一种面向深度学习训练任务的gpu内存优化方法及系统 |
CN109976903A (zh) * | 2019-02-22 | 2019-07-05 | 华中科技大学 | 一种基于层宽内存分配的深度学习异构计算方法和系统 |
Non-Patent Citations (2)
Title |
---|
Linnan Wang.SuperNeurons: Dynamic GPU Memory Management for Training Deep Neural Networks.《ACM》.2018,第41-53页. * |
张雄,陆路,石宣化.分布式数据处理系统内存对象管理问题分析.《中兴通讯技术》.2016,全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111078395A (zh) | 2020-04-28 |
US20210142178A1 (en) | 2021-05-13 |
US11625320B2 (en) | 2023-04-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111078395B (zh) | 一种基于张量的深度学习gpu内存管理优化方法及系统 | |
US10990561B2 (en) | Parameter server and method for sharing distributed deep learning parameter using the same | |
KR102572757B1 (ko) | 집약성을 개선하기 위한 머신 학습 모델들의 수정 | |
CN109919310B (zh) | 一种面向深度学习训练任务的gpu内存优化方法及系统 | |
CN111667051A (zh) | 适用边缘设备的神经网络加速器及神经网络加速计算方法 | |
US20210191765A1 (en) | Method for static scheduling of artificial neural networks for a processor | |
Laanait et al. | Exascale deep learning for scientific inverse problems | |
WO2020028183A1 (en) | A storage-based graph for enabling computation graph optimization | |
Moreira et al. | Graph partitioning with acyclicity constraints | |
US11599798B2 (en) | Methods of operating a graphics processing unit (GPU) to train a deep neural network using a GPU local memory and related articles of manufacture | |
CN116107754A (zh) | 一种面向深度神经网络的内存管理方法及系统 | |
CN112015765B (zh) | 基于缓存价值的Spark缓存淘汰方法及系统 | |
JP7246447B2 (ja) | モデルトレーニング方法、装置、電子デバイス、記憶媒体、開発システムおよびプログラム | |
CN113313247B (zh) | 基于数据流架构的稀疏神经网络的运算方法 | |
Le et al. | Automatic gpu memory management for large neural models in tensorflow | |
WO2020008392A2 (en) | Predicting execution time of memory bandwidth intensive batch jobs | |
CN111523642A (zh) | 用于卷积运算的数据重用方法、运算方法及装置、芯片 | |
CN111538681B (zh) | Spark平台下基于最大化缓存增益的缓存替换方法 | |
CN113452546A (zh) | 深度学习训练通信的动态服务质量管理 | |
Cui et al. | Scalable deep learning on distributed GPUs with a GPU-specialized parameter server | |
Kuchumov et al. | Staccato: shared-memory work-stealing task scheduler with cache-aware memory management | |
Moreira et al. | Evolutionary acyclic graph partitioning | |
JP6270765B2 (ja) | 並列シミュレーション装置 | |
CN113177877B (zh) | 一种面向slam后端优化的舒尔消除加速器 | |
CN116974729B (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 |