053、混合精度训练避坑:Loss 变成 NaN、精度不涨的排查与修复一、从一次深夜调试说起凌晨两点,我盯着终端里跳动的 loss 值,心里一阵发凉。YOLOv8 训练到第 15 个 epoch,loss 突然从 2.3 直接跳到 NaN,然后整条曲线像断线的风筝一样飘走了。这不是第一次了。上个月用 YOLOv6 做工业检测项目,混合精度训练跑了两天,精度死活卡在 0.72 上不去,换成 FP32 立马涨到 0.81。当时我以为是模型问题,折腾了一周才发现是 AMP 的锅。混合精度训练(AMP)是个好东西,显存省一半,速度提 30%,但坑也多。今天就把我踩过的几个典型坑和修复方案掰开揉碎讲清楚,希望能帮你少熬几个夜。二、Loss 变成 NaN 的三种典型场景场景一:梯度爆炸,但只发生在 FP16 下这是最常见的。FP16 的动态范围只有 5.96e-8 到 65504,比 FP32 窄得多。一旦某个层的梯度值超过 65504,直接溢出变成 inf,再反向传播几次就变成 NaN。排查方法:在训练脚本里加个梯度裁剪前的 hook,打印梯度的 max 和 min 值。我一般这样写:# 这里踩过坑:别只盯着 loss 看,要盯梯