先这样答
大模型训练不稳定时,我会按预防、监测、恢复三个阶段处理。预防阶段先控制数值和优化过程。混合精度训练使用 loss scaling,避免数值范围带来的问题。训练中加入梯度裁剪,限制梯度异常增大。学习率使用 warmup,避免训练刚开始就出现剧烈波动。同时设置权重衰减,控制权重变化。
架构上,我会优先考虑 Pre-norm。它能帮助训练过程稳定梯度。训练过程中重点观察 loss 尖刺、梯度爆炸和训练发散。如果 loss 突增,就定位对应的 batch,检查并剔除异常 batch。这个过程也能排查脏数据,避免单个坏 batch 继续影响后续训练。
如果训练已经出现明显异常,我会进入恢复阶段。先回滚到异常发生前的 checkpoint,再跳过导致问题的坏段,重新继续训练。这样处理时,我不会只盯着某一个参数,而是同时检查数值控制、学习率、数据 batch 和模型架构。面试中可以先报出这三个阶段,再分别说明具体手段。
面试官会怎么追问
-
「为什么混合精度训练还要做 loss scaling?」 混合精度训练需要额外处理数值范围。我的做法是在混合精度下加入 loss scaling,并结合梯度裁剪观察梯度是否异常。这样可以把数值控制和梯度控制一起考虑。
-
「loss 突增时,你怎么判断是训练参数还是数据问题?」 我会先定位 loss 突增对应的 batch。若异常集中在某个 batch,就检查并剔除这个异常 batch,排查脏数据。若问题仍然存在,再检查学习率、梯度和训练是否已经发散。
-
「已经发散了,为什么不直接从头训练?」 我会先回滚到异常发生前的 checkpoint。然后跳过导致问题的坏段,再继续训练。这样可以保留已经完成的有效训练过程。
回答的坑
-
只罗列梯度裁剪和学习率,却没有按预防、监测、恢复说明处理顺序。
-
看到 loss 尖刺就直接归因于模型或优化器,忽略异常 batch 和脏数据排查。
同系列的题