ArcLibrary

LoRA (低秩微调)

用极少的参数微调大模型 —— 普通开发者也能用一张卡调出专属模型。

TrainingPEFTLoRA
核心 · Key Idea

一句话:LoRA = Low-Rank Adaptation。微调时冻住原模型权重,只训练插在每层旁边的两个很小的低秩矩阵。结果:参数减少 100–1000 倍、显存大幅降低、效果几乎不掉 —— 让普通开发者也能在一张消费级 GPU 上微调大模型。

是什么#

原模型的权重矩阵 W 是 d×d。LoRA 不改 W,而是给它加上一个旁路 ΔW = B·A,其中 A 是 d×r、B 是 r×d,r 通常取 4 / 8 / 16,远小于 d

原始: y = W·x
LoRA: y = W·x + (B·A)·x   ← 训练时只更新 A、B

参数量从 d² 降到 2·d·r。对一个 70B 模型,可微调参数从几百 GB 降到几百 MB

打个比方#

打个比方 · Analogy

原模型 = 印好的厚厚一本书
全参微调 = 把整本书重印一遍,贵。
LoRA = 在书上贴一些便利贴,原书不动。要换风格?换一组便利贴就行 —— 多个 LoRA 可以热插拔

关键概念#

Rank (r)
LoRA 矩阵的「窄度」。常用 r=8 / 16,越大表达力越强、参数也越多。
Alpha (α)缩放系数
控制 LoRA 输出的放大倍数。常设 α=2r。
Target Modules目标层
通常给 attention 的 q/k/v/o 加 LoRA。也可加 FFN,开销更大。
Adapter适配器
训完的 LoRA 文件 —— 只有 A、B 两个矩阵,非常小(几 MB ~ 几百 MB)。
Merge合并
推理时可把 A·B 加进 W,等价于零额外开销。

怎么工作#

只有蓝色 A、B 训练,灰色 W 不动。多个 LoRA 可以为不同任务/风格单独训练,运行时按需加载。

实操要点#

  • r 不用调太大:r=8 通常够用;上限 r=32。调大 r 收益有限,但参数膨胀
  • 学习率比全参微调大:1e-4 ~ 3e-4 起步(相比 SFT 的 1e-5)。
  • 量化 + LoRA = QLoRA:把 base 模型量化到 4bit,LoRA 还在 fp16 上训。70B 模型也能在单张 24GB 卡上微调
  • 适配器可热切换:一份 base + N 个 LoRA = N 个不同任务模型。节省存储
  • 目标层选对:默认加 q/v 即可。全部加 = 接近全参微调,反而失去 LoRA 优势

易混点#

LoRA
**几百 MB** 参数。
单卡几小时。便宜灵活。
Full Fine-tuning
**几百 GB** 参数。
需要集群、贵。
LoRA
在**权重矩阵**上加旁路。
效果接近全参微调。
Prompt Tuning / P-Tuning
只训练 input 端的「**软 prompt**」。
更轻但效果通常弱一截。

延伸阅读#

  • SFT —— LoRA 是 SFT 的高效实现
  • Quantization —— QLoRA 把量化和 LoRA 结合
  • 论文:「LoRA: Low-Rank Adaptation of Large Language Models」(Hu et al., 2021)