對應原題(Common ‧ Fine-Tuning, Post-Training and Alignment)

  • Compare LoRA, prefix tuning, prompt tuning and full fine-tuning. When would you choose each?
    — Asked at: Sarvam AI, Apple

🎯 什麼情境該想到我

當你「要在一堆 PEFT 方法裡選一個,而它們看起來都差不多」的時候。
★ 關鍵認知:PEFT 的「P」省的是「可訓練參數」,不是計算量、不是啟動值記憶體。 搞錯這點,所有記憶體估算都會錯。

⚙️ 怎麼用

五種方法,五個不同的介入點

輸入 ──▶ [軟提示 token] ──▶ Embedding
                              │
                    ┌─────────▼─────────┐
                    │  Attention         │  ◀── Prefix Tuning:在每層的 K/V 前加向量
                    │   Q K V O          │  ◀── LoRA:在權重矩陣旁加低秩旁路
                    └─────────┬─────────┘
                              │  ◀── Adapter:插入一個 bottleneck MLP
                    ┌─────────▼─────────┐
                    │  FFN               │  ◀── LoRA 也可掛這裡
                    └───────────────────┘
      ▲
   Prompt Tuning:只動最前面的輸入 embedding
方法動什麼介入的層
Full FT全部權重全部
Prompt Tuning前置的軟提示向量只有輸入層
Prefix Tuning每層 attention 的 K/V 前綴每一層
Adapter插入的 bottleneck MLP每一層(串在主路徑上)
LoRA權重矩陣的低秩旁路每一層(並聯在主路徑旁)

★ 對照表

Full FTPrompt TuningPrefix TuningAdapterLoRA
可訓練參數100%~0.01%~0.1–1%~0.5–5%~0.1–1%
表達力★★★★★★★★★★★★★★★★★★
推論額外延遲無小(吃上下文)小(吃 KV)❌ 有(串列多一段)✅ 無(可合併)
吃上下文預算❌✅ 會✅ 會(佔 KV cache)❌❌
可熱插拔多任務❌✅✅✅✅
訓練穩定性高⚠️ 低中高高
小模型上有效嗎✅❌ 要很大才行⚠️✅✅
災難性遺忘⚠️ 嚴重輕微輕微輕微輕微
checkpoint 大小整個模型KB 級MB 級數十 MB數十 MB

各方法的關鍵細節

Prompt Tuning(Lester et al., 2021)
只學一組連續的「軟提示」向量接在輸入前面——不是文字,是直接學出來的 embedding。

⚠️ 最大的限制:論文發現它要到約 10B 以上的模型才追得上全量微調。小模型上明顯較差。
另外它佔用上下文預算(20–100 個 token 的位置永遠被佔走),而且訓練不穩定(對初始化與學習率敏感)。

Prefix Tuning(Li & Liang, 2021)
在每一層 attention 的 K、V 前面加上可學的前綴。

比 prompt tuning 強,因為作用在每一層而不只是輸入層。
代價:前綴佔用 KV cache(見 KV Cache),長度直接加在每個請求的記憶體成本上。

Adapter(Houlsby et al., 2019)
在 transformer 層之間插入小的 bottleneck MLP(降維 → 非線性 → 升維)。

★ 它被 LoRA 取代的關鍵原因:推論延遲。
Adapter 是串在主路徑上的額外計算,無論如何都省不掉。
LoRA 是並聯的低秩旁路,推論時可以直接加回權重(),變回一個普通矩陣——零額外開銷。

在大批次服務下,adapter 那一小段串列計算會實實在在地吃掉吞吐。

其他輕量方法:

  • (IA)³ —— 只學幾個縮放向量(對 K、V、FFN 做逐元素縮放),參數比 LoRA 還少
  • BitFit —— 只訓練 bias 項,參數量 <0.1%。極簡,效果有限

★ 選擇指引

情境選什麼理由
預設LoRA沒有特別理由就選它——表達力夠、無推論開銷、穩定、生態成熟
顯存極度吃緊QLoRA見 LoRA 與 QLoRA
一個底座服務多個客製版本LoRA(不合併,熱插拔)底座只存一份,每個客戶一個幾十 MB 的 adapter
★ 裝置端多任務(Apple 的場景)LoRA adapter 熱插拔手機上底座只能存一份。多個任務 = 多個小 adapter 按需載入。全量微調在裝置端完全不可行
資料量大 + 要深度改變行為 + 資源夠Full FT表達力天花板最高。但要接受遺忘風險與每任務一份完整 checkpoint
極大模型 + 極少樣本Prompt Tuning 可考慮參數最少,但先確認模型夠大
★ 新語言 / 大量新知識(Sarvam 的場景)⚠️ PEFT 可能不夠新語言需要新的詞彙與新的知識,這超出低秩更新的能力範圍。
正解通常是擴充 tokenizer + 持續預訓練,再做 SFT/PEFT

★ 最後那一列是這題的高分點:
能認出「這個任務 PEFT 做不到」比背熟四種方法更重要。
PEFT 適合「調整既有能力」,不適合「灌入大量新知識」(見 工具-微調與RAG的取捨)。

★ PEFT 省的到底是什麼(最常見的誤解)

省了嗎
優化器狀態 + 梯度 + fp32 主權重✅ 這就是 PEFT 省的 14 bytes/param
底座權重❌ 仍要完整載入(QLoRA 靠量化另外省)
★ 啟動值(activation)❌ 完全不省——梯度仍要反向穿過整個網路
前向計算量❌ 幾乎一樣(甚至略多)
訓練速度⚠️ 只快一點(約 20–30%),不是數量級

→ 完整推導見 GPU 記憶體估算。

⚠️ 注意 / 什麼時候不適用

  • PEFT 的比較結果高度依賴任務與模型規模。論文的排名不能直接搬到你的場景——自己跑一次 LoRA vs Full 的小規模對照通常幾小時就有答案。
  • Prompt / Prefix tuning 會吃上下文。長上下文應用要把這個成本算進去。
  • Adapter 在高吞吐服務下有實質成本,不只是「理論上多一點延遲」。
  • 多 adapter 熱插拔需要推論框架支援(vLLM 的 multi-LoRA、S-LoRA 等),不是所有棧都有。
  • 全量微調的 checkpoint 管理很痛。10 個任務 = 10 份完整模型;LoRA 是 1 份底座 + 10 個小檔案。這個營運差異常常比訓練成本更關鍵。
  • 別混用太多方法。同時上 LoRA + prefix + adapter 只會讓除錯變地獄。
  • 先確認真的需要微調。提示工程與 RAG 通常更快更便宜(見 工具-微調與RAG的取捨)。

🧪 我實際套用的紀錄

  • 2026-09-20:從面試題庫展開,尚未實際套用。

🔗 相關