LoRA 的 r 和 alpha 怎么设?QLoRA 又省在哪?
谁在问:有训练经验的面试官(二面);算法工程岗;作为 Q4-04 的实操向追问
口语化问法
- 你实际调过 LoRA 吗?r 和 alpha 怎么定的?
- QLoRA 和 LoRA 差在哪?什么时候用 QLoRA?
- 你训 LoRA 的时候学习率设多少?和全参微调一样吗?
考察意图
这道题只能靠动过手来答,是本章筛人效率最高的一道。面试官在看:
- 超参是抄的还是有判据的。答"r=8,alpha=16,教程上这么写的"和答"按数据信息量选,我们 1800 条所以 16 够用",是两个层级。
- 有没有跟上 2026 的口径。
all-linear、学习率提十倍、有效 batch < 32,这三条是近两年才成为共识的,答不出来说明知识停在 2023。 - 知不知道 QLoRA 是降级选项。把 QLoRA 当"更先进的 LoRA"是高频误解。
参考答案
60 分答案(及格线)
r 是低秩矩阵的秩,决定适配器的容量。r 越大能学的东西越多,但参数量和显存也涨,还更容易过拟合。常用 8、16、32、64。
alpha 和 r 一起决定缩放系数 α/r,一般设成 α = r 或 α = 2r。
QLoRA 是把基座量化到 4 bit 再挂 LoRA。基座显存降到原来的四分之一,代价是训练变慢一些、精度略有下降。7B 全参要八十多 G,LoRA 大概二十 G,QLoRA 不到十 G。
数字都对,及格。但全是"常用值",没有判据,追问"为什么是 16 不是 64"就没了。
90 分答案(有生产经验的回答)
r 的判据不是玄学,是容量:
LoRA 的可训参数量必须大于"数据集要装进去的信息量"。容量够时 LoRA 能打平全参微调;容量不够时不是断崖,是效率逐步变差。
所以社区里那两套看着打架的建议其实不矛盾:
- TRL / Thinking Machines 口径:SFT 用 r=256,RL/GRPO 用 r=1~32。
- Unsloth 等实用口径:16 或 32 起步。
前者说的是 post-training 规模的数据(百万 token 级),后者说的是几百到几千条的业务数据。而 RL 场景 r=1 就够,是因为强化学习每个 episode 只带回大约 1 bit 信息——rank-1 的三百万参数早就超容量了。
我的实操顺序:r=16 或 32 起步 → 如果训练 loss 明显欠拟合(降不下去)才往上加 → 但在加 r 之前,先检查 target_modules 对不对,因为效果不好十次有八次是这个原因,不是 r。
alpha:α/r 是作用在适配器输出上的缩放系数。α=r 或 α=2r 都能用,关键是做 rank 消融时必须固定 α/r,否则你分不清变化来自容量还是来自缩放。
2026 年真正决定成败的其实是另外三个超参(截至 2026-08,锚点是《LoRA Without Regret》,已被 HuggingFace TRL 收进官方文档):
| 超参 | 2026 共识 | 常见的 2023 化石 |
|---|---|---|
target_modules |
"all-linear",必须覆盖 MLP |
["q_proj","v_proj"] |
| 学习率 | 约为全参的 10 倍(约 100 步的短训约 15 倍):SFT 场景 LoRA 2e-4 / 全参 1e-5~1e-6;RL 场景 LoRA 5e-5 / 全参 1e-6 | 沿用全参的 2e-5 |
| 有效 batch | < 32。LoRA 对大 batch 的容忍度差于全参,且与 r 无关 | 能开多大开多大 |
epoch 控制在 1–3,超过 3 收益递减且过拟合与遗忘同时上升;dropout 从 0 起步(短训练里 dropout 作为正则并不可靠)。
QLoRA 省在哪——三个组件,很多人只记得第一个:
- NF4(4-bit NormalFloat):针对"网络权重近似正态分布"这个先验设计的 4 bit 数据类型,在该假设下优于普通 int4。基座以 NF4 存,前向时临时反量化到 BF16 计算。
- 双重量化:量化本身产生的量化常数也占显存,把它再量化一次,每参数再省约 0.4 bit。
- 分页优化器:借助统一内存,在梯度检查点造成显存尖峰时把优化器状态临时换出,避免尖峰直接 OOM。
关键是要说清它省的是哪一块:QLoRA 省的是基座权重那一项(14 G → 3.5 G),不是优化器状态——优化器状态在 LoRA 时本来就已经很小了。很多人把 QLoRA 说成"省优化器显存",这是理解错了位置。
三段式: 解决显存不足;代价是训练吞吐通常掉三成上下、精度略降;显存够的时候就不该用它。截至 2026-08,QLoRA 的正确定位是降级选项,不是默认——把它当"更先进的 LoRA"是个流传很广的误解。
追问链
r从 16 加到 64 会发生什么?怎么判断该加还是该减?期望参数量翻两番、显存与训练时间略增;原来欠拟合(loss 降不下去)会有改善,原来已拟合得不错则只换来过拟合与遗忘风险。判据分两个维度:训练集上都不像 → 容量不够,加 r;训练集像了但验证集差 → 过拟合,加数据或减 r、减 epoch,不是继续加 r信号用「训练集 vs 验证集」两个维度判断 → 真调过;答「一般加大点效果更好」→ 没调过target_modules你会怎么设?只加注意力行不行?期望all-linear,必须覆盖 MLP(gate/up/down)。只加注意力明显更差 ——r=256的 attention-only 打不过r=128的 MLP LoRA,参数量还差不多。这是当前最常见的翻车原因:很多老教程和默认配置停在q_proj/v_proj信号答q_proj/v_proj且没有补充说明 → 基本可以判定知识停在 2023 年学习率你怎么设?和全参一样吗?
期望约为全参的 10 倍:SFT 场景 LoRA2e-4/ 全参1e-5~1e-6,RL/GRPO 场景 LoRA5e-5;原因与 LoRA 的1/r缩放和参数化形式有关。用全参的学习率跑 LoRA,表现是 loss 降得极慢、效果平淡,极易被误判成「LoRA 不行」信号说出「提一个数量级」→ 跟上了 2026 口径;答「差不多,2e-5」→ 化石答案,常与q_proj/v_proj成对出现QLoRA 的三个组件各解决什么?它省的到底是哪块显存?
期望NF4压基座权重、双重量化压量化常数(每参数再省约0.4 bit)、分页优化器扛显存尖峰。省的是基座权重那一块(7B:14 G → 3.5 G),不是优化器状态 —— 那一项在 LoRA 时本来就很小。代价是反量化开销让吞吐掉约三成、精度略降信号明确指出「省的是基座不是优化器」→ 真算过显存账;只答「省显存」→ 泛泛只有一张 24 G 卡,业务方要你两周内微调一个 14B 模型,QLoRA 也塞不下你砍什么?
期望先算账:14B 基座 BF16 就 28 G,24 G 卡跑不了 LoRA;QLoRA 基座 7 G、适配器加优化器 2 G,余 15 G 给激活 → 配套:梯度检查点、max_seq_len按真实分位数裁而非默认 4096 → 塞不下按序砍:① 缩序列 ② 降 r 16→8 ③ 换更小基座才是真解 → 两周:先建评测集跑 few-shot 基线,达标就停信号立刻指出「14B 的 BF16 基座 28 G,24 G 卡连 LoRA 都跑不了」→ 最强信号;只会答「上梯度检查点」→ 有招式没优先级
target_modules:答 q_proj/v_proj 就报出了年份。评分要点
- 知道 α/r 是缩放系数,且知道消融时要固定该比值
- r 的选择有判据(数据信息量 / 欠拟合才加),不是背常用值
- 知道
target_modules应为 all-linear 且覆盖 MLP - 知道 LoRA 学习率约为全参的 10 倍
- 知道 epoch 控制在 1–3
- 能说出 QLoRA 的至少两个组件
- 知道 QLoRA 省的是基座权重那一块
- 知道 QLoRA 是降级选项而非默认
- (加分)知道有效 batch < 32 这一条
- (加分)能把"效果不好先查配置再调 r"作为排查顺序说出来