拿下技术面上传简历

你用 torch.cuda.amp(autocast + GradScaler)在单卡上训练一个 Transformer,前几百步正常,之后 loss 突然变成 NaN。你已经确认数据没有脏值、学习率也没动过。请说明:AMP 下为什么会出现这种 NaN,GradScaler 在其中做了什么,以及你想先看哪个现象来判断是前向溢出还是反向梯度溢出。

深度学习基础训练工程校招知识点 1 个

面试官在考什么

是否理解 fp16 的数值范围与 loss scaling 的因果链,能否把 NaN 归因到前向或反向的具体环节,而不是把 AMP 当成一个黑盒开关。

混合精度

回答框架 · 前两步

  1. fp16 的动态范围窄(最大约 65504,最小正规数约 6e-5),反向传播中很多梯度值小于最小正规数会被下溢成 0,所以需要 loss scaling。
  2. GradScaler 在前向把 loss 乘上 scale 再 backward,使所有梯度同步放大;在 optimizer.step() 之前调用 unscale_ 把梯度除回来,保证更新量正确。

还有 3 条答案要点、 3 层追问、 4 个常见坑, 以及针对你简历的追问路径,在定制报告里。

上传简历,生成我的题库先看示例报告

延伸阅读

想看这个方向的整体准备路线? 进入「深度学习基础」方向页

同一能力域的其他题