当前位置: 华文星空 > 知识

深度学习训练模型时,GPU显存不够怎么办?

2021-05-28知识

感觉这个问题是年经贴(´-ω-`)

题主提到transformer,那我也针对transformer给点小显存设定下的训练trick吧,好久没去魔改其他模型的结构了qaq

ps:对视觉Transformer了解不深,本文仅从NLP领域的经典Transformer入手来分享一些tricks

从节省(训练)显存方法的有效性/性价比上排个序的话:

1. 砍输入的max len

2. 砍hidden size

3. 砍num layers

4. recompute

5. sharding

6. 小batch size+梯度累积

如果要考虑从预训练模型热启的话,可以去掉2,其他排序不变

为啥最推荐前俩呢,因为不用写代码哇...改改参数,训练显存占用平方级降低,注意是平方级!因此砍一半max seq len和砍一半hidden size比砍一半层数来的有效很多。

只不过砍一半hidden size就不好load预训练模型了,所以优先砍max len吧……

如果非要纠结模型能处理的最大输入长度,可以前90%的训练steps砍输入长度,后10%砍bs艰难finetune下position embedding。这也是预训练常用trick(虽然亲测也会损失一些模型的长文本处理performance)

4和5就是训练大型模型的标配技术了,主流深度学习框架基本都内置了API,调用还是相对方便的,而且不会损失太多训练速度

6就是兜底的办法了,需要写一些代码外加训练慢....

当然了,以上trick可以叠加混合使用,拿好不谢(^-^)

此外,还有一些不方便公开的内部黑科技就不写出来啦,感兴趣的小伙伴欢迎私信发我简历,组内还有实习head count噢!

坐标:北京,百度科技园

方向:NLP、搜索