训练监控、断点与续训
前置知识点
- 框架选型与环境搭建 核心
一句话定义
训练监控回答「现在训练健康吗」,断点续训回答「崩了/停了怎么接着跑」——两者共同保证几小时到几天的训练投入不会白费。
为什么重要
微调训练动辄数小时,无人值守时一个第 200 步的 NaN 若到第 3000 步才被发现,浪费的是一整个晚上;而「训到 80% 断电」没有续训能力就等于从零再来。会看曲线的人能在前 100 步预判这次训练的成败。
前置知识
kp-015 已跑通训练循环;kp-016 的学习率调度与步数概念。
核心概念
- train loss:训练损失曲线,整体健康度的主指标。
- eval loss:留出验证集上的损失,过拟合检测的依据。
- grad norm:梯度范数,数值稳定的哨兵(inf/NaN=崩,长期 0=没在学)。
- 学习率曲线:确认 warmup 与调度按预期执行。
- 定期生成抽查(sanity generation):每 N 步用固定几条样本生成文本,肉眼看行为变化。
- checkpoint:模型 + 优化器状态 + 调度器 + RNG 状态的完整快照,是续训的依据。
原理与机制
健康曲线的形态学:train loss 应在前 10% 步内快速下降后趋缓;eval loss 同步下降,若 train 降而 eval 升即过拟合拐点(早停点);grad norm 初期较大后收敛到稳定量级,偶发尖峰后恢复属正常,持续飙升或归零是故障。健康判据示例:logging_steps=10,每 100 步做一次 eval,每 500 步生成 3 条样本。
断点续训的机制:checkpoint 不只存模型权重,还存优化器动量、学习率调度器进度、随机数状态——少任何一样,续训都变成「另一个训练」。因此 resume_from_checkpoint 必须配合与原任务完全相同的总步数配置(epochs、B_eff),否则调度器会按新配置重排 lr 曲线。
图示
loss
│╲
│ ╲╲
│ ╲╲____ train ↓
│ ╲╲ ╲╲___
│ ╲╲ ╲╲╲ eval ↓ 升 ← 早停点(过拟合拐点)
└──────────────────▶ steps
grad norm: 稳定量级=健康 | inf/NaN=崩 | 长期≈0=没在学直观类比
监控像飞行仪表盘(不看仪表的飞行靠运气),断点像游戏存档(存档必须包含角色状态、地图进度、随机种子,读档后才是「同一局游戏」)。
实例或案例
一晚上 6 小时的 14B QLoRA 训练:设置 save_steps=500、每 100 步 eval。第 3 小时 eval loss 从 1.02 拐头向上——早停信号;训练照常跑完(有 checkpoint 兜底),最终加载的是第 2500 步的 checkpoint 而非最后一步,评测分比最后一步高 4 个点。另一次训练第 1800 步 NaN,用 resume_from_checkpoint 从 1500 步恢复,降 lr 后完成。
操作步骤
args=SFTConfig(
output_dir="out",
logging_steps=10,
eval_strategy="steps", eval_steps=100,
save_steps=500, save_total_limit=3,
load_best_model_at_end=True,
metric_for_best_model="eval_loss",
)
trainer.train(resume_from_checkpoint=True) # 续训配套:TensorBoard tensorboard --logdir out/runs 本地看曲线;训练脚本外套进程监控,NaN 时自动停。
排错清单
- 续训后 lr 曲线异常:改了 epochs 或 batch 配置导致总步数变化,续训必须沿用原配置。
- 断点恢复后结果不可复现:save 间隔内 RNG 状态未随 checkpoint 保存(确认 save_full 相关选项)。
- eval loss 比 train loss 高很多且两者都降:正常(eval 集分布略异);高很多且 train 不降:数据泄漏或验证集错位。
- 磁盘被 checkpoint 塞满:
save_total_limit限制保留数量。 - 无 GPU 时想看曲线:TensorBoard 读取日志目录即可,不需要训练环境。
常见误区
- 只看最终 loss 不看曲线:曲线形态携带「何时收敛、是否过拟合、是否异常」的全部信息。
- checkpoint 只存模型:手工只保存权重的续训会丢优化器状态,等效于用脏动量重新出发。
- 早停看 train loss:早停依据是 eval loss 的拐点,train loss 几乎总在降。
与其他知识点的关系
超参如何影响曲线形态见 kp-016;NaN 的精度病根见 kp-018;eval 集怎么建见 kp-025;曲线异常的系统诊断见 kp-030。
延伸阅读
本节不适用:监控与续训是框架工程实践,参考 HF Trainer 文档的 Trainer/checkpoint 章节。
自测题
- train loss 降、eval loss 升,该做什么?
答:出现过拟合拐点,取 eval loss 最低的 checkpoint 作为产出(load_best_model_at_end),必要时减 epoch 或增数据。
- 完整 checkpoint 里除了模型权重还有什么?
答:优化器状态、学习率调度器进度、RNG 状态、 Trainer 进度——少一样都无法忠实续训。
- 为什么续训必须沿用原任务的总步数配置?
答:调度器按总步数预排 lr 曲线,改配置等于换了一条曲线,续训起点处 lr 会突变。