[发明专利]一种降低深度神经网络训练过程中GPU内存占用的方法在审
申请号: | 202210006073.6 | 申请日: | 2022-01-05 |
公开(公告)号: | CN114358267A | 公开(公告)日: | 2022-04-15 |
发明(设计)人: | 欧岳枫;杜歆 | 申请(专利权)人: | 浙江大学 |
主分类号: | G06N3/063 | 分类号: | G06N3/063;G06N3/08 |
代理公司: | 杭州求是专利事务所有限公司 33200 | 代理人: | 邱启旺 |
地址: | 310058 浙江*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 降低 深度 神经网络 训练 过程 gpu 内存 占用 方法 | ||
本发明公开了一种降低深度神经网络训练过程中GPU内存占用的方法。该方法适用于基于CPU‑GPU异构计算平台上的深度神经网络(DNN)框架,提供基础‑通常‑极致三个等级的内存优化选项,通过静态计算图分析实现运行时零开销的内存分配,通过启发式搜索选择适当的算子重计算策略,同时分析并限制Cudnn库卷积算法的额外内存开销。用户仅需通过一个参数的优化等级控制,即可实现神经网络训练过程中的内存占用优化。
技术领域
本发明涉及深度学习和计算机科学等领域。尤其涉及一种降低深度神经网络训练过程中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的考察,输出最终的内存申请方案。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江大学,未经浙江大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210006073.6/2.html,转载请声明来源钻瓜专利网。