混合精度AMP
优点
1.显存占用少
2.训练更快
缺点
1.数据溢出 -> 在训练后期激活函数的梯度会非常小,在梯度乘以学习率后,值会更加小。可能会导致下溢出
2.舍入误差 -> FP16 最大范围是 [-65504 - 66504],虽然最小精度为 2-24,该精度不是在范围内各个区间都支持,例 在[2-3,2-2]区间内,最小精度为2-13,此时2-3+2-14=2-3就会出现舍入错误的情况发生
解决办法
1.对Loss进行放缩s倍,放缩过后的梯度,就会平移到 FP16有效的展示范围内。这样就可以一直使用 FP16进行存储了,并且只有在进行参数更新时才会转换为FP32,同时缩放s倍,AMP默认使用动态损失放大,为了充分利用FP16的范围,缓解舍入误差,尽量使用最高的放大倍数224,如果产生了上溢出(Overflow),则跳过参数更新,缩小放大倍数使其不溢出,在一定步数后(比如2000步)会再尝试使用大的scale来充分利用FP16的范围
2.前向、后向传播时使用FP16、参数更新时使用FP32。虽然会用FP32复制一份权重,不过只要batchsize不是非常小,显存占用还是能降低不少
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下