兩年前在家裡微調 70B 參數模型還是科幻情節。2026 年,有了 QLoRA、FlashAttention-3、出貨 48GB VRAM 的消費級 GPU,這是個週末就做得完的專案 —— 只要你有耐心搞懂各個零件。
這篇是端到端實務。需要什麼硬體、資料格式、實際能跑的超參數值,以及如果你不被警告會吃掉週末的失敗模式。
目標:拿 Llama 3.3 70B Instruct,用 LoRA 適配到你的領域(法律、醫療、客服、什麼都好)。最後會拿到一個小 adapter 檔(~200MB),推論時掛回 base model 上。
硬體:實際需要什麼
2026 年 QLoRA 70B 的誠實最低需求:
- GPU: 1× NVIDIA RTX 5090(32GB)或 1× RTX 6000 Pro Blackwell(96GB)。5090 只能跑 QLoRA 而且很緊。6000 Pro 是舒服選項,full LoRA 跟長序列都跑得動。
- 記憶體: 系統 RAM 至少 64GB。128GB 在 data loading 時順很多。
- 硬碟: base model checkpoint、資料集、中間 checkpoint 加起來要 250GB 空閒,強烈建議 NVMe。
- OS: Linux(Ubuntu 24.04 最佳)。WSL2 能用但效能掉 10-20%。Windows 原生 —— 別試。
沒硬體:RunPod 租 A100 80GB 約 $1.50/hr,H100 約 $2.50/hr。70B 微調在 H100 上一般跑 4-12 小時,總成本 $10-30。
資料集:格式跟大小
第一次微調最常犯的錯:資料不夠,或格式錯。
格式。 2026 標準是 JSONL,每行一個 messages 陣列,OpenAI 風格:
{"messages": [{"role": "system", "content": "..."}, {"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]}
一行一個 example。Axolotl 跟 Unsloth 直接吃這個格式。
大小。 經驗法則:
- 100 個 example:夠教模型「風格」(輸出格式、語氣),不夠教新知識。
- 1,000 個:夠做窄任務適配(分類、抽取、結構化輸出)。
- 10,000 個:真領域專業,模型在真測試題上明顯不同。
- 100,000+ 個:邊際效益對策展成本越來越差。
第一個專案,1,000-3,000 個高品質 example 永遠贏 50,000 個普通的。
品質比數量重要。 1,000 個人工策展的好答案,教模型的東西遠多於 50,000 個 LLM 生成、看起來都微妙地一樣的 example。
2026 工具鏈
四個東西:
- Unsloth(獨立開發者推薦)。比 vanilla transformers 快兩倍、VRAM 更低、LoRA 文件齊全。2026 年的首選食譜。
- Axolotl(認真工作推薦)。設定更彈性、支援更多架構、適合 production 團隊。
- PEFT(HuggingFace)。底下兩個用的 LoRA / QLoRA 實作都靠它。
- bitsandbytes。QLoRA 用的 4-bit 量化。
本文用 Unsloth。
重要的超參數
70B LoRA 實際能跑的值:
- LoRA rank(r): 窄任務用 16,廣域適配用 32 或 64。越高 = 容量越大、VRAM 越多、訓練越慢。從 16 開始。
- LoRA alpha: rank 的 2 倍。r=16 就 alpha=32。控制 LoRA 更新的縮放。
- 目標模組:
q_proj、k_proj、v_proj、o_proj、gate_proj、up_proj、down_proj(所有 linear 層)。2024 年的指南只訓 attention,2025+ 研究顯示 MLP 也訓會明顯提升。 - Learning rate: LoRA 用 2e-4,QLoRA 用 1e-4。loss 爆掉就減半,loss 一直平就加倍試一次。
- Batch size: 每張 GPU 1,gradient_accumulation_steps 設 8-16。等效 batch size 8-16 是甜蜜點。
- Epochs: 1-3。小資料集跑太多 epoch = overfit。盯 eval loss,不掉了就停。
- Max seq length: 從 2048 開始,越長 VRAM 越多。資料需要才加。
- Warmup steps: 總步數 5-10%,避免一開始 loss 爆衝。
跑起來長什麼樣
2,000 個 example 的 Llama 3.3 70B QLoRA 微調,單張 H100:
- VRAM 峰值:約 62GB。
- 每 epoch 時間:約 80 分鐘。
- 總牆鐘時間(3 epoch + checkpoint):約 5 小時。
- 最終 adapter 大小:250MB。
- Train loss 起點 1.4,終點 0.6;Eval loss 終點 0.7。
Loss 數字是參考 —— 真正重要的是模型在你真實測試 prompt 上的行為有沒有變。
怎麼知道真的有用
不要相信 loss 曲線。準備一份 30-50 個沒拿去訓練的 hold-out 測試集,把 base model 跟微調後的模型輸出並排比較。如果在你的真實領域上微調版本沒有「肉眼可見」變好,問題就是資料集,不是訓練。
要看的東西:
- 有沒有一致地照你的輸出格式?
- 有沒有正確使用你領域的詞彙?
- 有沒有忘了怎麼做別的事(catastrophic forgetting)?如果連基本數學都不會了,代表資料太窄。
- 跑通用 benchmark(HellaSwag、MMLU 抽樣 200 題)before / after 比一下,抓 regression。
Catastrophic forgetting 跟怎麼避免
LoRA 部分緩解了這個 —— base 權重沒被動 —— 但推論時 adapter 合併後,跟你微調集差異大的任務還是可能 regression。
緩解:
- 混入通用資料。 訓練資料 10-20% 應該是通用 instruction-following 資料(Tulu、OpenAssistant 抽樣),保留廣域能力。
- 降低 rank。 rank 越高 = 適配越激進 = forgetting 風險越大。窄任務 r=16 比 r=64 安全。
- 不要過訓。 盯 eval loss,不掉了就停。
什麼時候不該微調
大部分「我應該微調這個」的直覺都是錯的。先試這些:
- 更好的 prompt。 大部分窄任務的提升來自 system prompt 裡的 few-shot example,通常免費。
- RAG。 如果問題是「模型不知道我的資料」,95% 的時候 RAG 才是答案。微調不可靠地教事實,它教行為。
- 更大的前沿模型。 如果 Claude 4.7 Opus 或 GPT-5 已經能做你要的事,成本效益通常贏自架微調 70B。
微調時機:(a) 你需要 prompt 強制不了的一致輸出格式,(b) 隱私 / 合規理由要把權重留在本地,(c) prompt 在你特定任務上撞品質天花板而且你有資料能突破。
上線部署
adapter 訓好之後兩條路:
- 把 adapter 合併進 base 權重。 單一合併模型,部署最簡單。失去切換 adapter 的能力。
- adapter 分開放,推論時載入。 vLLM 跟 TGI 等框架支援這個,可以放一個 base model,每次請求換 adapter。
2026 年要 serving,vLLM + 合併模型是 production 級選擇。Self-host vLLM 有專文。
下一步
- Unsloth GitHub 範例目錄。
- QLoRA: Efficient Finetuning of Quantized LLMs(Dettmers et al, 2023)。
- DoRA: Weight-Decomposed Low-Rank Adaptation —— 2024 LoRA 後繼,品質略好。
- 查這些詞:catastrophic forgetting、parameter-efficient fine-tuning、LoRA vs DoRA、axolotl config 範例。