Zubnet AI学习Wiki › 混合精度训练
训练

混合精度训练

别名:FP16、BF16、半精度
使用较低精度的数值格式(16位而非32位)进行大部分计算来训练神经网络,同时保持关键操作在全精度下运行。这将GPU的有效内存容量和计算速度提高一倍,对模型质量的影响很小。BF16(bfloat16)是LLM训练的标准;FP16用于推理。

为什么重要

混合精度是我们能训练如此大模型的原因。一个70B参数模型在FP32下仅权重就需要280 GB——在任何单个GPU上都不可能。在BF16下,它只需要140 GB,可以分布在几个GPU上。混合精度实际上免费将AI行业的计算能力翻了一番,仅仅是通过使用更智能的数值格式。

深度解析

核心洞察:大多数神经网络计算不需要32位精度。权重、激活值和梯度可以用16位表示而不会产生有意义的质量损失。但某些操作(损失计算、权重更新)需要更高的精度以避免数值不稳定。混合精度在FP32中保留一份主权重副本用于更新,同时使用FP16/BF16进行前向和反向传播。

BF16 vs. FP16

FP16(IEEE半精度)有5个指数位和10个尾数位。BF16(Brain Float 16)有8个指数位和7个尾数位。BF16更宽的指数范围意味着它可以表示与FP32相同的值范围(避免溢出/下溢),而FP16较窄的范围需要损失缩放来防止梯度下溢为零。对于训练,BF16更简单且更稳定。对于推理,FP16有时在相同内存成本下提供略好的精度。

FP8及更低精度

最新的GPU(NVIDIA H100、H200)支持FP8(8位浮点)以实现更快的计算。FP8将内存减半并将吞吐量比FP16翻倍,但需要谨慎处理以避免质量下降。当前实践:在BF16下训练,在FP16或FP8下服务,并量化到INT4/INT8用于边缘部署。每降低一级精度都是以微小的质量代价换取显著的速度和内存收益。

相关概念

← 所有术语
← 深度学习 温度 →