高效微调(PEFT):LoRA 家族是怎么把微调成本打下来的


资料截至 2026-10

一、为什么要高效微调

全量微调(full fine-tuning)要把整份权重都参与训练:权重本身 + 梯度 + 优化器状态 + 激活值,四样都占显存。LLaMA-Factory 官方 README 给的参照很直观,同样是微调一个 7B 模型:

方式 显存需求
全量 bf16 约 120 GB
LoRA 约 16 GB
4bit QLoRA 约 6 GB


成本之外还有三个好处:

  • 一份底座、多个任务:每个任务只训一个几十 MB 的”补丁”,同一个底座上挂多个补丁,切换成本极低
  • 抗遗忘:底座权重冻结,通用能力不容易被某个任务带偏
  • 分发友好:给别人发一个 LoRA 文件,而不是整份权重

二、谱系:四条路线

路线 思路 代表
插入式 Adapter 在每层里塞一个小模块,只训它 Parameter-Efficient Transfer Learning for NLP(1902.00751)
连续 Prompt 把”提示词”本身当参数来训练 Prefix-Tuning(2101.00190)、Prompt Tuning(2104.08691)
低秩适配(主角) 把权重更新量 ΔW 分解成两个低秩矩阵的乘积 BA,只训 A、B LoRA(2106.09685)→ QLoRA(2305.14314)→ DoRA(2402.09353)
可学习向量 每个模块只训几个标量 IA3(2205.05638)

现在的主流就是 LoRA 家族,其余路线了解即可。

三、LoRA

核心思想:微调后的权重 W 可以写成 W + ΔW。LoRA 的做法是不直接学 ΔW,而是学它的低秩分解——两个小矩阵 A、B 相乘,秩就是 r。训练时只更新 A 和 B,推理时可以合并回 W,也可以外挂不合并。

用 Hugging Face PEFT 库(21.8k stars)开一个 LoRA 就这么几行:

from peft import LoraConfig, get_peft_model

peft_config = LoraConfig(
    r=16,                 # 秩:可训参数的规模旋钮
    lora_alpha=32,        # 缩放系数,常设成 2*r
    task_type=TaskType.CAUSAL_LM,
    target_modules=["q_proj", "v_proj"]  # 改哪些矩阵,q/v 是最常见的默认
)
model = get_peft_model(model, peft_config)

三个关键参数:

  • r:秩。决定可训练参数量。太小表达力不够,太大又失去”高效”的意义
  • lora_alpha:缩放系数,惯例是 alpha = 2r,再通过 lora_alpha/r 得到实际缩放
  • target_modules:改哪些权重矩阵。默认 q_proj、v_proj 就很能打,有些任务加上 k_proj、o_proj 会更好

两个延伸:

  • QLoRA(2305.14314):把底座量化到 4bit(NF4 + 双重量化 + 分页优化器),在上面挂 LoRA——就是用 6GB 训 7B 的那个方案
  • DoRA(2402.09353):把权重拆成”幅度 + 方向”两部分,LoRA 只学方向。对部分任务能缩小和全量微调的差距,代价是参数量略多

四、工程上的几个实操问题

1. r 选多大? 这是 LoRA 悬而未决的老问题。2026-10 那篇《A Fine-Grained Analysis of the LoRA Fine-Tuning Landscape》(2610.06542)给的结论是:r 太小会让优化景观病态(不好训),太大又牺牲了效率,现有理论指导很有限。实操上从 r=8~16 起步、看损失曲线和验证集再调,仍然是最靠谱的默认。

2. 改哪些层? 《Where to Adapt Matters》(2610.11620)发现不同层的收益和代价不一样——改某些层任务涨分多、通用能力掉得少,改另一些层则相反。也就是说”改哪一层”本身是个值得调的变量,不是所有层都适合一视同仁地塞 LoRA。

3. 用什么训? 三个主流选项:

  • Hugging Face PEFT:库级方案,代码控首选,和 Transformers/TRL 无缝
  • LLaMA-Factory(75.4k stars,ACL 2024):一条命令 llamafactory-cli train examples/train_lora/qwen3_lora_sft.yaml 搞定 100+ 种模型,支持 LoRA/QLoRA(2~8bit)/DoRA/OFT/GaLore 等一长串方法,还有 Web UI(LLaMA Board)
  • Unsloth(77.7k stars):主打快和省,宣称 2 倍速度、省 70% 显存、无损精度,支持 LoRA/QLoRA/FP8 和一批 2026 年的新模型

4. 训完怎么上线? :vLLM 支持多 LoRA 服务——一个底座上按请求挂不同的 LoRA,官方说法是开销极小。启用是 --enable-lora,配套参数有 --max-loras、--max-lora-rank(设成你最高 rank 的值,免得浪费显存)、--max-cpu-loras;运行时动态加载要开环境变量 VLLM_ALLOW_RUNTIME_LORA_UPDATING=True。限制也记一下:多模态默认每 prompt 只能挂一个 LoRA、序列分类头只支持 score/classifier、token 分类适配器不支持。LLaMA-Factory 也提供 OpenAI 风格 API(用 vLLM 或 SGLang 做 worker),训完直接导出来起服务。

五、方法之间的差距

2026-10 有篇值得注意的反思:《Are Parameter-Efficient Fine-tuning Methods Really Different?》(2610.09122)。作者把六种方法放在语言模型和扩散模型上对比,发现所选 LoRA 家族的方法都近似保持了预训练权重的几何,恢复那点轻微漂移后,方法之间的差别比名字听起来小得多。

另一条有意思的新工作是 RoSA(2610.06243):把”改哪一层”做成分段轮转——靠近输入的层一直冻结,可训练块在后面的层上轮转推进,省优化器内存、缩短反向传播。

这两篇放在一起,正好概括了这个领域的现状:方法名的多样性远大于实质差异,省钱的增量更多来自工程(量化、层选择、优化器内存),而不是换一种参数化。

六、选型

  • 默认从 QLoRA 起步:LLaMA-Factory + 4bit + r=816,单卡 616GB 就能玩 7B
  • 在意通用能力保持 → 把”改哪些层”当成超参调一下(2610.11620 的结论)
  • 上线接 vLLM 多 LoRA,一个底座服务一批任务
  • 先把 r、层选择、量化档位这三个旋钮调明白

参考

  • 1902.00751 — Parameter-Efficient Transfer Learning for NLP — ICML 2019(CCF-A)
  • 2101.00190 — Prefix-Tuning: Optimizing Continuous Prompts for Generation — ACL 2021(CCF-A)
  • 2104.08691 — The Power of Scale for Parameter-Efficient Prompt Tuning — EMNLP 2021(CCF-A)
  • 2106.09685 — LoRA: Low-Rank Adaptation of Large Language Models — ICLR 2022(CCF-A)
  • 2205.05638 — Few-Shot Parameter-Efficient Fine-Tuning is Better and Cheaper than In-Context Learning(IA3) — NeurIPS 2022(CCF-A)
  • 2305.14314 — QLoRA: Efficient Finetuning of Quantized LLMs — NeurIPS 2023(CCF-A)
  • 2402.09353 — DoRA: Weight-Decomposed Low-Rank Adaptation — ICML 2024(CCF-A)
  • 2610.06243 — RoSA: Rotational Sparse Adaptation for Memory-Efficient Fine-Tuning — 预印本
  • 2610.06542 — A Fine-Grained Analysis of the LoRA Fine-Tuning Landscape — 预印本
  • 2610.09122 — Are Parameter-Efficient Fine-tuning Methods Really Different? — 预印本
  • 2610.11620 — Where to Adapt Matters: Layer-Selective Fine-Tuning for Capability Retention — 预印本

文章作者: Halensea
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Halensea !
 上一篇
AI Agent:一个循环、五个部件,和工程上真正难的地方 AI Agent:一个循环、五个部件,和工程上真正难的地方
agent 不是"更聪明的聊天机器人",而是一个"想—做—看"的循环加上五个部件。这篇按这个骨架把 agent 讲清楚:workflow 和 agent 的界限在哪、模型要多什么能力、工具怎么标准化(MCP)、记忆和规划怎么做、以及工程上真正难的是什么。
2026-10-10
下一篇 
世界模型(World Models):它是什么、用来干什么、现在到哪一步 世界模型(World Models):它是什么、用来干什么、现在到哪一步
世界模型想让模型学会"如果我这么做,世界接下来会变成什么样"。它是机器人与自动驾驶里最被看重的一块,这篇按四条技术路线梳理它是什么、用在哪,以及现在的真实瓶颈。
2026-10-09
  目录