微調(fine-tuning)在 2026 年已經不再等於「把整個模型重訓一遍」。現在多數團隊的預設做法是 PEFT(Parameter-Efficient Fine-Tuning,參數高效微調)——凍結原本的權重,只訓練一小撮外掛的參數。這件事的意義很直接:全量微調一個 7B 模型要 100GB 以上的顯存、動輒數萬美元的 H100 叢集;而 QLoRA 讓你在一張一千五百美元的 RTX 4090 上就能微調同一個模型。這篇把 LoRA、QLoRA、DoRA 這條技術主線講清楚,讓你知道手上這張顯卡到底能做什麼、該選哪一招。
📖 學(核心)
為什麼不直接全量微調
一個模型的權重就是一堆巨大的矩陣。全量微調會更新每一個參數,除了顯存吃不消,還有兩個現實問題:一是「災難性遺忘」(catastrophic forgetting)——模型學了你的新資料,卻把原本的通用能力忘掉;二是每個下游任務都要存一份完整權重,一個 7B 模型就是十幾 GB,十個任務就是十幾份。PEFT 的核心洞見是:適應一個新任務所需要的「改動量」其實很小,不必動到全部參數。凍結底座、只訓練少量新增參數,既省顯存又降低遺忘風險,在資料不多的場景特別有效。
LoRA:低秩的關鍵假設
LoRA(Low-Rank Adaptation)的想法是:微調帶來的權重變化量 ΔW,可以用兩個小矩陣相乘來近似。原本要更新的是一個 d×d 的大矩陣,LoRA 改成訓練 A(d×r)和 B(r×d)兩個瘦長矩陣,其中 r(rank,秩)遠小於 d,常見是 8、16、32。實際被訓練的參數往往只有原模型的百分之一以下。
LoRA 有一個很漂亮的性質:訓練完成後,這兩個小矩陣可以「合併」回原權重,推論時完全沒有額外延遲。這跟某些會在推論時多加一層計算的方法不同,是 LoRA 能在生產環境大量採用的重要原因。設定上你主要調三個旋鈕:r(秩,決定容量)、lora_alpha(縮放,常設為 r 的一到兩倍)、以及要掛在哪些層(target_modules,通常是注意力的 q/k/v/o 投影,近期實務也會一併掛上 MLP 層)。
QLoRA:把底座壓成 4-bit
QLoRA 是 LoRA 加上量化(quantization)。它先把凍結的底座權重壓縮成 4-bit,大幅砍掉顯存佔用,再在上面掛可訓練的 LoRA 適配器,只訓練適配器。效果是誇張的:原本要 48GB 才跑得動的 65B 微調,QLoRA 讓它塞進單張 GPU;用 4-bit 量化時,微調一個 9B 模型甚至只要約 6.5GB 顯存,等於 Google Colab 免費額度就能玩。代價是量化會帶來一點點精度損失,但在多數應用上,換來的可及性遠比那點損失值得。
一句話分辨:當你有 16–24GB 顯存、想要零推論延遲,用 LoRA;當你顯存極度吃緊(消費級顯卡、Colab)或模型很大(30B 以上),用 QLoRA。
DoRA:把權重拆成「大小」與「方向」
DoRA(Weight-Decomposed Low-Rank Adaptation)是 NVIDIA 台灣研究團隊在 2024 年提出、獲 ICML 2024 口頭報告的方法,現在已經整合進 Hugging Face 的 PEFT 套件。它的巧思是把每個權重向量拆成兩部分:「大小」(magnitude,長度)和「方向」(direction)。DoRA 對方向的更新沿用 LoRA 的低秩做法,同時單獨學習大小這個分量。
這樣拆解讓 DoRA 的學習行為更接近全量微調,訓練更穩定、容量更大。實測上,DoRA 在 Llama、LLaVA、VL-BART 等一系列任務上都穩定勝過 LoRA——例如常識推理在 Llama 3 8B 上比 LoRA 高出約 4.4 分。更關鍵的是,跟 LoRA 一樣,訓練完的大小與方向分量可以合併回原權重,推論時零額外開銷,等於是「免費升級版的 LoRA」。
2026 的實務堆疊與訓練後對齊
工具鏈已經很成熟:Hugging Face 的 transformers 提供模型、peft 實作各種適配器、trl 負責訓練流程、bitsandbytes 負責量化。想再快一截,可以用 Unsloth——它以手工優化的 Triton kernel,帶來約 2 倍訓練速度、最多約 70–80% 的顯存節省,且宣稱幾乎不損精度。
微調不只監督式一種。2026 年常見的路線是分層疊加:先用 QLoRA 做 SFT(監督式微調)教會模型任務格式與風格;若你手上有「偏好配對」資料(哪個回答比較好),再疊一層 DPO 做偏好對齊;當你的獎勵訊號可以用程式明確驗證(例如程式碼能不能跑、數學答案對不對),則換成 GRPO 這類強化學習做法。選對這條路線,往往比死磕某個適配器超參更能提升成效。
🧠 記
- PEFT 是 2026 微調的預設:凍結底座、只訓練少量外掛參數,省顯存、降低災難性遺忘。
- LoRA 用兩個低秩小矩陣近似權重變化;可合併回原權重,推論零延遲。三個關鍵旋鈕:
r、lora_alpha、target_modules。 - QLoRA = 4-bit 量化底座 + LoRA;讓消費級顯卡也能微調大模型,代價是輕微精度損失。
- 選擇原則:顯存夠、要零延遲 → LoRA;顯存極緊或模型 30B+ → QLoRA。
- DoRA 把權重拆成「大小 + 方向」,穩定性與容量勝過 LoRA,且同樣零推論開銷。
- 工具鏈:transformers + peft + trl + bitsandbytes;要更快用 Unsloth。
- 對齊路線:QLoRA SFT →(有偏好資料)DPO →(獎勵可驗證)GRPO。
✍️ 實踐
- 定義任務與資料:先寫下你要模型做的一件具體事(例如「把客服對話整理成結構化工單」),準備 200–2000 筆高品質範例,格式統一。資料品質比數量重要。
- 選底座與方法:挑一個開源模型(如 Llama、Qwen、Gemma 的指令版)。看顯存決定招式——24GB 以下先用 QLoRA 4-bit;想更好效果且顯存夠,試 DoRA。
- 建環境:安裝
transformers、peft、trl、bitsandbytes;想省時間直接用 Unsloth 的 Colab 範本起手。 - 設定 LoRA/DoRA:在
LoraConfig設r=16、lora_alpha=32、target_modules掛上 q/k/v/o(進階可加 MLP);用 DoRA 時開use_dora=True。用get_peft_model()包起底座。 - 訓練並看曲線:先跑 1–3 個 epoch,盯 loss 與驗證集表現。過擬合就降 epoch 或降
r;學不動就升r或調高學習率。 - 合併與部署:訓練完把適配器合併回權重再匯出,推論就沒有額外延遲;或保留適配器,讓同一底座熱切換多個任務。
- 進階對齊:若基礎版本已堪用但語氣或偏好還差,收集偏好配對疊 DPO;若任務有可程式驗證的正確答案,改用 GRPO。
🔗 延伸學習
- Hugging Face PEFT:LoRA 概念指南
- NVIDIA 技術部落格:DoRA 介紹
- DoRA 原始論文(arXiv 2402.09353)
- Phil Schmid:2025 年如何微調開源 LLM
💬 問 AI
我想用微調讓開源模型專精於一項任務。
任務描述:{我要模型做的具體事,例如「把法律合約摘要成三點重點」}
我手上的資料:{資料筆數與格式,例如「大約 500 筆合約-摘要配對」}
硬體:{顯卡與顯存,例如「單張 RTX 4090 24GB」}
偏好底座:{例如 Llama 3.1 8B Instruct,或請你推薦}
請幫我:
1. 根據我的顯存判斷該用 LoRA、QLoRA 還是 DoRA,並說明理由。
2. 給我一份可執行的訓練設定(LoraConfig 的 r、alpha、target_modules、學習率、epoch)。
3. 提醒我這個資料量與任務最容易踩的過擬合或災難性遺忘風險,以及怎麼在驗證集上察覺。
4. 若之後想再提升,說明什麼情況該加 DPO、什麼情況該用 GRPO。