训练与优化 / 训练诊断与速查 实践指南实践 3 分钟阅读 查看源文件 ↗

训练问题诊断#

本页内容6 个部分

1. 先保留证据,再改配置#

异常发生时,记录 step、数据批次或可复现标识、有效 token 分母、学习率、loss、裁剪前梯度范数、AMP scale、是否跳步与 checkpoint。对比正常区间的同口径指标;单个 spike 或高范数不足以确定原因。

先在可控输入上复现,再每次只改变一个主要因素。恢复训练时同时恢复模型、optimizer、scheduler、scaler 和数据进度,避免只载入模型权重却换了更新状态。

2. Loss spike、NaN 与 OOM 怎样定位#

现象 先检查 再做什么
单批 loss 突升 异常样本、有效 token 数、标签与截断 固定该批复算,比较样本级 loss 与正常批
loss 与梯度同步失控 学习率变动、初始化、裁剪前范数 小范围降低步幅,检查是否频繁裁剪
前向已出现 NaN/Inf 输入、logits、归一化与自定义算子 定位首个非有限张量,比较较高精度计算
前向正常但反向溢出 scaled/unscaled 梯度、AMP scale 核对 loss scaling 与累积边界,检查跳步
OOM 随长度或 batch 增加 激活、attention、临时缓冲 减小 microbatch 或长度,测量重算的峰值与耗时
初始模型状态已放不下 参数、梯度与 optimizer 状态 检查分片、offload 或参数高效微调

裁剪限制梯度幅度,不能修复非有限值或错误数据。BF16 也不能自动修复前向溢出。回退 checkpoint 前先保存异常证据;是否跳过数据应有明确质量依据,不能系统地排除困难样本而改变目标分布。

3. 用训练与验证对照定位泛化问题#

3.1 训练改善、验证退化#

先核对两边的 loss 定义、预处理、eval 模式和样本分布,再判断是否过拟合。准确率接近 100% 本身不构成过拟合的充分条件。

3.2 针对验证退化做对照#

尝试减少步数、改进数据覆盖、去重或增加合适的正则化;改变容量或 rank 后记录预算。早停阈值应结合验证频率与噪声确定,不能跨任务固定几个 epoch。

3.3 两边都不改善#

可能是容量或预算不足,也可能是损失、标签、学习率或实现错误。先尝试在极小干净训练集上拟合,检查参数是否更新、梯度是否为零、loss 分母是否正确。

3.4 确认实现后再增加预算#

确认训练链可工作后,分别比较训练更久、调整学习率、增加容量的收益;不要一看到 loss 平坦就直接加大学习率。LoRA 特有的插入模块、首步梯度与数据模板见微调诊断。

4. 把调参变成可解释的比较#

固定模型版本、数据切分与评价方式,先确定总 token、有效 batch 和训练步数的关系,再调学习率与调度。每次改变配置,保留验证曲线和失败证据。LoRA 候选参数由实践篇维护,不在这里重复一份表。

监控指标用于继续定位具体层、激活和路由;计算器用于预算核对,输出的经验学习率不能代替对照实验。

5. 数据检查的最小范围#

检查标签与输入是否对齐、训练与验证是否泄漏、重复数据是否改变采样权重、过滤规则是否误删目标领域,以及合成数据中是否含系统性错误。预训练的数据配比与去重策略由模型预训练专题维护;本页只在定位训练异常所需的范围内回顾。

参考资料#

  • PyTorch AMP examples:溢出检查、跳步与梯度处理。
  • PaLM,§4:训练不稳定与恢复的案例;具体策略受原训练配置约束。

相关阅读路线

完成一次训练更新 ↗