当前位置: 首页 > 专利查询>浙江大学专利>正文

一种降低深度神经网络训练过程中GPU内存占用的方法技术

技术编号:33132448 阅读:23 留言:0更新日期:2022-04-17 00:52
本发明专利技术公开了一种降低深度神经网络训练过程中GPU内存占用的方法。该方法适用于基于CPU

【技术实现步骤摘要】
一种降低深度神经网络训练过程中GPU内存占用的方法


[0001]本专利技术涉及深度学习和计算机科学等领域。尤其涉及一种降低深度神经网络训练过程中GPU内存占用的方法。

技术介绍

[0002]深度学习在学术界和工业界都被广泛研究和应用,这主要得益于硬件计算能力的增长,尤其是GPU,提供了强大的并行浮点数矩阵运算能力。但即使是现在,GPU内存不足(out of memory,OOM)仍然是多数研究者在训练神经网络时遭受的主要困扰之一。究其原因,主要是因为神经网络模型的参数量十分庞大,且仍在飞快增长当中。不论是什么方面的课题,让网络训练得以正常运行,都是绕不开的一步。由此不难看出,在内存资源固定的情况下,在软件层面做出改进,提升内存使用效率,降低神经网络训练过程中的内存使用量,具有相当意义上的研究价值。
[0003]在以往的方法中,降低内存使用的方法主要有:
[0004]1、模型量化:使用更低精度的数据类型来表示模型参数;
[0005]2、内存共享:生命周期不重叠的变量可以共享同一块内存;
[0006]3、动态内存池:维护一个用户态的内存池,减少CUDA层面的内存申请和释放;
[0007]4、以计算换内存:将计算过程中一些可复用的临时对象在不使用时释放,以换取更多内存的策略,被释放掉的变量将会在下一轮迭代中被重新计算、加载;
[0008]5、内存交换:将GPU中暂时用不到的变量交换到CPU中,在需要的时候再重新交换回来。
[0009]上述方法在执行时可能会降低模型精度,或者根据一些先验知识来产生固定的策略,同时要求开发人员具备深度学习领域的专业知识,使用门槛较高。

技术实现思路

[0010]本专利技术的目的在于针对现有技术的不足,提供一种降低深度神经网络训练过程中GPU内存占用的方法。具体来说,涉及一种当用户不具备很多深度学习理论知识时,仅使用一个环境变量即可实现多个不同等级GPU内存优化的方法。
[0011]本专利技术的目的是通过以下技术方案来显现的:降低深度神经网络训练过程中GPU内存占用,包含如下步骤:一种降低深度神经网络训练过程中GPU内存占用的方法,包含如下步骤:
[0012]根据checkpoint集合计算得到实际的内存申请方案;
[0013]具体包括以下子步骤:
[0014](a)根据静态计算图中每个节点输出的数量,初始化相应Tensor的引用依赖:
[0015](b)以拓扑顺序考察每个Tensor;
[0016](c)检查当前空闲内存块列表是否非空,若不存在空闲内存块,则为当前Tensor申请新的内存块;若存在空闲内存块,检查其大小和当前Tensor的大小之比是否落在合理区
间内;若存在空闲内存块且其大小和当前Tensor的大小之比落在合理区间,则将该空闲内存块分配给当前Tensor以避免新的内存申请,否则则为该Tensor申请新的内存空间;
[0017](d)对当前Tensor的所有输入,减少其引用计数,表示当前Tensor已完成计算,不再依赖输入Tensor;若输入Tensor列表中存在引用计数减少到0的对象,则释放该Tensor的内存,对应的内存块加入到空闲内存块列表中;
[0018](e)以重复步骤(c)至(d),直至完成对所有Tensor的考察,输出最终的内存申请方案。
[0019]进一步地,所述步骤(c)中的合理区间为可搜索的值,取1,2,4,8,16。
[0020]进一步地,所述checkpoint集合为空集或由以下步骤得到;
[0021](1)初次训练时启动试运行,收集设备环境信息与神经网络逐层运行情况;
[0022](2)checkpoint候选点选择:根据步骤(1)采集的信息,选择合适的节点(层)作为重计算checkpoint的候选点;
[0023](3)在步骤(2)给出的候选点中选择合适的若干节点作为checkpoints集合。
[0024]进一步地,所述步骤(1)中初次训练时启动试运行时,收集计算图中每个节点的算子类型、内存占用量、计算时长、辅助空间大小,以及CPU和GPU之间拷贝操作的执行时长和吞吐量。
[0025]进一步地,所述步骤(2)中评估一个节点是否适合作为重计算checkpoint时,考虑其存活时长、计算耗时、特征图大小;评估一个节点是否适合被交换到CPU时,考虑依赖该节点的两次运算之间是否有足够长的时间间隔,以覆盖CPU

GPU之间的拷贝开销。
[0026]进一步地,所述步骤(3)中选择checkpoints集合具体包括以下子步骤:
[0027](3.1)设初始化阈值为0,启动n轮迭代;
[0028](3.2)每轮迭代中,以拓扑顺序考察神经网络中的每个Tensor;将神经网络的输入作为第一个checkpoint,同时也是第一个Block;同时神经网络的参数变量不加入Block;
[0029](3.3)检查当前张量Tensor是否为候选点,如果不是则直接加入当前Block;如果当前Tensor是候选点,则检查当前Block是否超过阈值:如果没超过阈值,则将当前Tensor加入当前Block,否则创建新Block并将当前Tensor标记为checkpoint;
[0030](3.4)重复步骤(3.3),直至遍历所有Tensor,得到当前的checkpoint集合,以此更新阈值,进行内存申请,得到实际内存占用量;
[0031](3.5)以步骤(3.4)更新的阈值重复步骤(3.2)至(3.4),直至完成预定的迭代次数n的搜索,输出使得实际内存占用量最小的checkpoint方案。
[0032]进一步地,所述步骤(3.4)中更新阈值具体为:
[0033]对于每个T
i
时刻,其内存使用量MemAlloc
Ti
都维持在一个相似的水平,故阈值Threshold更新的公式如下:
[0034][0035]进一步地,还包括根据实际运行时GPU运算库所占用的额外空间,对Cudnn辅助空间进行限制。
[0036]进一步地,所述对Cudnn辅助空间进行限制的过程具体为:
[0037]根据实际运行时GPU运算库所占用的额外空间,利用cudnnGetConvolutionForwardAlgorithm_v7函数和每个卷积层输出特征图的大小对Cudnn辅助空间进行限制;所述额外空间限制为输出特征图大小的20倍。
[0038]进一步地,所述额外空间限制优选为输出特征图大小的0.05倍。
[0039]本专利技术的有益效果是:本专利技术提出的方法依赖运行时的数据进行自动分析,而不依赖先验知识,因此有更好的泛用性和健壮性;本专利技术提供了细粒度的启发式内存申请搜索方案,比传统的遗传算法或模拟退火方法更高效;本专利技术提供了一个多级别的内存优化方法,实现了简单有效的GPU内存节省方案,可以结合到主流的深度学习框架中,本文档来自技高网
...

【技术保护点】

【技术特征摘要】
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时,考虑依赖该节点的两...

【专利技术属性】
技术研发人员:欧岳枫杜歆
申请(专利权)人:浙江大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1