Skip to content

验证 checkpoint 保存与恢复

不要等到 Spot 资源回收、节点异常或长训失败后才第一次验证恢复。提交长期训练前,主动做一次短流程中断和恢复,确认训练能从最近 checkpoint 继续。

跑出第一份 checkpoint

先用小数据或少量 step 运行训练脚本,并让脚本快速保存 checkpoint:

language-bash
export OUTPUT_DIR=/mnt/public/outputs/smoke-restore
export CHECKPOINT_DIR=${OUTPUT_DIR}/checkpoints

python train.py \
  --output_dir "$OUTPUT_DIR" \
  --save_steps 10 \
  --max_steps 20

运行结束后检查 checkpoint 文件存在,并确认日志中记录了保存路径。

从 checkpoint 恢复一次

再次运行同一启动脚本,让训练代码自动加载最近 checkpoint:

language-bash
python train.py \
  --output_dir "$OUTPUT_DIR" \
  --resume_from_checkpoint latest \
  --max_steps 30

恢复成功时,日志中应能看到类似信息:

language-text
Loading checkpoint from /mnt/public/outputs/smoke-restore/checkpoints/step-20
Resumed training from global_step=20

如果第二次运行从 step 0 开始,说明恢复逻辑没有生效。

模拟一次中断

在开发机或小规格任务中启动训练,确认写出 checkpoint 后手动停止进程,再重新执行启动脚本。

观察三件事:

  • 新进程是否加载最近 checkpoint。
  • global step、epoch 或已处理样本数是否继续增长。
  • loss、learning rate 和 TensorBoard 曲线是否接续,而不是重新开始。

检查 DDP 恢复一致性

DDP 任务中,确认所有进程都能看到同一份 checkpoint,并且只有预期 rank 执行保存。恢复后如果出现 rank 间 step 不一致、通信卡住或某个 Worker 找不到文件,通常是保存路径、barrier 或 rank 判断有问题。

把恢复验证写进提交流程

长期训练和开启自动重启的任务,都应在正式提交前完成一次恢复验证。验证通过后,再继续配置训练任务容错

Spot 训练也应在正式提交前完成一次恢复验证。验证通过后,再继续使用 Spot 资源提交训练任务