FP8 训练(FP8 training)指的是在神经网络的前向传播(forward pass)和反向传播(backward pass)中,用 8 位浮点数完成核心的矩阵乘法等计算,从而把显存占用和带宽需求压下来,同时靠一套缩放技巧尽量不让训练稳定性变差。
先看浮点数怎么表示一个数:它由符号位、指数位(exponent)和尾数位(mantissa)组成。指数位管“能表示多大范围”,尾数位管“能表示多细”。8 位实在太少,于是业界常用两种 FP8 格式:E4M3(4 位指数、3 位尾数)和 E5M2(5 位指数、2 位尾数)。打个比方,E4M3 像一张小纸条,小数点后能多写几位,但数字不能太大;E5M2 像一张更长的纸条,能写很大的数,但只能记个大概。前向传播里的激活值通常范围可控,用 E4M3 更合适;反向传播里的梯度可能忽大忽小,用 E5M2 更能兜住范围。
但直接把权重、激活、梯度砍成 8 位,很容易溢出或下溢。所以 FP8 训练必须配缩放(scaling):给一个张量乘上缩放因子,把它“挪”到 FP8 能表示的区间,算完再除回去。这就像用一把刻度很粗的尺子量小零件,先按比例放大再量,量完换算回真实尺寸。缩放可以按张量、按通道或按块来做,更新频率也有讲究。
更重要的是,FP8 训练通常不是“全部用 FP8”。主权重(master weights)、优化器状态(optimizer states)和部分累加往往保留 FP32 或 BF16,只让前向和反向的矩阵乘走 FP8。这种混合精度(mixed precision)策略,既吃到 8 位的显存和算力红利,又给稳定性上了保险。
和相邻概念比:
| 维度 | FP8 训练 | FP16/BF16 混合精度 |
|---|---|---|
| 位宽 | 8 位 | 16 位 |
| 显存/带宽 | 约为一半 | 基准 |
| 动态范围 | 窄,依赖缩放 | 较宽,BF16 接近 FP32 |
| 稳定性处理 | 缩放、E4M3/E5M2 分工、关键部分高精度 | FP16 需 loss scaling,BF16 通常较省心 |
| 典型场景 | 大模型训练加速 | 通用训练 |
它和推理量化(如 INT8/FP8 推理)也不同:推理量化只需一次性校准,不涉及反向传播;FP8 训练要管前向、反向、梯度缩放和权重更新,工程难度高得多。
对从业者来说,FP8 训练意味着同样硬件上能塞下更大的模型或更大的 batch,训练吞吐也可能更高。对普通职场人,训练成本下降会让模型迭代更快、调用更便宜。不过要记住,FP8 训练不是无损魔法,仍可能遇到 loss spike 或梯度溢出,需要监控和调参;具体支持哪些硬件和框架,以官方页面为准。
