环境和数据就绪,这一篇跑通第一次训练:LoRA SFT → 合并适配器 → 离线评估。「第一次训练」追求的是闭环,不是刷榜。

主流程三步

在容器内依次执行(路径按你的挂载调整):

1
2
3
4
5
6
7
8
# 1) LoRA SFT
llamafactory-cli train /app/configs/train_xxx_lora.yaml

# 2) 合并适配器
llamafactory-cli export /app/configs/merge_lora.yaml

# 3) 离线评估(脚本名以仓库为准)
python3 scripts/test_model.py --model_path /app/output/xxx-merged

训练配置里最值得盯的字段

任务与方法

1
2
stage: sft
finetuning_type: lora

LoRA

1
2
3
4
lora_rank: 8
lora_alpha: 16
lora_dropout: 0
lora_target: all

数据与模板

1
2
3
4
dataset_dir: /app/LLaMA-Factory/data
dataset: <your_train_dataset_name>
template: qwen
cutoff_len: 2048

优化与精度

1
2
3
4
5
6
per_device_train_batch_size: 2
gradient_accumulation_steps: 8 # 有效 batch ≈ 16
learning_rate: 5.0e-5
num_train_epochs: 3.0
lr_scheduler_type: cosine
bf16: true

验证(强烈建议打开)

1
2
3
4
5
6
7
eval_dataset: <your_val_dataset_name>
eval_strategy: steps
eval_steps: 50
save_steps: 50
load_best_model_at_end: true
metric_for_best_model: eval_loss
greater_is_better: false

save_stepseval_steps 对齐,便于事后对比 checkpoint。

合并配置在做什么

合并不是再训练,而是把 LoRA 权重写回基座:

1
2
3
model_name_or_path: /app/models/<base-model>
adapter_name_or_path: /app/output/<lora-dir>
export_dir: /app/output/<merged-dir>

合并后的目录通常包含分片权重与 tokenizer,可独立加载,不必再挂适配器。

训练时你会看到什么

  • 进度条与 loss / learning_rate
  • 若开启评估:周期性 eval_loss
  • 输出目录出现 checkpoint-*adapter_model.safetensorstraining_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 篇完。下一篇专门讲:如何用日志和验证集判断轮数够不够。