深度解读昇腾CANN内存复用技术,降低网络内存占用

随着大模型的兴起,神经网络规模不断扩大,对内存资源的消耗也越来越高,如何降低AI算法的内存占用成为AI计算领域降成本提性能的一个重要手段。当前降低AI算法内存占用的主要技术有内存复用(Memory Reuse)、重算(Recompute)、内存交换(Memory Swap)、控制执行序(Topo优化)等,其中内存复用是应用最广泛的内存优化技术,该技术可在不影响网络执行性能的前提下降低内存占用,结合Topo优化可以进一步降低内存占用,且对执行性能影响也较小。

静态shape的神经网络在基于计算图模式执行时,由于具备计算图的全局视角,可以较完整地记录和管理全局内存及生命周期信息,GE(Graph Engine)图引擎基于业界常规的内存优化技术,借助全图视角对内存复用算法进行了更好的寻优处理,同时进行了Topo排序优化降低网络内存理论最小值,从而更有效地降低网络内存占用。

1 内存复用技术

1.1 常规内存复用技术

如下图所示有一个简单的网络,经过Topo排序后每个节点都有一个唯一的ID,每个节点的输出内存都可以用这个ID来表达生命周期。

1 网络Topo及生命周期示例

其中“生命周期”是指内存从分配到释放的时间段,用拓扑排序序号来表示,在复用处理过程中,生命周期没有重叠的才能复用。

内存复用是指按照生命周期和内存大小,把不冲突的内存重复使用,来降低网络内存占用。内存复用算法主要有Binary block复用和Max block复用两种,两种复用算法原理类似,唯一差别是block的大小规划有差异。这里的“block”是指内存复用时的虚拟内存块,并不是真正的内存。

内存占用的理论最小值计算方式为:按照内存使用顺序,在每个节点生命周期开始加上内存大小,生命周期结束减去内存大小,不考虑内存碎片和空洞等浪费问题,理论计算得到的内存占用最小值。如图2所示,内存占用的理论最小值为4608,但是如果不做内存复用,总内存大小为8704。

图2 原始网络内存需求示例

内存复用处理的主要步骤:

1、获取内存复用block的Range值

Max block算法取所有内存大小的最大值作为Range,此例为[4096],Binary block算法会按规则生成多个Range,此例为[1024,2048,4096]。

2、Reuse处理

按照拓扑排序进行内存分配和复用,Max block复用算法block大小都一样,只要生命周期满足要求就可以复用,Binary block复用算法block大小不同,要生命周期和block大小同时满足要求才可以复用。

3、Resize处理

复用处理时block大小一般都比实际分配的内存大,resize的作用就是根据复用结果把block大小改成合适的大小并做512字节对齐。

下面以Max block算法为例介绍原始内存复用技术的实现原理,Range为[4096],因此所有block大小都为4096。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值