Llama-Factory 微调常见错误与解决方案
在大模型时代,越来越多的研究者和开发者希望将预训练语言模型应用于垂直领域——比如客服问答、法律咨询或医疗辅助。然而,直接从零开始训练一个大模型既不现实也不经济。于是,微调(Fine-tuning) 成为最主流的方式。
但问题来了:传统微调需要写复杂的训练脚本、管理分布式环境、处理显存瓶颈……这对新手来说简直是'劝退三连'。直到 Llama-Factory 的出现。
这个开源项目像是一站式自助餐厅,把数据预处理、模型加载、LoRA/QLoRA 配置、训练监控、权重合并全都打包好了,甚至提供了可视化界面,点点鼠标就能启动训练。听起来很美好?没错,但它也有自己的'隐藏规则'——稍有不慎,就会遇到训练崩溃、显存溢出、权重无效等问题。
下面我们就来盘点一下,使用 Llama-Factory 时新手最容易踩的十个坑,并结合底层机制给出真正能落地的解决建议。
为什么你明明用了 LoRA 还是爆显存?
这是最常见的第一问:'我都用 LoRA 了,参数不是只训 0.1% 吗?怎么还会 CUDA out of memory?'
答案是:可训练参数少 ≠ 显存占用低。
LoRA 确实大幅减少了梯度和优化器状态的存储需求,但以下几部分依然吃显存:
- 模型前向传播中的激活值(activations),尤其是深层网络;
- Adam 优化器仍需保存部分状态(虽然比全参数小很多);
- Batch Size 太大时,中间缓存会迅速堆积;
- 使用 FP32 训练而非半精度。
实际应对策略:
per_device_train_batch_size: 1 # 能压到 1 最好
gradient_accumulation_steps: 16 # 模拟大 batch
fp16: true # 或 bf16(如果支持)
如果你连 batch_size=1 都跑不动,那下一步就是上 QLoRA,通过 4-bit 量化进一步压缩主模型权重内存。
✅ 小贴士:RTX 3090(24GB)上跑 Llama-2-7B 的 LoRA,通常
bs=4是极限;若想更稳,降为bs=2+grad_acc=8更安全。
训完发现模型'没学会'?可能是 LoRA 插错地方了
你辛辛苦苦训了几个小时,结果一推理,输出还是随机乱语或者不断重复。检查日志却发现 loss 其实在下降——这说明模型'学到了东西',只是没起作用。
罪魁祸首往往是:target_modules 配错了。
不同架构的模型,其注意力层的命名完全不同:
| 模型 | 正确 target_modules |
|---|---|
| LLaMA / Mistral | ["q_proj", "v_proj"] |
| ChatGLM | ["query_key_value"] |
| Qwen | ["c_attn"] |
| Bloom | ["query_key_value"] |

