最近在用 PyTorch 微调一个 7B 左右的模型,用的是混合精度加 gradient checkpointing。训练大概几百步之后 loss 会突然变成 NaN,但把整个训练从头重启一遍,同样的数据和超参又能正常跑完。试过调小学习率、加 gradient clipping,好像只是把出现 NaN 的步数往后推了一点。看网上说是 fp16 溢出,但也有人讲是 loss scale 的问题。有没有大佬能解释下这到底是哪里出的问题,以及一般怎么系统排查这种偶发的 NaN?