训练中断了怎么续,AMD 显卡上 LLaMA-Factory 的断点续训技巧
训练意外中断?别慌,AMD 显卡上的续训实战指南
跑大模型微调的朋友,最怕的不是显存爆炸,而是训练跑到一半突然“断电”或者网络波动导致进程挂掉。尤其是当我们好不容易在 AMD Instinct GPU 上调通了 ROCm 环境,看着 Loss 曲线稳步下降时,一次意外中断足以让人心态崩了。很多人第一反应是重新从头跑,但这不仅浪费时间,更可能因为随机种子的变化导致最终模型效果不一致。
其实,LLaMA-Factory 早就内置了完善的断点续训机制。只要配置得当,我们完全可以从中断的地方无缝接上,就像什么都没发生过一样。今天就来聊聊在 AMD ROCm 环境下,如何优雅地处理训练中断,以及如何确保续训后的模型质量不打折。
理解 Checkpoint 自动保存机制
LLaMA-Factory 的核心优势之一就是其对训练状态的自动化管理。在训练过程中,框架会根据你设定的 save_steps 参数,定期将当前的模型权重、优化器状态、学习率调度器状态以及当前的步数(global step)打包保存为 checkpoint 文件夹。
默认情况下,这些文件会保存在输出目录(output_dir)下的 checkpoint-xxxx 子文件夹中。比如,如果你设置每 500 步保存一次,那么当训练进行到第 1500 步意外中断时,你的磁盘上应该会有 checkpoint-500、checkpoint-1000 和 checkpoint-1500 这三个文件夹。
关键点在于: 续训不仅仅是加载模型权重(weights),更重要的是加载优化器状态(optimizer state)和学习率调度器(scheduler state)。如果只加载权重而重置了优化器,模型相当于“失忆”了之前的梯度积累方向,这会导致 Loss 曲线出现剧烈跳变,甚至无法收敛。LLaMA-Factory 的 checkpoint 机制完整保留了这些信息,这是实现平滑续训的基础。
ROCm 环境下的文件完整性检查
在 NVIDIA 生态里,大家可能习惯了直接重启脚本。但在 AMD ROCm 环境下,由于文件系统交互和驱动层的差异,特别是在长时间高负载写入时,偶尔会出现文件写入不完整的情况。如果在文件损坏的情况下强行续训,可能会报出奇怪的形状不匹配错误,或者直接导致训练崩溃。
因此,在重新启动训练前,花一分钟检查最后一个 checkpoint 的完整性是非常必要的。
你需要进入最新的 checkpoint 目录,确认以下关键文件是否存在且大小正常(非 0 字节):
adapter_model.safetensors或pytorch_model.bin(取决于你是否合并权重)optimizer.pt(这是续训的灵魂,没了它就得重头来)scheduler.pttraining_args.bintrainer_state.json
可以使用简单的 Linux 命令快速查验:
cd /path/to/output_dir/checkpoint-1500
ls -lh optimizer.pt scheduler.pt trainer_state.json
如果发现 optimizer.pt 缺失或大小为 0,说明上次保存过程被强制打断,这个 checkpoint 不可用。此时请回退到上一个完整的 checkpoint(例如 checkpoint-1000)进行恢复。虽然会损失几百步的训练数据,但总比带着错误的状态继续跑要强得多。
一键续训:指定 resume_from_checkpoint
确认文件无误后,续训操作其实非常简单。LLaMA-Factory 的命令行工具 llamafactory-cli 提供了专门的参数来指向断点。
假设你的原始配置文件是 examples/train_lora/llama3_lora_sft.yaml,最后一次成功保存的 checkpoint 路径是 /data/models/output/checkpoint-1500,那么启动续训的命令如下:
llamafactory-cli train examples/train_lora/llama3_lora_sft.yaml \
--resume_from_checkpoint /data/models/output/checkpoint-1500
这里有一个细节需要注意:在 YAML 配置文件中,你不需要修改任何关于步数或 epoch 的设置。框架会自动读取 trainer_state.json 中的 global_step 和 epoch 信息,并从那里继续计数。如果你手动修改了配置中的 max_steps,请确保它大于当前已完成的步数,否则训练会立即结束。
对于使用 DeepSpeed 多卡训练的用户(在 AMD MI250/MI300 系列上这很常见),该命令同样适用。DeepSpeed 的状态分片信息也包含在 checkpoint 中,LLaMA-Factory 会自动处理张量并行和数据并行的状态恢复。
平滑衔接:学习率与训练曲线的调整
很多博主在讲续训时忽略了学习率调度器的问题。当你从第 1500 步恢复时,学习率应该处于什么位置?
LLaMA-Factory 会自动加载之前保存的 scheduler.pt,这意味着学习率会精确接续中断前的数值。理论上这很完美,但在实际观察中,有时候由于浮点数精度或硬件调度的微小差异,刚恢复的前几十步 Loss 可能会有轻微波动。
如果你发现恢复训练后 Loss 突然飙升,不要急着停止。通常经过几个 warmup 步数后会恢复正常。但如果波动过大,可以考虑在配置文件中微调一下策略:
- 保持原样(推荐):绝大多数情况下,自动加载是最优解,因为它忠实还原了优化轨迹。
- 短暂 Warmup:如果你非常担心震荡,可以在配置中临时增加极少量的 warmup 比例,但这通常没必要,因为调度器已经记录了当前的衰减阶段。
在 ROCm 平台上,建议配合 rocm-smi 实时监控显存和温度。续训初期的显存占用模式应与中断前一致。如果发现显存占用异常偏低,可能是没有正确加载优化器状态(即实际上是在做新训练而非续训),这时需要再次检查 resume_from_checkpoint 路径是否正确。
结语
训练大模型是一场马拉松,意外中断只是途中的小插曲。在 AMD 显卡上利用 LLaMA-Factory 进行断点续训,核心在于“检查文件完整性”和“正确传递 checkpoint 路径”。只要掌握了这两点,无论是断电还是网络波动,都能让你的训练任务从容继续,确保每一分算力都不被浪费。下次遇到训练中断,别再傻傻地从头跑起了,试试这个方法,让模型接着昨天的进度继续进化。
200小时GPU算力已就位,快来领取:https://marketing.csdn.net/questions/Q2604140858304426315?utm_source=AIpaper
更多推荐


所有评论(0)