验证 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 资源提交训练任务。