🥰总结

⁉️问题
- FP32/FP16混合精度训练中模型状态部分到底是16$\phi$还是20$\phi$?
- 混合精度为啥能节省显存(需要FP32权重备份)? 节省的是哪一部分?
- 为什么使用混合精度, 不直接使用低精度训练(如FP16, FP8)?
- FP16混合精度训练会出现哪些问题? 以及该如何解决?
- FP8混合精度训练会出现哪些问题? 如何解决?
🧐内容
大模型时代之前, 训练神经网络模型默认使用的数据类型为单精度FP32。近年来,为了加快训练、减少显存占用,业界提出了精度无损的混合精度训练方法。大模型时代前期, 通常是FP32/FP16的混合精度训练, 到2025年, DeepSeek率先使用了FP32/FP8的混合精度训练进一步优化训练成本
FP32/FP16混合精度训练
浮点数值类型
为什么使用混合精度训练?
使用FP16训练神经网络,相对比使用FP32带来的优点有:
- 减少内存占用:FP16的位宽是FP32的一半,因此显存占用也会减小,节省下来的显存可以放更大的网络模型或者使用更多的数据进行训练。
- 加快通讯效率:针对分布式训练,特别是在大模型训练的过程中,通讯的开销制约了网络模型训练的整体性能,数据位宽减小导致数据量减小意味着可以降低通信耗时。
- 张量核心的普及:硬件的发展同样也推动着模型计算的加速,随着Nvidia张量核心(Tensor Core)的普及,低精度数值算力相对更高, 计算效率也更高
带来的问题
数值溢出(overflow/underflow)