直接回答:LLaMA-Factory 的参数很多,但真正决定成败的只有几个:模板要和模型严格匹配、微调方法和量化等级决定显存下限、学习率和批次决定能不能收敛、LoRA 的 rank 和 target 决定容量。第一次跑通之前,其余参数用默认值就行。
第一层:配错就一定失败的参数
模型与模板
- 模型路径 / 模型名称:本地目录或模型仓库里的名字。下载不下来时优先换镜像源,别手工拼文件名;
- 模板(template):这一项最容易出错。它决定对话按什么格式拼成训练文本,qwen 用
qwen、llama3 用llama3、chatglm 用chatglm3。模板选错不会报错,但训出来的模型会答非所问——效果差得离谱时,先回来检查这一项。
数据集
数据集要按约定格式组织,常见两种:
- alpaca 格式:
instruction/input/output三列,适合单轮指令; - sharegpt 格式:
conversations里是 role 和 content 的数组,适合多轮对话。
自定义数据要在 dataset_info.json 里登记,指明文件路径、格式和列名映射。数据读取失败时的报错往往不直观,格式检查建议单独写个小脚本先跑一遍。
第二层:决定显存和训练方式的参数
微调方法
| 方法 | 显存 | 效果 | 适用 |
|---|---|---|---|
full 全参数 |
极高 | 最好 | 数据量大、算力充足 |
lora |
低 | 接近全参 | 绝大多数场景的默认选择 |
freeze |
低 | 一般 | 只训练部分层,少见 |
qlora(量化 + LoRA) |
最低 | 略低于 LoRA | 单卡显存小,比如 24G 跑 13B |
量化等级
quantization_bit 设为 4 或 8 表示加载时量化,配合 LoRA 就是 QLoRA。量化会带来一点效果损失,但能把显存需求砍到三分之一左右,是个人显卡上微调大模型最实用的一步。
计算精度
优先 bf16,不支持再退到 fp16。fp16 在部分模型上会出现梯度溢出(loss 变成 NaN),换成 bf16 通常就好了。
第三层:影响收敛的参数
学习率
- 全参数微调:通常
1e-5到5e-5; - LoRA:可以大一些,
1e-4到3e-4比较常见,QLoRA 再高一点也行。
判断标准看 loss 曲线:一直震荡不下降说明太大,下降极慢或卡在某个值说明太小。配合 warmup 预热,能避免一开始就把参数带偏。
批大小与梯度累积
1 | 等效批大小 = 单卡批大小 × 梯度累积步数 × 卡数 |
显存不够时不要急着降学习率,先把单卡批大小降下来、梯度累积提上去,等效批大小不变,训练更稳。比如从 batch=8, accumulation=1 改成 batch=2, accumulation=4。
训练轮数
LoRA 微调一般 2~3 轮就够,数据量小的时候一轮也行。轮数太多会过拟合:训练集 loss 一直降,但模型开始重复训练集里的句子、换一种问法就答不上来。判断过拟合最直接的办法就是拿训练集之外的问题去问它。
截断长度(cutoff_len)
超过这个长度的样本会被截掉。设太小丢信息,设太大显存暴涨。取值原则是覆盖 95% 以上样本的长度,可以先统计一下长度分布再定,常见取值是 1024 / 2048 / 4096。
验证集比例
留 5%~10% 做验证集,才能看出是不是在过拟合。全量拿去训练的话,你只有训练集 loss 可看,而这个数字会骗人。
LoRA 独有的三个参数
| 参数 | 含义 | 怎么设 |
|---|---|---|
lora_rank |
低秩矩阵的维度,决定可训练容量 | 8~64,数据量大、任务难就调大 |
lora_alpha |
缩放系数,常设为 rank 的 1~2 倍 | 懒得算就设成和 rank 一样 |
lora_dropout |
防过拟合 | 数据少时 0.05~0.1,数据多设 0 |
lora_target 指定给哪些层加适配器,默认一般是注意力的 q、k、v、o 四个投影层。把它扩到全部线性层效果通常更好,代价是显存和训练时间上升。
显存不够时按这个顺序处理
- 降
per_device_train_batch_size,同步提高gradient_accumulation_steps; - 降
cutoff_len; - 打开梯度检查点(gradient checkpointing),用时间换显存;
- 设
quantization_bit=4走 QLoRA; - 降
lora_rank、缩小lora_target的范围; - 还不行就换更小的模型——这是最省事的一步,别硬扛。
动手前先 nvidia-smi 确认显卡是不是被别的进程占着,有时候只是显存碎片,重启训练进程就能救回来。
训练完之后
- 导出模型:LoRA 产出的是适配器权重,要选导出把基座和适配器合并成完整模型,才能直接部署;
- 评估:别只看 loss。准备一组固定问题,训练前后各跑一遍做对照,人眼看着变好才算好;
- 记录:把这次用的模型、模板、数据量、参数和 loss 曲线记下来。微调最大的成本是试错,不记录就等着重复踩坑。
本文整理自我自己早先收集的一份 LLaMA-Factory 参数说明资料(原资料以界面截图为主),这里按参数影响程度重新组织,并补上了判断依据,文字由 AI 协助改写后经我复核。参数名和取值范围以 LLaMA-Factory 官方文档和所用版本为准。
这篇笔记整理自我自己的实践记录,如果做法有出入,或者你踩过别的坑,欢迎到留言板一起聊聊。