✨ 复制成功!

以文会友,打造好学人设!

📋 已复制到剪贴板:

全量微调、LoRA、QLoRA 分别适合什么场景?LoRA 为什么能大幅降低显存和训练成本?它的秩 r 和缩放系数 α 分别控制什么?

创建时间:2026-09-18 更新时间:2026-09-18 阅读次数:1148 次 分类:微调与对齐技术

一、一句话概括

全量微调、LoRA、QLoRA 是大模型微调的三种主流方式,核心区别在于:

全量微调更新全部参数,LoRA 只更新少量低秩增量,QLoRA 在 LoRA 基础上再把基座模型量化。

三者的取舍是:

  • 效果:全量微调通常最好,LoRA 接近,QLoRA 略低;
  • 显存:全量微调最高,LoRA 中等,QLoRA 最低;
  • 训练成本:全量微调最贵,LoRA 中等,QLoRA 最便宜;
  • 部署:LoRA 和 QLoRA 可以只保存增量,灵活切换。

一句话总结:全量微调适合效果优先,LoRA 适合资源有限但追求效果,QLoRA 适合显存极度受限。


二、三种方式的原理和区别

1、全量微调(Full Fine-tuning)

原理:

  • 加载预训练模型;
  • 用下游数据更新全部参数;
  • 保存完整模型。

显存需求:

以模型参数量 $\Psi$ 为例,混合精度 + Adam:

  • FP16 参数:$2\Psi$
  • FP16 梯度:$2\Psi$
  • FP32 主权重:$4\Psi$
  • FP32 一阶动量:$4\Psi$
  • FP32 二阶动量:$4\Psi$

合计约:

$$ 16\Psi $$

再加激活值,显存需求很高。

特点:

  • 效果通常最好;
  • 能深度适配下游任务;
  • 显存和算力需求高;
  • 每个任务要保存一份完整模型。

2、LoRA(Low-Rank Adaptation)

原理:

冻结预训练权重,在旁路插入低秩矩阵,只训练这两个小矩阵。

对于原始权重 $W_0 \in \mathbb{R}^{d \times k}$,LoRA 不直接更新 $W_0$,而是:

$$ W = W_0 + \Delta W = W_0 + BA $$

其中:

  • $B \in \mathbb{R}^{d \times r}$;
  • $A \in \mathbb{R}^{r \times k}$;
  • $r \ll \min(d, k)$ 是秩。

前向传播:

$$ h = W_0 x + BAx $$

训练时:

  • $W_0$ 冻结,不计算梯度;
  • 只训练 $A$ 和 $B$;
  • 初始时 $A$ 用高斯初始化,$B$ 用零初始化,保证初始 $\Delta W = 0$。

显存需求:

  • 基座参数不存梯度、不存优化器状态;
  • 只存 LoRA 参数 $A, B$ 的梯度、优化器状态;
  • 显存大幅下降。

如果只训练 LoRA,模型状态显存约为:

$$ 2\Psi + 16 \times \Psi_{\text{LoRA}} $$

其中 $\Psi_{\text{LoRA}} \ll \Psi$。

3、QLoRA(Quantized LoRA)

原理:

在 LoRA 基础上,把基座模型量化到 4-bit,进一步降低显存。

具体:

  • 基座模型用 4-bit NormalFloat(NF4)量化存储;
  • 前向和反向时反量化到 BF16 计算;
  • LoRA 参数保持 BF16,正常训练;
  • 引入双重量化(Double Quantization)和分页优化器(Paged Optimizer)进一步省显存。

显存需求:

  • 基座 4-bit:约 $0.5\Psi$;
  • LoRA 参数和优化器:$16 \times \Psi_{\text{LoRA}}$;
  • 激活值:正常。

相比全量微调,显存下降非常显著。

特点:

  • 能在单张 48GB 甚至 24GB 显卡上微调 65B 模型;
  • 效果接近 16-bit LoRA;
  • 训练速度比 LoRA 慢,因为要反量化。

三、三者适合什么场景

1、全量微调适合的场景

  • 有充足算力,比如多卡 A100/H100;
  • 追求最佳效果;
  • 下游任务和预训练分布差异大;
  • 需要深度适配,比如领域预训练;
  • 数据量较大;
  • 只做一个任务,不需要多任务切换。

2、LoRA 适合的场景

  • 显存有限,但比 QLoRA 宽松;
  • 需要接近全量微调的效果;
  • 需要多任务切换,每个任务一个 LoRA;
  • 需要快速迭代实验;
  • 数据量中等;
  • 常见于 7B–70B 模型微调。

3、QLoRA 适合的场景

  • 显存极度受限,比如单张 24GB 消费级显卡;
  • 想微调 65B 甚至更大的模型;
  • 资源有限的研究或小团队;
  • 对训练速度要求不高;
  • 需要快速验证想法。

4、对比表

维度 全量微调 LoRA QLoRA
训练参数 全部 低秩增量 低秩增量
基座精度 FP16/BF16 FP16/BF16 4-bit
显存需求 最高 中等 最低
训练速度 快 快 较慢
效果 最好 接近全量 略低于 LoRA
多任务 不友好 友好 友好
适合场景 效果优先 平衡 显存优先

四、LoRA 为什么能大幅降低显存和训练成本

1、减少可训练参数

原始模型参数量 $\Psi$,LoRA 只训练 $\Psi_{\text{LoRA}}$:

$$ \Psi_{\text{LoRA}} = \sum_{\text{层}} r \times (d + k) $$

对于 $d = k = 4096$,$r = 8$:

$$ \Psi_{\text{LoRA}} = 8 \times (4096 + 4096) = 65536 $$

相比原始 $4096 \times 4096 = 1.6 \times 10^7$,只有约 0.4%。

2、减少优化器状态

全量微调需要为全部参数保存:

  • 梯度;
  • 一阶动量;
  • 二阶动量。

LoRA 只需要为 LoRA 参数保存这些。

优化器状态从 $12\Psi$ 降到 $12\Psi_{\text{LoRA}}$,大幅下降。

3、基座不存梯度

基座参数冻结,不需要:

  • 计算梯度;
  • 保存梯度;
  • 保存优化器状态。

这省下了大量显存。

4、减少通信

分布式训练中:

  • 全量微调需要同步全部梯度;
  • LoRA 只需要同步 LoRA 参数梯度。

通信量大幅下降。

5、部署灵活

LoRA 可以:

  • 只保存增量,几十 MB;
  • 基座共享,多任务切换;
  • 推理时合并回基座,无额外延迟。

6、显存对比

以 7B 模型为例,混合精度 + Adam:

  • 全量微调:约 $16 \times 7\text{B} = 112\text{GB}$;
  • LoRA($r=8$,约 0.4% 参数):约 $2 \times 7\text{B} + 16 \times 0.004 \times 7\text{B} \approx 14.4\text{GB}$;
  • QLoRA:基座 4-bit 约 $0.5 \times 7\text{B} = 3.5\text{GB}$,加 LoRA 约 14GB 中的 LoRA 部分,总显存更低。

显存下降非常显著。


五、秩 r 和缩放系数 α 分别控制什么

1、秩 $r$

作用:

  • 控制低秩矩阵的维度;
  • 决定 LoRA 的表达能力;
  • $r$ 越大,可训练参数越多,表达能力越强;
  • $r$ 越小,参数越少,越省显存。

影响:

  • $r$ 太小:可能欠拟合,学不到足够信息;
  • $r$ 太大:参数增多,可能过拟合,显存增加;
  • 常见取值:4、8、16、32、64。

经验:

  • 简单任务:$r = 4$ 或 $8$;
  • 复杂任务:$r = 16$ 或 $32$;
  • 数据量大、任务难:可以更大。

2、缩放系数 $\alpha$

作用:

  • 控制 LoRA 增量的缩放;
  • 实际使用的增量是:

$$ \Delta W = \frac{\alpha}{r} BA $$

  • $\alpha$ 越大,LoRA 增量影响越大;
  • $\alpha$ 越小,增量影响越小。

为什么需要 $\alpha$:

  • 当 $r$ 变化时,$BA$ 的尺度会变化;
  • 用 $\alpha / r$ 归一化,让不同 $r$ 下的学习率尺度一致;
  • 常见做法是固定 $\alpha$,调整 $r$。

经验:

  • 常见 $\alpha = r$ 或 $\alpha = 2r$;
  • 也有固定 $\alpha = 16$,调 $r$;
  • $\alpha$ 本质上是 LoRA 部分的学习率缩放。

3、$r$ 和 $\alpha$ 的关系

  • $\alpha / r$ 是实际缩放因子;
  • 如果 $\alpha$ 固定,$r$ 增大时,实际缩放变小;
  • 如果 $\alpha = r$,缩放为 1;
  • 如果 $\alpha = 2r$,缩放为 2。

实践中:

  • 先定 $r$,再定 $\alpha$;
  • 或者固定 $\alpha / r$ 比例,调 $r$。

六、LoRA 的其他关键参数

1、target_modules

决定 LoRA 加在哪些层:

  • 只加 Q、V:参数最少;
  • 加 Q、K、V、O:效果更好;
  • 加所有线性层:效果最好,参数最多。

2、lora_dropout

  • 防止过拟合;
  • 常见 0.05 或 0.1。

3、bias

  • 是否训练 bias;
  • 通常设为 none。

七、简单评价这道面试题

1、这道题的价值

  • 这是大模型微调中最基础也最核心的一道题;
  • 一道题能考察全量微调、LoRA、QLoRA 的原理、显存对比和参数含义;
  • 区分度好,初级可能只知道 LoRA 省显存,中级能说清低秩分解,高级能讲清 $r$、$\alpha$ 和实际调参;
  • 贴近实战,微调大模型必然遇到。

2、这道题的不足

  • 题目偏基础,对高级候选人来说不够深;
  • 没有涉及 LoRA 的变体,如 AdaLoRA、DoRA;
  • 没有涉及 LoRA 合并、部署细节;
  • 对 QLoRA 的 NF4、双重量化考察不够。

3、建议的追问方向

  • LoRA 的 $r$ 和 $\alpha$ 怎么选?有没有经验公式?
  • LoRA 应该加在哪些层?为什么?
  • LoRA 推理时怎么合并?合并后精度如何?
  • QLoRA 的 NF4 和双重量化是什么?
  • LoRA 和 Adapter、Prefix Tuning 有什么区别?
  • 多任务 LoRA 怎么管理和切换?

4、总体评价

这是一道很好的大模型微调面试题,适合考察候选人对参数高效微调的理解。它既能考察 LoRA 的数学原理,也能延伸到显存分析、参数选择和实际调参。如果候选人能把三种方式的适用场景、LoRA 省显存的原因、$r$ 和 $\alpha$ 的作用以及实际调参经验都讲清楚,基本可以判断其具备大模型微调的扎实基础。


📌 面试天下网:一款服务于大一新生的口袋书,让大家在无聊的公共课上可以学习大模型技术!
📌 网站公告:【悬赏 200 元/篇】寻找“大模型面试战场”的一手回忆录
📌 网站公告:【大模型/Agent面试陪练1V1指导】正式启动......

评论专区

评论加载中...