fine-tuning、prompt engineering、RAG 怎么选?
LoRA 怎么做、参数有多少?

英文问法When would you fine-tune instead of using RAG or prompting? · What is PEFT? How does LoRA work? · How many trainable parameters does LoRA add, and how is it initialized? · What does QLoRA change?

考过面经:微软 AS 实习电面问 prompt engineering、fine-tuning、PEFT(1p3a 1165076)· 美国 Research Scientist(不是 AS)问 LoRA 原理和防 catastrophic forgetting(知乎摘要)· Interview Query 指南(catastrophic forgetting)· NVIDIA Senior MLE 电面 2025-10 问 LoRA/QLoRA 的 parameter count 和 initialization(1p3a 1152213)

先弄清楚:每个概念是什么

PEFT
冻住原模型,只训练一小撮新加的参数,每个 task 一份,随时换。
LoRA
假设 fine-tuning 带来的改动 \(\Delta W\) 是 low-rank 的,用两个瘦矩阵的乘积 \(BA\) 表示。
QLoRA
把冻住的 base model 压成 4-bit 存,计算时 dequantize 成 BF16,gradient 只更新 LoRA 参数。例:65B 模型 fine-tuning 的 GPU memory 从 >780GB 降到 <48GB。

30 秒回答

Start with prompt engineering, the cheapest. If the model lacks private or fresh knowledge, add RAG; if it needs a new behavior, format or domain skill, fine-tune. They're often combined. Full fine-tuning is expensive, so we use PEFT. LoRA freezes the pretrained weight and learns a low-rank update BA, with B of size d×r and A of size r×k, scaled by α/r. A is random Gaussian and B is zero, so training starts from the pretrained model. A d×d matrix needs 2dr trainable parameters instead of d². At inference BA merges into W, so there's no extra latency. QLoRA keeps the frozen base in 4-bit NF4.

怎么选

Prompt engineeringRAGFine-tuning(LoRA)
改什么输入(指令、few-shot)输入 + 外部知识weight
适合模型本来就会,只是没说清私有、最新知识,要 citation固定格式、风格、domain 能力
代价最低;占 context建 index、多一步检索要数据和 GPU;可能 catastrophic forgetting

关键公式

LoRA forward

\[ h = W_0 x + \frac{\alpha}{r}\, B A x \] \[ B \in \mathbb{R}^{d\times r},\quad A \in \mathbb{R}^{r\times k},\quad r \ll \min(d, k) \]

\(W_0\) 冻住,只训练 \(A\)、\(B\)。

推理时 merge

\[ W = W_0 + \frac{\alpha}{r}\, BA \]

和原模型一样大、一样快,换 task 时换一组 \(BA\)。

参数怎么算

每个被加 LoRA 的 \(d\times k\) 矩阵多 \(r(d+k)\) 个参数;方阵就是 \(2dr\)。原论文写成 \(|\Theta| = 2\hat L\, d_{\text{model}}\, r\),\(\hat L\) 是加了 LoRA 的矩阵个数。

必答点

追问

为什么 B 初始化为 0?A 和 B 都设 0 行不行?

\(B = 0\) 让训练从原模型出发。记 \(g = \partial L/\partial h\),\(A\) 随机保证 \(\partial L/\partial B = g\,(Ax)^\top \ne 0\),\(B\) 先动起来,\(A\) 接着动。两个都是 0 时,\(\partial L/\partial B\) 和 \(\partial L/\partial A = B^\top g\, x^\top\) 都是 0,永远学不动。

r 和 α 怎么设?加在哪些矩阵上?

原论文 GPT-3 上 \(r = 1\) 就够适配 \(W_q, W_v\)。同样约 18M 参数,加在 \(W_q, W_v\)(\(r = 4\))比只加 \(W_q\)(\(r = 8\))好。\(\alpha\) 设成第一次试的 \(r\) 后不再调。QLoRA 要加在所有 linear layer 上才追得上 full fine-tuning。

LoRA 训练省的是什么?

frozen 参数不用存 gradient 和 Adam 状态。GPT-3 175B 训练的 GPU memory 从 1.2TB 降到 350GB,checkpoint 从 350GB 降到 35MB,训练快约 25%。activation 照样要存。

QLoRA 具体多了什么?

4-bit NormalFloat(NF4)存 base。Double Quantization 把量化常数也量化,从 0.5 降到 0.127 bit/参数。Paged Optimizers 用 unified memory 扛住 GPU memory 峰值。

怎么防 catastrophic forgetting?

混入通用数据 replay。learning rate 更小、step 更少。用 PEFT 冻住原 weight。对原模型输出加 KL penalty,或做 model merging。

来源Hu et al. 2021, LoRA §4.1(p.4,eq. 3、init、\(\alpha/r\)、merge)、§4.2(p.5,显存、checkpoint、25%)、§5.1(p.6,\(|\Theta|\))、§7.1–7.2 Table 5–6(p.10)· Dettmers et al. 2023, QLoRA abstract(p.1)、§1(p.2,780GB → 48GB)、§3(pp.4–5,NF4、DQ 0.127 bit、BF16)、§4(p.6,all linear layers)· Touvron et al. 2023, LLaMA Table 2(p.3)· Lewis et al. 2020 §4.5(p.7,index hot-swapping)