深度学习训练降低显存分析

这一篇博客主要是帮助分析显存为什么炸裂的,不单独提具体的技术。技术可以参见另一篇博客

深度学习训练降低显存指南_Zjhao666的博客-CSDN博客

首先,从总体来看,显存的增长情况大致可以分为两类:

  1. 线性型:以epoch或更短的batch为单位,显存整体上呈线性缓慢增长。
  2. 波动型:没有固定的周期,短期内显存急剧增加,然后裂开了。

其次,从显存的分配来看,分配对象一般分为两类:

  1. 模型变量:主要是模型的固定参数(显存固定),以及一些如结构形的增量参数(显存渐增)
  2. 数据变量:包括模型的输入输出,以及模型中间的计算结果。

再次,根据以往的经验,两种显存增长情况和两种显存分配对象的关系是:

  1. 线性型增长,一般是由于模型中的增量参数导致的,因为变量的覆盖机制,会使得数据变量再重新分配新内容时,自动丢弃掉之前的垃圾内容
  2. 波动型增长,一般是由于模型计算时的数据变量导致的,可能是输入输出,也可能是中间计算结果,也同样因为变量的覆盖机制,既然会覆盖,所以只是波动,总体来看围绕均值变化应该不大。

最后,基于经验,对显存炸裂的下药治病方式应该是这样:

  1. 直接买A100显卡,80GB随便爽(不是)
  2. 总体上,先解决波动型增长,再解决线性型增长。原因:(1)波动型增长不解决,显存必然炸裂;(2)波动型增长波动太大,显存变化的大尺度,会淹没掉线性增长的问题(难以发现)
  3. 对于波动型增长,及时清理无用的数据变量(del+显存清理)
  4. 对于线性型增长
    1. 如果模型中增量参数删掉后不影响效果,就删掉;
    2. 否则,以牺牲精度、效果为代价,降低固定参数的大小
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值