FP16?混合精度推理的策略?哪些层必须保持FP16?
混合精度指模型中部分层或张量用 FP16(或 BF16/FP8),部分保持 FP32 或更高精度,在精度与速度/显存间折中。推理时用 FP16 可减带宽与算力、加速;但某些层(如 softmax、LayerNorm 的方差、敏感输出)若全 FP16 可能数值不稳或掉点,需保留高精度。
常见策略:默认 FP16,敏感处保留 FP32。通常可全 FP16 的:大部分 Linear、Conv、激活;常需保留 FP32 或局部高精度的:softmax 分母与指数(防溢出与精度)、LayerNorm 的 mean/var 计算(方差对精度敏感)、累加项很多时的 reduction(避免 FP16 累加误差)、首尾层(embedding 输出、logits)若敏感也可 FP32。具体可结合 sensitivity 分析:逐层切 FP16 看指标,掉点层保留高精度。
框架级:PyTorch 的 autocast、TensorRT 的 layer precision 设置、ONNX 的 mixed precision 等;或手写时对指定 op 用 FP32 kernel。FP8 可用时,可进一步做 FP8+FP16 混合(如 TE),策略类似:敏感层或敏感 op 用 FP16,其余 FP8。
| 返回模块 | 返回总览 |