2026-09-19 13 min read -- 次瀏覽
QLoRA 微調微型指南:8GB 顯卡也能練模型
4bit 量化加上 LoRA,用消費級顯卡完成小模型的微調、合併與部署。
📌 本篇文章重點
- QLoRA = 4bit 量化 + LoRA,讓 8GB 顯卡也能微調小模型。
- 微調是為了「學會語氣或任務」,不是「學會所有知識」。
- 用 unsloth 只需一行設定、一顆顯示卡的標配。
- 微調完要「合併 + 量化」才是能拿去跑的成品。
一、為什麼這篇值得看?
「微調模型」聽起來是研究者的事,但有了量化與 LoRA,你的 8GB 遊戲卡也能完成。這篇講的不是理論圖騰,而是一條可重複的實作路線,並說清楚「什麼時候你根本不需要微調」。
二、核心概念,3 分鐘搞懂
| 項目 | 說明 |
|---|---|
| 量化(4bit) | 把權重壓縮,記憶體需求大減,速度略降 |
| LoRA | 只訓練一小撮 adapter 參數,不動全部權重 |
| QLoRA | 兩者相加:可微調,且 8GB 就夠 7B 模型 |
💡 一句話總結
QLoRA = 用「省記憶體」的 4bit 重量 + 「只練一小塊」的 LoRA,把「微調」的門檻砍到消費級顯卡。
三、動手實作:4 步在 8GB 顯卡微調
Step 1
安裝 unsloth 並載入 4bit 模型
Python
pip install unsloth
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
"unsloth/Qwen2.5-7B-bnb-4bit",
load_in_4bit=True,
)
Step 2
準備「instruction 資料集」
資料格式
[
{"instruction": "用一句話安慰失眠的人",
"input": "", "output": "睡不著沒關係,重點是別責怪自己。"},
...
]
⚠️ 資料提醒
100–300 筆高質量範例就夠起步。資料雜亂 = 微調失敗的主因,比參數重要。
Step 3
設定 LoRA 與訓練迴圈
Python
model = FastLanguageModel.get_peft_model(
model,
r=16, lora_alpha=16, target_modules=[
"q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj"],
)
trainer = Trainer(model, args=TrainingArguments(
num_train_epochs=1, learning_rate=2e-4,
per_device_train_batch_size=1, # 8GB 卡的標配
gradient_accumulation_steps=1,
))
trainer.train()
Step 4
合併、量化、部署
Python
model.save_pretrained_merged("my-model-merged")
model.save_pretrained_gguf("my-model-gguf",
quantization_method="q4_k_m")
# 產出的 .gguf 交給 llama.cpp / Ollama 使用
四、什麼時候別用微調
- 只是想要「回答更準」→ 用 RAG 或改 prompt,比微調便宜快。
- 要「記住公司文件」→ 那是 RAG 的場。
- 要「語氣像某個人」→ 微調有意義,但先確認是否真的很必要。
五、常見問題(FAQ)
Q1微調後模型變笨?
常發生在下「越調越大」的資料上。用多數「正常能力」保持資料、少數「新風格」資料,並留驗證集確認一般能力不掉。
Q28GB 一定要調 batch 很小嗎?
是。batch=1 + 梯度累加是標準做法。想要更多背景就調大 gradient_accumulation_steps。
Q3可以拿微調結果商用嗎?
取決於原模型授權。Qwen、Llama 等開源模型多半允許;閉源模型則無法取得。先確認授權再部署。
總結
QLoRA 的意義是「把微調變成大家都能做的動作」:4bit 載入 → LoRA 訓練 → 合併量化 → 部署。先從 100 筆資料的小任務練手,跑通整條線,再談大規模優化。