跳到正文

训练曲线异常怎么排查?

Loss/梯度范数震荡、上升、过早饱和的原因与应对

原题:在大模型训练过程中,常见的训练曲线(如loss、learning rate、gradient norm等随epoch变化的趋势图)分别反映了哪些训练状态?请解释典型曲线形态(如震荡、上升、过早饱和)背后的可能原因及应对策略。

模型训练 · 美团真题

回答与解析

训练曲线是诊断线索,不是单独的故障判决器。loss反映当前目标在采样数据上的平均误差;learning rate反映优化器给更新设置的时间尺度;gradient norm描述梯度整体大小,但会受到参数规模、损失归一化、混合精度和分布式聚合方式影响。

loss平稳下降通常说明优化在推进,突然尖峰可能来自异常batch、数据长度变化、学习率过大、精度溢出或恢复状态错误。持续上升也可能是数据配比切换或目标定义变化。过早变平则可能是学习率太小、可训练模块不足、数据重复、模型容量受限,或任务已经接近当前配置上限。

gradient norm不要求单调下降。训练中数据难度和学习率都在变化,正常run也会波动。比固定绝对阈值更可靠的是与同模型同配置历史基线比较,检查NaN或Inf、突然放大、长期接近数值下限、不同层的分布,以及参数更新范数相对权重的大小。

gradient clipping可以限制异常大更新,但裁剪上限没有通用值。若大量step持续触发裁剪,可能在掩盖学习率、损失尺度或数据问题;若从不触发,也不代表训练必然健康。LoRA的学习率同样依rank、缩放、batch、模型和数据而定,不能从一个固定起点机械搜索。

learning rate曲线要和warmup、decay及恢复checkpoint一起看。warmup阶段loss波动与主训练阶段含义不同;scheduler意外重置会让曲线和更新同时异常。任何诊断都应把实际optimizer state、loss scaler和梯度累积步数纳入日志。

我会为异常时刻保存样本ID、token长度、loss分量、梯度分层统计和系统状态,再用上一个健康checkpoint重放。最后看独立验证指标与人工样本,确认修复没有只让训练曲线变漂亮。曲线提出原因假设,重放和消融才提供因果证据。

口语版讲法(约4分钟)

  • 解释三类曲线的职责
  • 识别loss异常的多种来源
  • 相对基线分析梯度
  • 把学习率阶段纳入判断
  • 用验证与回放确认原因

训练曲线是诊断线索,不是单独的故障判决器。loss反映当前目标在采样数据上的平均误差;learning rate反映优化器给更新设置的时间尺度;gradient norm描述梯度整体大小,但会受到参数规模、损失归一化、混合精度和分布式聚合方式影响。

loss平稳下降通常说明优化在推进,突然尖峰可能来自异常batch、数据长度变化、学习率过大、精度溢出或恢复状态错误。持续上升也可能是数据配比切换或目标定义变化。过早变平则可能是学习率太小、可训练模块不足、数据重复、模型容量受限,或任务已经接近当前配置上限。

gradient norm不要求单调下降。训练中数据难度和学习率都在变化,正常run也会波动。比固定绝对阈值更可靠的是与同模型同配置历史基线比较,检查NaN或Inf、突然放大、长期接近数值下限、不同层的分布,以及参数更新范数相对权重的大小。

gradient clipping可以限制异常大更新,但裁剪上限没有通用值。若大量step持续触发裁剪,可能在掩盖学习率、损失尺度或数据问题;若从不触发,也不代表训练必然健康。LoRA的学习率同样依rank、缩放、batch、模型和数据而定,不能从一个固定起点机械搜索。

learning rate曲线要和warmup、decay及恢复checkpoint一起看。warmup阶段loss波动与主训练阶段含义不同;scheduler意外重置会让曲线和更新同时异常。任何诊断都应把实际optimizer state、loss scaler和梯度累积步数纳入日志。

我会为异常时刻保存样本ID、token长度、loss分量、梯度分层统计和系统状态,再用上一个健康checkpoint重放。最后看独立验证指标与人工样本,确认修复没有只让训练曲线变漂亮。曲线提出原因假设,重放和消融才提供因果证据。

分布式训练还要确认日志口径。记录的是每个rank局部norm、全局聚合norm,还是梯度累积后的norm,含义并不相同;loss也可能按token或样本平均。没有统一口径,历史曲线不能直接比较。监控定义应随配置保存,并在恢复训练时验证step、scheduler和scaler状态连续。

混合精度下若gradient norm突然异常,还要联查loss scaler是否跳变、是否发生非有限梯度跳步,以及优化器是否真的更新。曲线里只记录裁剪后的norm会隐藏原始异常,最好同时记录裁剪前统计和触发比例,但采集本身也要控制通信与日志成本。 这能避免监控口径反过来误导判断。

关键一句:为什么gradient norm应相对同配置历史run解释,而不是使用通用绝对阈值。

核验来源

  1. PyTorch clip_grad_norm_ documentation
  2. Hugging Face Trainer documentation

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设你在训练一个客服大模型,跑到一半看loss曲线像过山车一样上下乱跳,你第一反应是啥?会怎么调?

  2. 问法 2 · 层层追问

    训练大模型的时候你一般看哪些曲线?……比如loss一直降不下去,或者grad norm突然飙到几百,你一般怎么排查?……能具体说说震荡和过早饱和的区别吗?

  3. 问法 3 · 直球架构

    给我讲讲训练曲线里loss、lr、grad norm每种曲线的正常形态和常见异常,以及对应的可能原因和调参策略。

同模块相关题目