混合精度训练是什么?
传统训练里,神经网络的权重和计算都用 32 位浮点数(FP32),精度高但慢、又占显存。混合精度训练(Mixed Precision Training)的思路是「该精的精、该省事的省事」:大部分计算改用 16 位浮点数(FP16)来跑,速度快、省显存;只有少数对精度敏感的地方,才用 FP32 兜底。为什么 FP16 能提速?
算得快现代 GPU 上,FP16 的矩阵运算比 FP32 快好几倍,专门为半精度优化的算力(比如 Tensor Core)能成倍提升吞吐。
省显存、省带宽
数字占的位数少一半,权重和中间结果体积都变小,能装更大的模型或更大的批量。
为什么不能全用 FP16?
精度会「溢出」或「丢失」FP16 能表示的范围和精度都有限:太大的数会溢出成无穷,太小的梯度会被抹成 0,训练就不稳定甚至不收敛。
所以需要「混合」
把容易出问题的部分——比如梯度更新、某些求和——用 FP32 来做,其余用 FP16,就能既快又稳。
几个关键技巧
损失缩放(Loss Scaling)梯度太小会被 FP16 抹掉,就把损失值先放大若干倍再反传,算完再缩回去,保住小梯度。
主权重用 FP32 保存
权重用 FP32 存、用 FP16 算,更新时回到 FP32,兼顾速度和精度。
它值不值得用?
在今天,混合精度训练几乎成了大模型训练的「默认配置」:速度翻倍、显存减半,精度损失可以忽略。配合梯度检查点等技术,往往能把原本跑不动的模型跑起来。一句话记住:混合精度训练就是「大部分用 FP16 图快,关键处用 FP32 保准」,又快又省还不掉链子。
评论