0%

精度

大模型中的精度划分

1. 传统双精度与单精度(FP64 & FP32)

  • 结构
    • FP32(单精度):1位符号位 + 8位指数位 + 23位尾数位(共32位)
    • FP64(双精度):1位符号位 + 11位指数位 + 52位尾数位(共64位)
  • 特点:数值范围广,精度极高。
  • 用途大模型预训练中的反向传播梯度累积、优化器状态(如Adam)通常必须使用FP32/FP32主权重,以保证数值稳定性,防止梯度下溢。

2. 半精度与脑浮点(FP16 & BF16)

  • 结构
    • FP16:1+5+10(共16位)。指数位少,尾数位中等。
    • BF16(Brain Float 16):1+8+7(共16位)。指数位与FP32相同,尾数位缩减。
  • 特点对比
    • FP16精度高但范围窄,容易溢出(上溢/下溢),训练时需要配合动态损失缩放(Loss Scaling)。
    • BF16范围广但精度稍低,能直接覆盖FP32的数值范围,不易溢出,且硬件(如英伟达Ampere架构及后续、Intel CPU)支持良好。
  • 用途大模型的训练前向传播和激活值微调(LoRA等)推理加速。BF16现已成为大模型训练的主流选择。

3. 新兴的8位浮点数(FP8)

你图片中列出了三种变体,这是目前最前沿的推理和轻量级训练技术:

  • E4M3(4位指数,3位尾数)
    • 精度更高(尾数多1位),动态范围较小。
    • 常用于权重和激活值的前向传播(需要精细数值)。
  • E5M2(5位指数,2位尾数)
    • 动态范围更大(能表示更大的数),但精度较低(尾数少1位),存在特殊值(Inf/NaN)。
    • 常用于梯度的反向传播(需要防止梯度爆炸)。
  • UE8M0(无符号8位,无指数/尾数)
    • 实际上就是整数格式(范围0-255)。
    • 常用于:大模型中的KV Cache(键值缓存)量化,用于在长上下文场景下极大幅度节省显存。

终极总结(核心结论)

精度格式 适用场景 核心地位
FP32 主权重、优化器状态(Adam)、损失缩放 训练的“定海神针”,保证精度
FP16 早期训练前向、推理 因易溢出,正被BF16取代
BF16 现阶段大模型训练(前向+反向)、微调 当前主流黄金标准(平衡了范围和硬件效率)
FP8 最新架构(如H100)的加速训练、极速推理 下一代趋势,大幅降低显存和带宽
UE8M0 KV Cache量化、输入值存储 专门为超长上下文(百万token) 优化,节省显存

欢迎关注我的其它发布渠道