LoRA/QLoRA 微调实战入门
全参微调动辄几十张卡,多数团队摸不到;LoRA/QLoRA 把门槛打到一张消费级卡。本文讲清 LoRA 的原理(低秩适配)、QLoRA 怎么进一步省显存、完整的微调流程(数据准备→训练→合并→部署),以及一个关键认知——微调前先确认它真是你问题的最优解。
本文要点
- 主题聚焦:大模型、开源
- 适合人群:独立开发者、全栈工程师、AI 应用开发者
- 核心价值:快速理解背景、实践路径、常见误区和工程建议
想让开源模型在你的任务上更强,微调是终极手段。但"微调"听起来就要几十张 A100、贵到劝退——那是全参微调。本篇讲的 LoRA/QLoRA(参数高效微调),把门槛打到一张消费级 GPU 就能训,是个人/小团队玩微调的现实路径。
一、先泼盆冷水:微调前先确认它是最优解
在讲怎么微调前,务必先问自己:这个问题,真的需要微调吗?
之前《微调 vs RAG vs Prompt》讲过:知识类问题用 RAG,行为/风格问题才考虑微调。微调是为"稳定的特定行为/风格",不是为"更聪明"或"学新知识"。
很多人想微调,其实是想解决一个 RAG 或 prompt 能解决的问题。先确认:prompt 调到极致了吗?RAG 够了吗?有足够的训练数据吗? 都确认了还不够,再微调。否则花一周训出来的模型,不如别人一句好 prompt。
确认要微调了,往下看。
二、LoRA 原理:不训全部,只训一小部分
全参微调更新模型所有参数(70B 模型 = 70B 参数要训,显存爆炸)。LoRA(Low-Rank Adaptation) 的洞察:模型权重的"变化量"是低秩的——可以用两个小矩阵的乘积近似这个变化量。
原始权重 W(冻结,不训)
变化量 ΔW ≈ A × B (A: d×r, B: r×d, r 很小,如 8)
训练时只训 A 和 B(参数量从 d×d 降到 2×d×r,小几个数量级),W 冻结。推理时 W' = W + A×B。
好处:
- 显存暴降:不用存全部参数的梯度/优化器状态。
- 快:训练参数少,迭代快。
- 可插拔:LoRA 是个小适配器,可以保存/加载/切换(一个基座模型 + 多个 LoRA 适配不同任务)。
代价:表达能力略弱于全参微调(低秩近似有损失),但对多数任务够用。
三、QLoRA:把基座量化,再训 LoRA
LoRA 已经省,但基座模型仍是 fp16(70B 要 140GB 显存,单卡装不下)。QLoRA = 把基座量化到 4bit( NF4)加载 + 只在 LoRA 参数上反向传播。
这样 70B 模型能在一张 48GB 显存的卡上微调,7B/13B 模型消费级 24GB 卡(4090)就能训。QLoRA 是当前"单卡微调"的事实标准。
精度上,QLoRA 训出的模型质量接近全参微调(论文和大量实践证实),性价比极高。
四、完整流程
1. 数据准备。 微调要"指令-响应"对,格式通常是:
{"instruction": "把下面句子翻译成正式中文", "input": "hello world", "output": "你好,世界"}
要点:
- 质量 > 数量。1000 条高质量样本,胜过 10 万条噪声。LIMA 论文用 1000 条就微调出强模型。
- 覆盖任务分布。数据要像真实推理时的输入分布,别拿维基百科微调客服。
- 去重、清洗。重复/矛盾样本会破坏训练。
2. 训练。 工具选一个:
- PEFT(HuggingFace):LoRA/QLoRA 的官方库,最通用。
- LLaMA-Factory:低代码,配置文件式微调,新手友好。
- Unsloth:高度优化,速度快 2–5 倍、省显存 50%+,推荐。
LLaMA-Factory 一条命令起步:
llamafactory-cli train examples/train_qlora/llama3_lora.yaml
配置里指定:基座模型、数据集、LoRA rank(常用 8/16)、学习率、epoch(2–3 通常够)。
3. 合并或挂载。 训完得到 LoRA 适配器(几百 MB)。两种用法:
- 合并进基座:
base + LoRA → 完整模型,部署简单(一个模型文件)。 - 运行时挂载:vLLM 等推理框架支持动态加载 LoRA,一个基座服务多个适配器(省资源)。
4. 部署 + 评测。 部署用 vLLM(参考专门文章)。评测是关键——和微调前基座对比,确认真的变好(在目标任务评测集上)。没评测的微调,可能训了不如不训。
五、超参与坑
- rank(r):8/16 是默认甜区。任务复杂可调大(64),但边际递减、过拟合风险升。
- epoch:2–3 通常够。指令微调数据少,epoch 太多会过拟合(模型死记样本)。
- 学习率:LoRA 比全参微调高(1e-4 量级),按工具默认即可。
- 灾难性遗忘:微调太狠会让模型忘了通用能力(变专但变蠢)。对策:混入通用数据、控制 epoch、用较低 rank。
六、何时该上 LoRA 微调
回到选型——这些场景 LoRA 真有用:
- 稳定输出格式/风格:要模型严格按某种结构/语气输出,prompt 调不稳。
- 特定领域行为:客服、法律、医疗等有专属任务模式。
- 让小模型逼近大模型:在窄任务上,微调过的 7B 能超过不微调的 70B(成本大降)。
- 本地化/隐私:必须自部署,又需要定制。
不适用:知识更新(用 RAG)、需要更强推理(换大模型)、数据不够(先攒数据)。
小结
LoRA/QLoRA 把"微调"从大厂专属变成单卡可玩:
- LoRA:训低秩适配器,省显存、可插拔。
- QLoRA:基座 4bit 量化 + LoRA,单卡训 7B–70B。
- 流程:高质量数据 → PEFT/Unsloth 训练 → 合并/挂载 → 评测对比。
但记住那句反复强调的:微调是特定场景的利器,不是默认选项。先确认 prompt 和 RAG 解决不了,再上 LoRA。当它真正适合时(稳定行为/风格、领域定制、小模型提速),它就是你"用开源模型做出差异化"的核心手段——这正是它在 AI 编程社区里值得深入的原因。
Related