语言模型微调实战(05):从配置到合并模型
环境和数据就绪,这一篇跑通第一次训练:LoRA SFT → 合并适配器 → 离线评估。「第一次训练」追求的是闭环,不是刷榜。
主流程三步
在容器内依次执行(路径按你的挂载调整):
1 | # 1) LoRA SFT |
训练配置里最值得盯的字段
任务与方法
1 | stage: sft |
LoRA
1 | lora_rank: 8 |
数据与模板
1 | dataset_dir: /app/LLaMA-Factory/data |
优化与精度
1 | per_device_train_batch_size: 2 |
验证(强烈建议打开)
1 | eval_dataset: <your_val_dataset_name> |
让 save_steps 与 eval_steps 对齐,便于事后对比 checkpoint。
合并配置在做什么
合并不是再训练,而是把 LoRA 权重写回基座:
1 | model_name_or_path: /app/models/<base-model> |
合并后的目录通常包含分片权重与 tokenizer,可独立加载,不必再挂适配器。
训练时你会看到什么
- 进度条与
loss/learning_rate; - 若开启评估:周期性
eval_loss; - 输出目录出现
checkpoint-*、adapter_model.safetensors、training_loss.png等。
第一次跑通的标准:进程正常结束 + 合并目录可加载 + 能跑通评估脚本。效果优化放到下一篇。
中断恢复
若配置了定期保存,可在 YAML 中设置:
1 | resume_from_checkpoint: /app/output/<lora-dir>/checkpoint-xxx |
重跑前清理
避免新旧权重混用:
1 | rm -rf /app/output/<lora-dir> /app/output/<merged-dir> |
小结
「第一次训练」追求的是闭环,不是刷榜。
语言模型微调实战第 05 篇完。下一篇专门讲:如何用日志和验证集判断轮数够不够。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 WALL-E's Blog!









