CN114358267A - 一种降低深度神经网络训练过程中gpu内存占用的方法 - Google Patents

一种降低深度神经网络训练过程中gpu内存占用的方法 Download PDF

Info

Publication number
CN114358267A
CN114358267A CN202210006073.6A CN202210006073A CN114358267A CN 114358267 A CN114358267 A CN 114358267A CN 202210006073 A CN202210006073 A CN 202210006073A CN 114358267 A CN114358267 A CN 114358267A
Authority
CN
China
Prior art keywords
memory
tensor
current
checkpoint
neural network
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
CN202210006073.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.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
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 Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CN202210006073.6A priority Critical patent/CN114358267A/zh
Publication of CN114358267A publication Critical patent/CN114358267A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • General Health & Medical Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Retry When Errors Occur (AREA)

Abstract

本发明公开了一种降低深度神经网络训练过程中GPU内存占用的方法。该方法适用于基于CPU‑GPU异构计算平台上的深度神经网络(DNN)框架,提供基础‑通常‑极致三个等级的内存优化选项,通过静态计算图分析实现运行时零开销的内存分配,通过启发式搜索选择适当的算子重计算策略,同时分析并限制Cudnn库卷积算法的额外内存开销。用户仅需通过一个参数的优化等级控制,即可实现神经网络训练过程中的内存占用优化。

Description

一种降低深度神经网络训练过程中GPU内存占用的方法
技术领域
本发明涉及深度学习和计算机科学等领域。尤其涉及一种降低深度神经网络训练过程中GPU内存占用的方法。
背景技术
深度学习在学术界和工业界都被广泛研究和应用,这主要得益于硬件计算能力的增长,尤其是GPU,提供了强大的并行浮点数矩阵运算能力。但即使是现在,GPU内存不足(out of memory,OOM)仍然是多数研究者在训练神经网络时遭受的主要困扰之一。究其原因,主要是因为神经网络模型的参数量十分庞大,且仍在飞快增长当中。不论是什么方面的课题,让网络训练得以正常运行,都是绕不开的一步。由此不难看出,在内存资源固定的情况下,在软件层面做出改进,提升内存使用效率,降低神经网络训练过程中的内存使用量,具有相当意义上的研究价值。
在以往的方法中,降低内存使用的方法主要有:
1、模型量化:使用更低精度的数据类型来表示模型参数;
2、内存共享:生命周期不重叠的变量可以共享同一块内存;
3、动态内存池:维护一个用户态的内存池,减少CUDA层面的内存申请和释放;
4、以计算换内存:将计算过程中一些可复用的临时对象在不使用时释放,以换取更多内存的策略,被释放掉的变量将会在下一轮迭代中被重新计算、加载;
5、内存交换:将GPU中暂时用不到的变量交换到CPU中,在需要的时候再重新交换回来。
上述方法在执行时可能会降低模型精度,或者根据一些先验知识来产生固定的策略,同时要求开发人员具备深度学习领域的专业知识,使用门槛较高。
发明内容
本发明的目的在于针对现有技术的不足,提供一种降低深度神经网络训练过程中GPU内存占用的方法。具体来说,涉及一种当用户不具备很多深度学习理论知识时,仅使用一个环境变量即可实现多个不同等级GPU内存优化的方法。
本发明的目的是通过以下技术方案来显现的:降低深度神经网络训练过程中GPU内存占用,包含如下步骤:一种降低深度神经网络训练过程中GPU内存占用的方法,包含如下步骤:
根据checkpoint集合计算得到实际的内存申请方案;
具体包括以下子步骤:
(a)根据静态计算图中每个节点输出的数量,初始化相应Tensor的引用依赖:
(b)以拓扑顺序考察每个Tensor;
(c)检查当前空闲内存块列表是否非空,若不存在空闲内存块,则为当前Tensor申请新的内存块;若存在空闲内存块,检查其大小和当前Tensor的大小之比是否落在合理区间内;若存在空闲内存块且其大小和当前Tensor的大小之比落在合理区间,则将该空闲内存块分配给当前Tensor以避免新的内存申请,否则则为该Tensor申请新的内存空间;
(d)对当前Tensor的所有输入,减少其引用计数,表示当前Tensor已完成计算,不再依赖输入Tensor;若输入Tensor列表中存在引用计数减少到0的对象,则释放该Tensor的内存,对应的内存块加入到空闲内存块列表中;
(e)以重复步骤(c)至(d),直至完成对所有Tensor的考察,输出最终的内存申请方案。
进一步地,所述步骤(c)中的合理区间为可搜索的值,取1,2,4,8,16。
进一步地,所述checkpoint集合为空集或由以下步骤得到;
(1)初次训练时启动试运行,收集设备环境信息与神经网络逐层运行情况;
(2)checkpoint候选点选择:根据步骤(1)采集的信息,选择合适的节点(层)作为重计算checkpoint的候选点;
(3)在步骤(2)给出的候选点中选择合适的若干节点作为checkpoints集合。
进一步地,所述步骤(1)中初次训练时启动试运行时,收集计算图中每个节点的算子类型、内存占用量、计算时长、辅助空间大小,以及CPU和GPU之间拷贝操作的执行时长和吞吐量。
进一步地,所述步骤(2)中评估一个节点是否适合作为重计算checkpoint时,考虑其存活时长、计算耗时、特征图大小;评估一个节点是否适合被交换到CPU时,考虑依赖该节点的两次运算之间是否有足够长的时间间隔,以覆盖CPU-GPU之间的拷贝开销。
进一步地,所述步骤(3)中选择checkpoints集合具体包括以下子步骤:
(3.1)设初始化阈值为0,启动n轮迭代;
(3.2)每轮迭代中,以拓扑顺序考察神经网络中的每个Tensor;将神经网络的输入作为第一个checkpoint,同时也是第一个Block;同时神经网络的参数变量不加入Block;
(3.3)检查当前张量Tensor是否为候选点,如果不是则直接加入当前Block;如果当前Tensor是候选点,则检查当前Block是否超过阈值:如果没超过阈值,则将当前Tensor加入当前Block,否则创建新Block并将当前Tensor标记为checkpoint;
(3.4)重复步骤(3.3),直至遍历所有Tensor,得到当前的checkpoint集合,以此更新阈值,进行内存申请,得到实际内存占用量;
(3.5)以步骤(3.4)更新的阈值重复步骤(3.2)至(3.4),直至完成预定的迭代次数n的搜索,输出使得实际内存占用量最小的checkpoint方案。
进一步地,所述步骤(3.4)中更新阈值具体为:
对于每个Ti时刻,其内存使用量MemAllocTi都维持在一个相似的水平,故阈值Threshold更新的公式如下:
Figure BDA0003456790380000031
进一步地,还包括根据实际运行时GPU运算库所占用的额外空间,对Cudnn辅助空间进行限制。
进一步地,所述对Cudnn辅助空间进行限制的过程具体为:
根据实际运行时GPU运算库所占用的额外空间,利用cudnnGetConvolutionForwardAlgorithm_v7函数和每个卷积层输出特征图的大小对Cudnn辅助空间进行限制;所述额外空间限制为输出特征图大小的20倍。
进一步地,所述额外空间限制优选为输出特征图大小的0.05倍。
本发明的有益效果是:本发明提出的方法依赖运行时的数据进行自动分析,而不依赖先验知识,因此有更好的泛用性和健壮性;本发明提供了细粒度的启发式内存申请搜索方案,比传统的遗传算法或模拟退火方法更高效;本发明提供了一个多级别的内存优化方法,实现了简单有效的GPU内存节省方案,可以结合到主流的深度学习框架中,提升GPU内存利用率,降低训练成本。
附图说明
图1为本发明产生内存管理方案的流程图;
图2为神经网络重训练Checkpoint示意图;
图3为本发明启发式搜索最佳内存方案的流程图;
图4为本发明内存分配过程示意图;
图5为本发明计算内存申请方案的流程图。
具体实施方式
下面结合附图和具体实施方式对本发明作进一步详细描述,本发明的目的和效果将变得更加明显。
此处对本文中部分术语进行约定:CPU内存,指CPU北桥芯片通过总线连接的高速存储器;GPU内存,指与CPU内存相区分的、专属于GPU的存储器;checkpoint,指重计算策略中被保留在内存中的Tensor,在反向传播时从这些Tensor重新计算出其余Tensor。
本发明提出了一种降低深度神经网络训练过程中GPU内存占用的方法。该方法适用于基于CPU-GPU异构计算平台上的深度神经网络(DNN)框架,通过静态计算图分析实现运行时零开销的内存分配,通过启发式搜索选择适当的算子重计算策略,同时分析并限制Cudnn库卷积算法的额外内存开销,提供基础-通常-极致三个等级的内存优化选项。用户仅需通过一个参数的优化等级控制,即可实现神经网络训练过程中的内存占用优化。图1给出了本发明创造的方法流程图,本发明提出的方法可以很好地在仅利用一个参数进行控制,并且结合运行时数据分析和启发式搜索,完成低占用的GPU内存申请方案的生成。
深度学习是一种特征学习方法,把原始数据通过非线性模型转化为抽象的表示方式,并且这个转换过程不是人工的,而是从数据中学习而来。深度学习的模型通常表示为深度神经网络,这是仿照生物特性而来的一种非线性数学模型。
GPU(Graphics Processing Unit)最初主要用于图形渲染方面的工作,但由于其高带宽、高并行度的特性,且具备更多的寄存器和缓存结构,十分适合进行矩阵运算,近年来也广泛应用于计算密集的深度神经网络计算当中。
使用GPU进行深度神经网络的训练,现在已经有了完善的开发工具,大大降低了研究人员的使用门槛;但由于神经网络大小的快速增长,GPU内存不足的问题也愈发困扰着研究人员。因此本发明旨在提出一种改善GPU内存占用的方法,以缓解当前GPU内存不足的情况。
如图1所示,本发明提出了一种降低深度神经网络训练过程中GPU内存占用的方法,具体为:根据checkpoint集合计算得到实际的内存申请方案。
为更好地说明运行逻辑以及其目的,参考图4所示的内存分配过程示意图,横轴为逻辑时间,纵轴为内存累计使用量。可以看到,Tensor 1,Tensor 2,Tensor 3三个变量之间没有相互依赖,所以各自申请了一块内存;t1时刻,Tensor 1完成计算,依赖其结果的Tensor 4开始进行计算,此时空闲的内存块有Chunk 1和Chunk 2,本发明的算法会将其安排至大小最接近的Chunk 2中,t2时刻的Tensor 5同理。值得注意的是t3时刻,Tensor 6的大小比空闲内存块Chunk 2和Chunk 3都要大,此时本发明的算法会将Chunk 3进行扩容,因为它的大小和Tensor 6更接近。需要强调,这个扩容不是在运行时进行的,而是经过图5算法的规划之后,Chunk 3在一开始就会以Tensor 6的大小为基准进行申请。意即,图5中内存申请方案是对所有Tensor内存分配的一个模拟,产生出最后方案后,才会进行实际的内存申请,以此保证运行时不发生多余的内存申请、释放和扩容等操作。
首先随机选取若干候选点作为checkpoint,其余所有节点都被标记为可丢弃;可丢弃的节点在计算完成后不会被保存在内存中,而是直接丢弃;这些节点在反向传播过程中再次由驻留在内存中的checkpoint重新计算;本发明实施例中将由checkpointi重新计算的部分节点称作Blocki,那么启发式内存申请方案搜索的目标就是:
argmin(max(MemBlocki))for i∈[0,n]
其中,n为checkpoints的数量。即在多个checkpoints选取方案中,找出返回最小内存占用大小的方案。
具体包括以下子步骤:
(a)根据静态计算图中每个节点输出的数量,初始化相应Tensor的引用依赖:一个输出对应1份引用量;维护已申请内存块和空闲内存块两个数据结构,均初始化为空;
(b)以拓扑顺序考察每个Tensor,其中深度学习网络模型的参数Parameter(输入,权值等)不参与内存分配;
(c)检查当前空闲内存块列表是否非空,若不存在空闲内存块,则为当前Tensor申请新的内存块;若存在空闲内存块,检查其大小和当前Tensor的大小之比是否落在合理区间内;若存在空闲内存块且其大小和当前Tensor的大小之比落在合理区间,则将该空闲内存块分配给当前Tensor以避免新的内存申请,否则则为该Tensor申请新的内存空间;
所述合理区间是一个可搜索的值;该值分别取1,2,4,8,16时,各进行一次完整的内存申请方案推理,然后从中选择使得最终申请的内存总量最小的方案。如果当前Tensor比当前空闲内存块大,那么此时就会发生扩容。
(d)对当前Tensor的所有输入,减少它们的引用计数,表示当前Tensor已完成计算,不再依赖输入Tensor。若输入Tensor列表中存在引用计数减少到0的对象,则释放该Tensor的内存,对应的内存块加入到空闲内存块列表中;
(e)以重复步骤(c)至(d),直至完成对所有Tensor的考察,输出最终的内存申请方案。
所述checkpoint集合为空集或由以下步骤得到:
步骤(1):初次训练时启动试运行,收集设备环境信息与神经网络逐层运行情况,为后续算法决策提供必要信息;在试运行过程中,需要收集计算图中每个节点的算子类型、内存占用量、计算时长、辅助空间大小,以及CPU和GPU之间拷贝操作的执行时长和吞吐量。
在本发明实施例中,先利用profile工具(包括NvidiaNsight System,CudaeventAPI等)对目标网络进行一次前向-反向运行,在此过程中收集profile信息,所述profile信息包括张量Tensor对应的算子(Op)类型,生命周期,依赖时长,特征图大小信息,以及CPU-GPU之间数据传输的带宽信息。
所述收集的若干profile信息主要是为了后续三个方面的工作:其一,收集Tensor的运行信息,以决定哪些Tensor可以作为checkpoint的候选点;其二,收集CPU-GPU数据传输的带宽和速率信息,以帮助Tensor在内存交换和计算之间做好重叠(overlap);其三,收集Cudnn不同卷积算法之间占用额外内存空间的信息,为极致优化模式(即对Cudnn辅助空间进行限制)做准备。
步骤(2):通过步骤(1)收集的profile信息,从若干张量Tensor中选取checkpoint的候选点。
所述步骤(2)相当于选取checkpoint的粗筛过程,在评估一个节点是否适合作为重计算checkpoint的候选点时,主要考虑其存活时长、计算耗时、特征图大小;评估一个节点是否适合被交换到CPU时,主要考虑依赖该节点的两次运算之间是否有足够长的时间间隔,以覆盖CPU-GPU之间的拷贝开销。
在本发明实施例中,首先,过滤掉所有输入变量和参数变量,包括weights,bias等,以及生命周期较短的临时变量。其次,选取的Tensor主要考虑三方面因素:第一,考虑该Tensor计算计算耗时tcom与该Tensor特征图大小sfea的比值,该比值越大,说明重新计算的成本越大,越应该被考虑作为checkpoint;第二,考虑该Tensor前后两次依赖之间的时间间隔,通常是该Tensor在前向计算和反向计算时的间隔,该间隔越长,越适合被交换到CPU内存;第三,考虑该Tensor自身的特征图大小sfea,该值越大,说明该Tensor越有可能是整体训练过程中的内存瓶颈,越值得被交换到CPU内存。考虑到只有极致级别的优化才会启用内存交换,所以前文所述三项数据归一化得分的权值之比为10:1:1,以此得到所有Tensor的分数排名,从中选取分数最高的适量Tensor作为checkpoint的候选点。
步骤(3):在步骤(2)给出的候选点中选择合适的若干节点作为checkpoints,基于静态计算图分析,通过启发式内存搜索得到每个节点的内存申请方案和整体内存使用情况为更好定义步骤(3)运行逻辑以及其目的,参考如图2所示的神经网络重训练Checkpoint示意图。在重训练逻辑中,完整的神经网络被分为若干Block,Block中的首层是Checkpoint,其后是可以被丢弃的Tensor。以Block 3为例,Conv层作为Checkpoint,后续的BN层、ReLU层、MaxPool层均可在结束运算后回收内存;在反向传播时,再从Conv层重新计算出后续3层数据以计算梯度。根据定义,对于某个时刻Ti,内存中留驻的Tensor包括当前Block的所有Tensor以及该Block之前所有CheckpointTensor。此时内存占用量为:
Figure BDA0003456790380000061
其中,MemAllocTi是第i个时刻下的内存占用量,MemAllocBlocki是第i个时刻下对应的Block的内存占用量,MemAllocckptj是第j个checkpoint占用的内存大小,其中j的取值范围是从0到i-1,即当前Block前面的所有chekepoints;i是下标编号,n是所有Block的总数,同时也是所有checkpoint的总数。
本发明提出了一种启发式搜索最佳内存方案,如图3所示,所述启发式搜索最佳内存方案的目的,就是找到一个Checkpoint的组合,使得所有时刻中内存留驻Tensor总量的最大值最小(内存占用峰值最小),即:
Figure BDA0003456790380000071
其中,checkpoints是表示一个checkpoint的具体集合,式(2表示这个checkpoint集合应使得对应的内存占用峰值最小化。
在极致级别的优化下,如果启用了内存交换,那么除了当前Block之外的所有checkpoint均被交换到CPU内存中,目标公式变为:
checkpoints=argmincheckpoints(max(MemAllocBlocki)),i∈[1,n] (3)
需要说明,启用内存交换之后,按照上式,只需将所有候选点均设置为checkpoint,即可获得最小的Block大小,即最小峰值内存使用。然而,该式成立的前提是所有非当前Block的checkpoint都能被交换到CPU,并且在适当的时候交换回GPU内存中。这需要保证一个Block的计算时间需要大于邻近checkpoint的交换时间,包括换出和换入的时间,还要加上调度和同步的时间开销。在该约束下,进行启发式搜索最佳内存方案。
所述步骤(3)相当于选取checkpoint的精筛过程,所述寻找最佳checkpoint集合具体包括以下子步骤:
(3.1)初始化阈值为0,启动n轮迭代,n为自定义常数,通常n取5~7即可使得阈值收敛;
(3.2)每轮迭代中,以拓扑顺序考察神经网络中的每个Tensor。神经网络的输入(data层)作为第一个checkpoint,同时也是第一个Block;同时,神经网络的参数变量(weights,bias等)不加入Block;
(3.3)检查当前张量Tensor是否为候选点,如果不是则直接加入当前Block;如果当前Tensor是候选点,则检查当前Block是否超过阈值:如果没超过阈值,则将当前Tensor加入当前Block,否则创建新Block并将当前Tensor标记为checkpoint;
(3.4)重复步骤(3.3),直至所有Tensor考察完毕,得到当前的checkpoint集合,以此更新阈值,进行内存申请,得到实际内存占用量;
所述阈值更新具体为:本发明实施例中对于每个Ti时刻,其内存使用量MemAllocTi都维持在一个相似的水平,故阈值更新的方式为:
Figure BDA0003456790380000081
其中,Threshold是阈值。
(3.5)以步骤(3.4)更新的阈值,重复步骤(3.2)至(3.4),直至完成预定迭代次数n的搜索,输出使得实际内存占用量最小的checkpoint方案。
如图1所示,经过数次迭代,包括其中对理论最佳checkpoint方案和实际最佳内存分配方案的搜索,得出最终的内存分配结果。
进一步地,本发明方法利用cudnnGetConvolutionForwardAlgorithm_v7()函数对Cudnn辅助空间进行限制。
Cudnn是Nvidia推出的,专门为GPU设计的深度神经网络算子加速库,支持诸如卷积、池化、规范化等操作的加速。Cudnn支持7种卷积算法的实现,包括FFT,GEMM,WINOGRAD等,其中的部分算法需要额外的GPU内存作为中间结果的缓存。
根据每个卷积层输出特征图的大小来决定Cudnn卷积算法的额外空间限制:对于基础级别优化,不加限制;对于通常级别的优化,额外空间限制为输出特征图大小的20倍;对于极致级别的优化,额外空间限制为输出特征图大小的0.05倍。对于一张大小为24.5MB的特征图而言,为此进行计算所需的Cudnn辅助空间从0,0.64MB,443MB到2145MB不等。为避免出现GPU内存因Cudnn辅助空间而出现不足的情况,步骤105对Cudnn的辅助空间进行了限制。限制阈值的选择,来源于图1步骤101的试运行信息。
Cudnn提供了cudnnGetConvolutionForwardAlgorithm_v7()函数,该函数可以给出对于指定输入的卷积运算,不同的算法所需要的Cudnn辅助空间大小,本发明以此为依据过滤掉超出限制的算法。
如图1所示,本发明给出了3个不同级别的优化方案。在基础级别的优化中,仅启用了计算内存申请方案所描述的Tensor生命周期分析和内存申请优化,以保证最快的运行速度;在通常和极致级别的优化中,启用了所有优化。其中,极致级别的优化启用了内存交换,以及更严格的Cudnn辅助空间限制,以实现最大限度的内存节省。
进一步地,图3启发式搜索最佳内存方案的搜索方向是公式(2)(3),这是一个理论上的内存占用值。实际的内存规划需要由图5所示的内存申请方案给出。在步骤(3.5)中最终输出的checkpoint方案,为由基础模式,即图5内存申请方案所给出的实际内存申请值最低的方案。
对于所有级别的优化,内存池都会启用变量生命周期及其依赖的分析;对于通常和极致级别的优化,启用节点丢弃优化,对非checkpoint的节点进行回收和重计算;对于极致级别的优化,启用checkpoints自动交换优化,将暂时用不到的checkpoint节点交换到CPU内存中。
以上仅为本发明具体实施方式,不能以此来限定本发明的范围,本技术领域内的一般技术人员根据本创作所作的均等变化,以及本领域内技术人员熟知的改变,都应仍属本发明涵盖的范围。

Claims (10)

1.一种降低深度神经网络训练过程中GPU内存占用的方法,其特征在于,包含如下步骤:根据checkpoint集合计算得到实际的内存申请方案;
具体包括以下子步骤:
(a)根据静态计算图中每个节点输出的数量,初始化相应Tensor的引用依赖:
(b)以拓扑顺序考察每个Tensor;
(c)检查当前空闲内存块列表是否非空,若不存在空闲内存块,则为当前Tensor申请新的内存块;若存在空闲内存块,检查其大小和当前Tensor的大小之比是否落在合理区间内;若存在空闲内存块且其大小和当前Tensor的大小之比落在合理区间,则将该空闲内存块分配给当前Tensor以避免新的内存申请,否则则为该Tensor申请新的内存空间;
(d)对当前Tensor的所有输入,减少其引用计数,表示当前Tensor已完成计算,不再依赖输入Tensor;若输入Tensor列表中存在引用计数减少到0的对象,则释放该Tensor的内存,对应的内存块加入到空闲内存块列表中;
(e)以重复步骤(c)至(d),直至完成对所有Tensor的考察,输出最终的内存申请方案。
2.根据权利要求1所述的方法,其特征在于,所述步骤(c)中的合理区间为可搜索的值,取1,2,4,8,16。
3.根据权利要求1所述的方法,其特征在于,所述checkpoint集合为空集或由以下步骤得到;
(1)初次训练时启动试运行,收集设备环境信息与神经网络逐层运行情况;
(2)checkpoint候选点选择:根据步骤(1)采集的信息,选择合适的节点(层)作为重计算checkpoint的候选点;
(3)在步骤(2)给出的候选点中选择合适的若干节点作为checkpoints集合。
4.根据权利要求3所述的方法,其特征在于,所述步骤(1)中初次训练时启动试运行时,收集计算图中每个节点的算子类型、内存占用量、计算时长、辅助空间大小,以及CPU和GPU之间拷贝操作的执行时长和吞吐量。
5.根据权利要求3所述的方法,其特征在于,所述步骤(2)中评估一个节点是否适合作为重计算checkpoint时,考虑其存活时长、计算耗时、特征图大小;评估一个节点是否适合被交换到CPU时,考虑依赖该节点的两次运算之间是否有足够长的时间间隔,以覆盖CPU-GPU之间的拷贝开销。
6.根据权利要求3所述的方法,其特征在于,所述步骤(3)中选择checkpoints集合具体包括以下子步骤:
(3.1)设初始化阈值为0,启动n轮迭代;
(3.2)每轮迭代中,以拓扑顺序考察神经网络中的每个Tensor;将神经网络的输入作为第一个checkpoint,同时也是第一个Block;同时神经网络的参数变量不加入Block;
(3.3)检查当前张量Tensor是否为候选点,如果不是则直接加入当前Block;如果当前Tensor是候选点,则检查当前Block是否超过阈值:如果没超过阈值,则将当前Tensor加入当前Block,否则创建新Block并将当前Tensor标记为checkpoint;
(3.4)重复步骤(3.3),直至遍历所有Tensor,得到当前的checkpoint集合,以此更新阈值,进行内存申请,得到实际内存占用量;
(3.5)以步骤(3.4)更新的阈值重复步骤(3.2)至(3.4),直至完成预定的迭代次数n的搜索,输出使得实际内存占用量最小的checkpoint方案。
7.根据权利要求6所述的方法,其特征在于,所述步骤(3.4)中更新阈值具体为:
对于每个Ti时刻,其内存使用量MemAllocTi都维持在一个相似的水平,故阈值Threshold更新的公式如下:
Figure FDA0003456790370000021
8.根据权利要求1所述的方法,其特征在于,还包括根据实际运行时GPU运算库所占用的额外空间,对Cudnn辅助空间进行限制。
9.根据权利要求8所述的方法,其特征在于,所述对Cudnn辅助空间进行限制的过程具体为:
根据实际运行时GPU运算库所占用的额外空间,利用cudnnGetConvolutionForwardAlgorithm_v7()函数和每个卷积层输出特征图的大小对Cudnn辅助空间进行限制;所述额外空间限制为输出特征图大小的20倍。
10.根据权利要求9所述的方法,其特征在于,所述额外空间限制优选为输出特征图大小的0.05倍。
CN202210006073.6A 2022-01-05 2022-01-05 一种降低深度神经网络训练过程中gpu内存占用的方法 Pending CN114358267A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210006073.6A CN114358267A (zh) 2022-01-05 2022-01-05 一种降低深度神经网络训练过程中gpu内存占用的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210006073.6A CN114358267A (zh) 2022-01-05 2022-01-05 一种降低深度神经网络训练过程中gpu内存占用的方法

Publications (1)

Publication Number Publication Date
CN114358267A true CN114358267A (zh) 2022-04-15

Family

ID=81106488

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210006073.6A Pending CN114358267A (zh) 2022-01-05 2022-01-05 一种降低深度神经网络训练过程中gpu内存占用的方法

Country Status (1)

Country Link
CN (1) CN114358267A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115269204A (zh) * 2022-09-27 2022-11-01 之江实验室 一种用于神经网络编译的内存优化方法及装置
CN115878332A (zh) * 2023-02-14 2023-03-31 北京燧原智能科技有限公司 深度学习网络中的内存资源分配方法、装置、设备及介质
CN115965070A (zh) * 2022-11-11 2023-04-14 北京百度网讯科技有限公司 计算图处理方法、装置、设备、存储介质以及程序产品
CN117009093A (zh) * 2023-10-07 2023-11-07 之江实验室 降低神经网络推理所需内存占用量的重计算方法和系统
CN117892769A (zh) * 2024-03-15 2024-04-16 之江实验室 神经网络训练方法、显存调度方法、系统、设备和产品

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115269204A (zh) * 2022-09-27 2022-11-01 之江实验室 一种用于神经网络编译的内存优化方法及装置
CN115269204B (zh) * 2022-09-27 2022-12-30 之江实验室 一种用于神经网络编译的内存优化方法及装置
CN115965070A (zh) * 2022-11-11 2023-04-14 北京百度网讯科技有限公司 计算图处理方法、装置、设备、存储介质以及程序产品
CN115965070B (zh) * 2022-11-11 2023-10-20 北京百度网讯科技有限公司 计算图处理方法、装置、设备、存储介质以及程序产品
CN115878332A (zh) * 2023-02-14 2023-03-31 北京燧原智能科技有限公司 深度学习网络中的内存资源分配方法、装置、设备及介质
CN117009093A (zh) * 2023-10-07 2023-11-07 之江实验室 降低神经网络推理所需内存占用量的重计算方法和系统
CN117009093B (zh) * 2023-10-07 2024-03-12 之江实验室 降低神经网络推理所需内存占用量的重计算方法和系统
CN117892769A (zh) * 2024-03-15 2024-04-16 之江实验室 神经网络训练方法、显存调度方法、系统、设备和产品

Similar Documents

Publication Publication Date Title
CN114358267A (zh) 一种降低深度神经网络训练过程中gpu内存占用的方法
CN109960576B (zh) 一种面向cpu-gpu异构的低能耗任务调度策略
CN110321222B (zh) 基于决策树预测的数据并行作业资源分配方法
WO2021143883A1 (zh) 神经网络的自适应搜索方法及装置
CN111274036B (zh) 一种基于速度预测的深度学习任务的调度方法
CN108268638A (zh) 一种基于Spark框架的生成对抗网络分布式实现方法
JPH09171503A (ja) 並列処理方法および並列処理装置
CN113742089B (zh) 异构资源中神经网络计算任务的分配方法、装置和设备
Chen et al. moDNN: Memory optimal DNN training on GPUs
CN112764893B (zh) 数据处理方法和数据处理系统
CN115437795B (zh) 一种异构gpu集群负载感知的显存重计算优化方法及系统
CN105468439A (zh) 在cpu-gpu异构框架下遍历固定半径内邻居的自适应并行算法
CN114638167A (zh) 基于多智能体强化学习的高性能集群资源公平分配方法
CN115016938A (zh) 一种基于强化学习的计算图自动划分方法
CN116107754A (zh) 一种面向深度神经网络的内存管理方法及系统
CN112597076B (zh) 一种面向Spark的基于数据感知的缓存替换方法及系统
CN112434785B (zh) 一种面向超级计算机的分布式并行深度神经网络性能评测方法
CN112256441B (zh) 神经网络推理的内存分配方法及装置
Mansour et al. Allocating data to multicomputer nodes by physical optimization algorithms for loosely synchronous computations
Baheri Mars: Multi-scalable actor-critic reinforcement learning scheduler
CN112765088A (zh) 利用数据标签提高多计算单元平台上数据共享的方法
CN115794405A (zh) 一种基于SSA-XGboost算法的大数据处理框架的动态资源分配方法
CN115345303A (zh) 卷积神经网络权重调优方法、装置、存储介质和电子设备
CN114611719A (zh) 一种新的基于布谷鸟搜索算法的XGBoost训练方法
CN114489966A (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