一、一句话概括
全量微调、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$
作用:
$$
\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
3、bias
七、简单评价这道面试题
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$ 的作用以及实际调参经验都讲清楚,基本可以判断其具备大模型微调的扎实基础。
评论专区
评论加载中...登录后即可发表评论