AI 工程從零開始|Phase 10 Part 3:LLM 微調 — LoRA、QLoRA 與指令對齊

大多數人認為微調就是「把 LLM 在自己的資料上再跑幾個 epoch」。 真正的答案是:選錯策略會讓 70B 模型比 7B 更差,燒掉 $50,000 的 GPU 時間還讓對齊崩潰。 差距在於你是否理解 LoRA 降低了哪 99.85% 的參數、QLoRA 如何在 48GB 記憶體訓練 65B,以及為什麼 1,000 條高品質資料勝過 100 萬條雜訊。 這篇文章帶你從數學原理到生產工程,建立完整的微調決策框架。


面試情境: 你負責一個醫療文件摘要產品,基礎模型在通用任務表現良好,但在臨床術語和 SOAP 格式輸出上錯誤率高達 34%。你的 GPU 預算是 2 台 A100 80GB,資料團隊提供了 8,000 條標注好的醫生對話。你會選擇 Full Fine-tuning、LoRA 還是 QLoRA?如何評估微調後的對齊品質?


一、核心問題:預訓練模型為什麼需要微調

1.1 預訓練的本質局限

預訓練(Pre-training)讓 LLM 學到了語言的統計規律與世界知識,但它優化的目標是下一個 token 預測(next-token prediction),而非「照我說的做」。這個差距在三種場景下最為明顯:

  1. 格式遵從性:預訓練模型傾向續寫,而非回答。給它 「請列出三個優點:」,它可能輸出 「...這個問題的三個優點分別是...」 然後繼續產生隨機文本,而不是乾淨的清單。

  2. 領域術語精度:通用語料中醫療、法律、金融術語出現比例不到 2%,導致模型在這些領域的 token 機率分布偏移。Llama-3 8B 在 MedQA 上未微調的準確率約 58%,微調後可達 78–82%。

  3. 安全與對齊邊界:預訓練模型缺乏拒絕有害請求的能力,需要 RLHF 或 DPO 等對齊微調來建立邊界。

1.2 微調的代價與風險

問題表徵危險程度
災難性遺忘(Catastrophic Forgetting)通用能力下降 10–40%★★★★★
過擬合(Overfitting)驗證 loss 上升,輸出重複★★★★
對齊稅(Alignment Tax)安全訓練效果消失★★★★
資料污染(Data Contamination)洩漏評測集導致虛假指標★★★
分布偏移(Distribution Shift)生產環境輸入與訓練資料不符★★★

二、三個演進階段(POC / MVP / Scale)

Phase 1:POC(< 5K 條資料 / 單一任務)

┌──────────────────────────────────────────────────────┐
│  Phase 1 微調架構(POC)                              │
│                                                      │
│  ┌────────────┐    ┌──────────────────────────────┐  │
│  │ Base Model │    │  LoRA Adapter(r=8, α=16)   │  │
│  │ Llama-3 7B │───▶│  可訓練參數:~4M(0.06%)    │  │
│  │ 凍結權重   │    │  訓練時間:~2hr on 1×A10G    │  │
│  └────────────┘    └──────────────────────────────┘  │
│                              │                       │
│                              ▼                       │
│                   ┌──────────────────┐               │
│                   │  合併後部署       │               │
│                   │  推理延遲:無增加 │               │
│                   └──────────────────┘               │
│                                                      │
│  成本:~$15–30 GPU 費用                               │
│  問題:泛化能力有限,容易過擬合                        │
└──────────────────────────────────────────────────────┘

新增組件: LoRA adapter、PEFT 套件、基本訓練腳本 可接受的妥協: 無評估基準、單一 epoch、無驗證集分離


Phase 2:MVP(5K–50K 條資料 / 多任務)

┌──────────────────────────────────────────────────────────────┐
│  Phase 2 微調架構(MVP)                                      │
│                                                              │
│  ┌─────────────────┐      ┌──────────────────────────────┐  │
│  │  資料管線         │      │  訓練叢集                     │  │
│  │  ┌───────────┐  │      │  ┌──────────┐ ┌──────────┐  │  │
│  │  │ 原始資料   │  │      │  │  GPU 0   │ │  GPU 1   │  │  │
│  │  │ 清洗去重   │  │      │  │ A100 80G │ │ A100 80G │  │  │
│  │  │ 格式驗證   │  │      │  └────┬─────┘ └────┬─────┘  │  │
│  │  └───────────┘  │      │       └──────┬──────┘        │  │
│  └────────┬────────┘      │     DDP / DeepSpeed ZeRO-2   │  │
│           │               └──────────────┬───────────────┘  │
│           ▼                              │                   │
│  ┌─────────────────┐                    ▼                   │
│  │  評估框架        │      ┌──────────────────────────────┐  │
│  │  task-specific  │◀─────│  QLoRA(4-bit + r=16)        │  │
│  │  benchmark      │      │  可訓練參數:~8M              │  │
│  │  held-out set   │      │  訓練時間:~6hr on 2×A100     │  │
│  └─────────────────┘      └──────────────────────────────┘  │
│                                                              │
│  成本:~$150–400 GPU 費用                                     │
│  問題:仍缺乏 RLHF,對齊邊界脆弱                              │
└──────────────────────────────────────────────────────────────┘

新增組件: 資料清洗管線、多 GPU 分散式訓練、自動評估、模型 checkpoint 管理


Phase 3:Scale(50K+ 條資料 / 多語言多領域)

┌────────────────────────────────────────────────────────────────────┐
│  Phase 3 微調架構(Scale)                                          │
│                                                                    │
│  資料層                   訓練層                    服務層          │
│  ┌───────────────┐       ┌───────────────────┐   ┌─────────────┐  │
│  │ 資料飛輪       │       │  8×H100 叢集       │   │ vLLM 推理   │  │
│  │ ┌───────────┐ │       │  FSDP + ZeRO-3    │   │ Adapter 熱  │  │
│  │ │ 人工標注   │ │──────▶│  LoRA r=64, α=128 │──▶│ 插拔切換    │  │
│  │ │ 合成增強   │ │       │  Flash Attention  │   │ A/B 測試    │  │
│  │ │ 主動學習   │ │       │  Gradient Ckpt    │   └─────────────┘  │
│  │ └───────────┘ │       └───────────────────┘                    │
│  └───────────────┘                │                                │
│                                   ▼                                │
│                       ┌───────────────────────┐                    │
│                       │  對齊管線              │                    │
│                       │  SFT → DPO → 評估      │                    │
│                       │  安全紅隊測試           │                    │
│                       └───────────────────────┘                    │
│                                                                    │
│  成本:~$5,000–50,000 GPU 費用                                      │
└────────────────────────────────────────────────────────────────────┘

新增組件: 資料飛輪、FSDP/ZeRO-3、DPO 對齊管線、安全紅隊、熱插拔 adapter 服務


三、Full Fine-tuning vs 參數高效微調(PEFT)比較

3.1 方法概覽

Full Fine-tuning 更新模型的所有參數。以 Llama-3 70B 為例,這代表 700 億個參數全部需要梯度計算、Adam 優化器狀態(2× 參數量)、梯度緩存,總記憶體需求超過 560GB GPU VRAM——遠超單機的 8×H100 480GB 容量。

PEFT 家族的核心思想:大多數下游任務的適應可以用低秩更新來表達,不需要觸碰原始權重的每一個元素。

方法可訓練參數比例代表技術適用場景
Full Fine-tuning100%充裕算力、大資料集
Adapter Tuning0.5–3%Houlsby Adapter多任務切換
Prefix Tuning0.1–1%P-Tuning v2短文本任務
LoRA0.01–1%LoRA, DoRA主流選擇
QLoRA0.01–1%QLoRA記憶體受限環境
Prompt Tuning< 0.01%Soft Prompt推理時零改動

3.2 為什麼 LoRA 成為主流

2023 年前,業界主要在 Full Fine-tuning 和 Adapter Tuning 之間選擇。LoRA 的突破在於:

  1. 無推理延遲:訓練後可合併 W = W₀ + BA,推理時與原模型完全相同
  2. 記憶體效率極高:7B 模型只需約 16GB VRAM 即可以 LoRA 微調
  3. 多 adapter 切換:生產環境可保留 base model,動態載入不同任務的 adapter

四、LoRA 低秩分解:數學原理與工程實作

4.1 數學基礎

假設預訓練模型的權重矩陣為 W₀ ∈ ℝ^{d×k},Full Fine-tuning 直接學習 ΔW,使得 W = W₀ + ΔW,其中 ΔWW₀ 同維。

LoRA 的假設:ΔW 的本質秩(intrinsic rank)遠低於 d 和 k

因此可以分解:

ΔW = B × A

其中:
  A ∈ ℝ^{r×k},以高斯分布初始化
  B ∈ ℝ^{d×r},初始化為零矩陣(確保訓練開始時 ΔW = 0)
  r ≪ min(d, k),稱為「秩」(rank)

前向傳播時:

h = W₀x + ΔWx = W₀x + BAx
縮放因子:ΔW = (α/r) × BA,其中 α 為超參數

4.2 參數節省量化

以 Llama-3 7B 的 Attention 層為例:

┌─────────────────────────────────────────────────────┐
│  LoRA 參數節省計算(Llama-3 7B)                     │
│                                                     │
│  Q_proj 矩陣:4096 × 4096 = 16,777,216 個參數        │
│                                                     │
│  Full Fine-tuning:                                  │
│    Q + K + V + O = 4 × 16M = 67M 參數               │
│                                                     │
│  LoRA r=16:                                         │
│    每個矩陣:(4096×16) + (16×4096) = 131,072 參數    │
│    4 個矩陣:4 × 131K = 524,288 參數                 │
│                                                     │
│  節省比例:(67M - 0.524M) / 67M = 99.22%            │
│                                                     │
│  整個模型(含所有層):                               │
│    Full FT 可訓練:~7,000M 參數                      │
│    LoRA r=16 可訓練:~10M 參數(0.14%)              │
│    節省比例:99.86%                                  │
└─────────────────────────────────────────────────────┘

4.3 關鍵超參數

超參數典型值影響建議
r(秩)4, 8, 16, 32, 64越大容量越強,記憶體越多從 16 開始調整
α(縮放)等於 r 或 2r學習率的隱含調節設為 r 的 2 倍
目標模組q_proj, v_proj哪些矩陣加 LoRA至少包含 q 和 v
dropout0.05–0.1正則化資料少時設 0.1

實務建議: 同時對 q_projk_projv_projo_proj 套用 LoRA,效果優於僅 q 和 v,而記憶體增加不到 2×。


五、QLoRA:4-bit 量化 + LoRA 的記憶體魔法

5.1 QLoRA 的三個核心技術

QLoRA(2023,Dettmers et al.)讓在消費者硬體上微調 65B 模型成為可能,組合了三項創新:

① NF4(4-bit NormalFloat)量化

不使用傳統的均勻量化(uniform quantization),而是針對神經網路權重的常態分布特性設計的非均勻量化格式,在相同 bit 數下信噪比更高。理論資訊量損失比 INT4 少約 20%。

② 雙重量化(Double Quantization)

對量化常數(quantization constants)本身再做一次量化,每個參數額外節省約 0.37 bits,相當於 65B 模型節省約 3GB VRAM。

③ 分頁優化器(Paged Optimizers)

利用 NVIDIA 的統一記憶體(Unified Memory),將 Adam 優化器狀態從 GPU 換頁到 CPU RAM,避免處理超長序列時的 OOM(Out of Memory)崩潰。

5.2 記憶體需求對比

┌─────────────────────────────────────────────────────────────┐
│  不同方法訓練 65B 模型的 GPU 記憶體需求                       │
│                                                             │
│  Full Fine-tuning(BF16)                                   │
│  ████████████████████████████████████████  780 GB          │
│  需要 10× A100 80GB                                         │
│                                                             │
│  LoRA(BF16 base)                                          │
│  ██████████████████████████████████        640 GB          │
│  需要 8× A100 80GB                                          │
│                                                             │
│  QLoRA(NF4 base + BF16 adapter)                           │
│  ████████████                              48 GB           │
│  需要 1× A100 80GB(或 2× RTX 4090)                        │
│                                                             │
│  QLoRA 相比 Full FT 節省:94% GPU 記憶體                     │
└─────────────────────────────────────────────────────────────┘

5.3 QLoRA 的代價

QLoRA 不是免費的午餐:

  • 訓練速度降低 30–40%:量化/反量化操作增加 compute overhead
  • 精度輕微下降:相比 BF16 LoRA,通常下降 0.5–2 個百分點
  • 合併複雜度增加:推理前需要反量化 base model 後才能合併 adapter

在記憶體充足的情況下(如 2× A100 80GB 訓練 7B),優先選擇 BF16 LoRA;只有當 GPU 記憶體成為硬性約束時,才選 QLoRA。


六、指令資料品質:LIMA 1000 條 vs 百萬噪音資料

6.1 LIMA 論文的震撼發現

2023 年 Meta 的 LIMA 論文(Less Is More for Alignment)用 1,000 條精心選擇的指令資料微調 LLaMA 65B,在人類偏好評估中擊敗了用 52K 條 Alpaca 資料訓練的版本。

關鍵結論:資料品質 > 資料數量

1,000 條高品質資料的核心特徵:

  • 多樣性:覆蓋不同任務類型、風格、長度
  • 無歧義性:每條資料的預期輸出是明確的
  • 一致性:風格和格式統一,建立清晰的「模型個性」

6.2 資料品質篩選標準

維度低品質訊號高品質訊號
回應長度< 50 tokens 的空洞回應200–800 tokens,有結構
指令清晰度模糊、多重解釋單一明確目標
知識密度重複套話、無資訊量具體事實、可驗證
格式一致性混合語言、格式跳變統一的 Markdown 或純文本
去重n-gram 重複率 > 20%MinHash 相似度 < 80%

6.3 合成資料的工程實踐

當標注預算不足時,可以用強模型生成合成資料:

1# 典型的自我指令(Self-Instruct)循環
2# 1. 種子任務(seed tasks):50–100 條人工撰寫的高品質範例
3# 2. 指令生成:讓強模型基於種子任務生成新指令
4# 3. 回應生成:讓強模型回應新指令
5# 4. 品質過濾:ROUGE 去重、長度過濾、人工抽檢 5–10%
6
7# 重要:合成資料需要與真實資料按 3:7 或 4:6 混合
8# 純合成資料訓練會導致「幻覺循環」——模型學到模型的偏差

實務數字: 8,000 條領域資料 + 2,000 條通用指令(防止災難性遺忘)通常是 7B 模型的甜蜜點,再加更多資料帶來的邊際收益遞減。


七、微調陷阱:災難性遺忘 / 過擬合 / 對齊稅

7.1 災難性遺忘

症狀: 微調後模型在目標任務表現提升,但通用 benchmark(如 MMLU、HellaSwag)下降 15–40%。

根本原因: 梯度更新過度強調新資料的分布,覆蓋了原始預訓練的知識表示。

解決策略:

  1. 混合通用資料:在微調資料集中加入 10–20% 的通用指令資料(如 OpenHermes、ShareGPT 子集)
  2. EWC(Elastic Weight Consolidation):對重要參數施加正則化懲罰,阻止其大幅偏移
  3. 降低學習率:LoRA 微調建議 lr = 2e-4;Full Fine-tuning 建議 lr = 1e-5 到 5e-5,比預訓練小 100 倍以上
  4. 少 epoch:1–3 個 epoch 通常足夠;超過 5 個 epoch 幾乎必然過擬合

7.2 過擬合的診斷

訓練 loss 曲線的危險訊號:

正常:          過擬合:
   \             \
    \             \___訓練 loss 持續下降
     \_______      \
   驗證 loss         ↑
   同步下降        驗證 loss 在第 2 epoch 後上升

監控指標:

  • 訓練 loss vs 驗證 loss 分歧 > 0.3:立即停止
  • 輸出多樣性下降(temperature=1.0 下輸出幾乎相同):過擬合警示
  • ROUGE-L 在驗證集上達到 0.95+:資料集太小或訓練過長

7.3 對齊稅(Alignment Tax)

進行 SFT(Supervised Fine-tuning)時,若訓練資料中包含可能觸發安全拒絕的話題,模型的安全對齊邊界可能被削弱。這在醫療、法律等領域尤為危險。

診斷方法: 訓練後跑紅隊(red-teaming)測試集,測試已知的越獄提示是否仍然有效拒絕。

緩解方法: 在 SFT 資料中混入安全拒絕樣本(建議 3–5%),並在 SFT 後接 DPO(Direct Preference Optimization)來重新強化安全邊界。


八、為什麼選 X 不選 Y(6 個決策表)

決策 1:LoRA vs Full Fine-tuning

維度LoRAFull Fine-tuning
GPU 記憶體(7B)~16 GB~120 GB
訓練速度基準慢 2–3×
最終精度與 FT 相差 < 2%最高上限
多任務切換支援熱插拔需多份模型
適合場景資料 < 100K、預算有限大資料集、精度敏感

Flip Condition: 當你有 500K+ 高品質資料、充足的 H100 預算,且目標任務與預訓練分布差異極大(如特定程式語言、罕見語言),Full Fine-tuning 的優勢才開始顯現。


決策 2:QLoRA vs BF16 LoRA

維度QLoRA(NF4)BF16 LoRA
GPU 記憶體節省 60–70%基準
訓練速度慢 30–40%基準
精度損失0.5–2%無損
合併難度需先反量化直接合併
適合場景< 4× A100、訓練 13B+記憶體充足時

Flip Condition: 若你有 4× A100 80GB 訓練 7B,直接用 BF16 LoRA;記憶體不足或訓練 34B+ 時改 QLoRA。


決策 3:SFT vs DPO

維度SFTDPO
資料格式指令 + 回應偏好對(chosen/rejected)
標注成本低(單一回應)高(需比較兩個回應)
對齊效果行為模仿偏好學習
安全性需額外設計天然強化安全邊界
適合場景初次領域適應安全對齊、風格精調

Flip Condition: 初次微調用 SFT;若 SFT 後仍有安全問題或風格不一致,接 DPO。兩者不互斥,通常 SFT → DPO 串聯使用。


決策 4:r=16 vs r=64(LoRA 秩選擇)

可訓練參數(7B)適合場景風險
r=4~2M極少資料(< 1K)容量不足
r=16~8M5K–50K 資料平衡點
r=32~16M50K+ 資料輕微記憶體增加
r=64~32M複雜多任務接近 Full FT 效果/成本

Flip Condition: 資料量超過 100K 且任務複雜度高(如代碼生成),r=64 帶來的提升才足以補償記憶體增加。


決策 5:單機訓練 vs 多機分散式

維度單機(4× A100)多機(8× A100 × 2)
設定複雜度高(NCCL、網路頻寬)
適合模型大小< 30B30B–70B
訓練時間(7B)~4hr~1.5hr
通訊瓶頸NVLink(高速)InfiniBand(較慢)
適合場景快速迭代、實驗大模型、生產訓練

Flip Condition: 7B 模型、QLoRA 方案在單機 4× A100 即可舒適訓練;只有 70B+ 或需要縮短實驗週期時才值得投入多機協調的複雜度。


決策 6:評估用 benchmark vs 人類偏好

維度Benchmark(自動)人類偏好評估
成本幾乎為零每次 $500–5,000
速度分鐘級天級
覆蓋面特定能力整體使用體驗
遊戲化風險高(訓練集洩漏)
適合場景迭代篩選最終上線決策

Flip Condition: 開發迭代階段用 benchmark 快速篩選;準備上線時必須加入人類評估或 LLM-as-judge,特別是安全性測試無法被 benchmark 完全覆蓋。


九、系統效應(量化比較表)

9.1 訓練指標對比(以 Llama-3 7B 為基準)

指標Full Fine-tuningBF16 LoRA (r=16)QLoRA (r=16)
GPU 記憶體~120 GB~28 GB~16 GB
所需硬體2× A100 80GB1× A100 80GB1× RTX 4090 24GB
訓練速度(token/s)基準 1×1.3×0.9×
訓練成本(2 epoch/50K)~$200~$80~$60
最終精度(相對 FT)100%98.2%96.8%
可合併推理是(合併後)需先反量化
推理延遲影響無(合併後)無(合併後)

9.2 資料規模 vs 方法選擇的最佳實踐

┌────────────────────────────────────────────────────────────────┐
│  資料規模 vs 推薦方法矩陣                                       │
│                                                                │
│  資料量     GPU 充足(4× A100+)    GPU 受限(< 2× A100)       │
│  ─────────────────────────────────────────────────────────── │
│  < 5K       LoRA r=8, lr=2e-4       QLoRA r=8                 │
│  5K–50K     LoRA r=16, lr=2e-4      QLoRA r=16                │
│  50K–500K   LoRA r=32 或 Full FT    QLoRA r=32                │
│  > 500K     Full Fine-tuning        LoRA r=64(多 GPU)        │
└────────────────────────────────────────────────────────────────┘

9.3 Before vs After 效能比較(醫療摘要案例)

指標未微調 Llama-3 8BLoRA 微調後QLoRA 微調後
SOAP 格式遵從率23%89%87%
臨床術語錯誤率34%6%7%
幻覺率(人工評估)18%4%5%
推理延遲(P99)320ms320ms340ms
GPU 記憶體(訓練)28 GB16 GB
訓練成本(8K 樣本)~$85~$55

十、面試答題要點(RKK)

面試問題: 醫療文件摘要產品,8,000 條標注資料,2× A100 80GB,選擇 Full Fine-tuning、LoRA 還是 QLoRA?

「我會選擇 BF16 LoRA,秩設為 r=16、α=32,目標 q/k/v/o 四個 Attention 矩陣。原因是 2× A100 80GB 訓練 Llama-3 8B 的 Full Fine-tuning 記憶體恰好夠用,但 LoRA 將可訓練參數從 80 億降到約 800 萬(降低 99.9%),訓練速度快 1.3×,且精度損失在 2% 以內。8,000 條資料量對 Full Fine-tuning 而言偏少,容易過擬合,LoRA 的隱式正則化效果更適合這個規模。資料配方上,我會用 7,000 條醫療資料 + 1,000 條通用指令防止災難性遺忘,以 1–2 個 epoch 為上限。評估指標上,先用 ROUGE-L 和格式遵從率做自動評估篩選 checkpoint,上線前再做 100 條人工盲評。若後續安全測試發現對齊邊界被削弱,在 SFT 後接 DPO 強化拒絕行為,而不是重新訓練整個 SFT。」

記憶要點(RKK):

  1. R(Reason):99.9% 參數節省 + 8K 資料量適合 LoRA 的隱式正則化
  2. K(Key Decision):r=16 是 8K 資料規模的甜蜜點;7K 領域 + 1K 通用防遺忘
  3. K(Key Number):LoRA 精度損失 < 2%、訓練成本 ~$85、SFT→DPO 串聯處理對齊

十一、系列導航

本文是「AI 工程從零開始」系列 Phase 10 的第 3 篇。

上一篇: Phase 10 Part 2:RAG 系統設計 — 向量資料庫、檢索策略與評估框架

下一篇: Phase 11 Part 1:LLM 推理優化 — vLLM、PagedAttention 與批次策略


系列索引:

  • Phase 1–3:基礎建設(環境、資料管線、特徵工程)
  • Phase 4–6:模型訓練(傳統 ML、深度學習、評估框架)
  • Phase 7–9:部署工程(服務化、監控、A/B 測試)
  • Phase 10:LLM 工程(Prompt 工程、RAG、微調 ← 目前)
  • Phase 11:LLM 推理優化(即將推出)
Yen

Yen

Yen