LLamaFactory 训练断点续训
2025-07-22
深度学习
00

目录

一、断点续训的基本原理
二、配置文件中的关键参数
三、断点续训的操作步骤
1. 正常训练
2. 恢复训练
四、源码实现位置
1. 参数流转
五、注意事项
六、常见问题

在大模型训练过程中,意外中断(如服务器重启、显存溢出等)是常见问题。如何优雅地恢复训练进度,避免从头再来?LLamaFactory 基于 HuggingFace Transformers,天然支持断点续训(resume from checkpoint)。本文以 Qwen2VL 为例,详细介绍其断点续训机制、配置方法及源码实现位置。


一、断点续训的基本原理

LLamaFactory 的训练流程底层调用了 HuggingFace 的 Trainer/Seq2SeqTrainer,其 train() 方法原生支持 resume_from_checkpoint 参数。只要在训练时定期保存 checkpoint,意外中断后即可从最近的 checkpoint 恢复训练,继续未完成的 epoch 和 step。


二、配置文件中的关键参数

examples/train_full/qwen2_5vl_full_sft.yaml 为例:

yaml
展开代码
output_dir: saves/qwen2_5vl-7b/full/sft # checkpoint 保存目录 save_steps: 500 # 每500步保存一次 resume_from_checkpoint: null # 断点续训参数,默认null
  • output_dir:所有 checkpoint 都会保存在这里
  • save_steps:控制保存频率
  • resume_from_checkpoint:断点续训时填写 checkpoint 路径或 True

三、断点续训的操作步骤

1. 正常训练

只需配置好 output_dirsave_steps,训练过程中会自动生成如 checkpoint-500checkpoint-1000 等子目录。

2. 恢复训练

假设训练中断,最新 checkpoint 路径为 saves/qwen2_5vl-7b/full/sft/checkpoint-1500,只需修改配置文件:

yaml
展开代码
resume_from_checkpoint: saves/qwen2_5vl-7b/full/sft/checkpoint-1500

或者直接写

yaml
展开代码
resume_from_checkpoint: true

(此时系统会自动查找 output_dir 下最新的 checkpoint)

然后用和之前一样的命令重新启动训练即可,系统会自动加载模型、优化器、调度器等全部状态,继续未完成的训练。


四、源码实现位置

1. 参数流转

  • 配置文件examples/train_full/qwen2_5vl_full_sft.yaml
  • 参数解析src/llamafactory/hparams/parser.py
    • 约 360-400 行,处理 resume_from_checkpoint 逻辑,自动查找最新 checkpoint
  • 训练主流程src/llamafactory/train/sft/workflow.py
    • 约 95 行:trainer.train(resume_from_checkpoint=training_args.resume_from_checkpoint)
  • Trainer实现src/llamafactory/train/sft/trainer.py
    • CustomSeq2SeqTrainer 继承自 HuggingFace 的 Seq2SeqTrainer,直接复用其断点续训机制

五、注意事项

  • 超参数需保持一致:恢复训练时,模型结构、数据集、batch size 等参数必须与中断前一致。
  • 分布式/Deepspeed:分布式训练同样支持断点续训,建议 checkpoint 路径填写完整。
  • 特殊模式:如 LoRA/Unsloth 等部分模式历史上有 bug,建议保持代码为最新版。

六、常见问题

  • resume_from_checkpoint 填 True 还是路径?
    • True:自动查找 output_dir 下最新 checkpoint
    • 路径:指定某个 checkpoint 文件夹
  • 恢复后会不会重复训练?
    • 不会,Trainer 会自动跳过已完成的 step/epoch
  • 报错怎么办?
    • 检查 output_dir、数据集、模型结构等参数是否与中断前完全一致
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!