你如果在本機跑過開源 LLM,大概看過 llama-3-70b-Q4_K_M.gguf 這種檔名,然後想過 Q4 是什麼意思。它是「需要 4 萬美元的 GPU」跟「只要一張 1200 美元的 RTX 4090」的差別。量化是讓非百萬富翁也能用本地 LLM 的技術。這篇講它實際在做什麼、什麼時候會失靈。
模型存了什麼
現代 LLM 是幾億到幾千億個數字,叫參數或權重。預設每個是 16-bit 或 32-bit 浮點數。一個 70B 參數的 16-bit 模型光載入就要 140GB 記憶體(2 bytes × 70B)。這是問題,因為:
- 消費級 GPU 像 RTX 4090 有 24GB VRAM
- 專業 GPU 像 H100 有 80GB
- 跑沒量化的 70B 要 4-8 張 H100,買起來 10 萬美元以上
洞見:每個數字 16 或 32 bit 大部分是 LLM 推論用不到的精度。你可以把每個數字換成很小的近似值,模型大致還能用。
量化實際在做什麼
量化是降低模型權重位元寬度的過程。最常見的等級:
- FP16 / BF16(16-bit) — 標準「沒量化」格式。每參數 2 bytes。
- INT8(8-bit) — 一半大小,多數任務保留 95-99% 原始品質。
- INT4 / Q4(4-bit) — 四分之一大小,用現代技術保留 90-97% 品質。
- Q3 / Q2 — 八分之一或更小,品質下降明顯,只在超大模型或記憶體極緊時用。
70B 模型:
- BF16:140GB
- INT8:70GB
- Q4_K_M:約 40GB
- Q3_K_M:約 32GB
40GB 塞進兩張 RTX 3090(二手 1500-2000 美元)或一張 RTX 6000 Ada(7000 美元),不用買 10 萬美元 H100 跑 BF16 版。
怎麼運作的(不講數學)
單純量化是:「找出這組數字裡的最小最大值,然後把每個換成 16 個(4-bit)等距值裡最近的那個」。快速但有損。
現代量化聰明很多。GPTQ、AWQ、GGUF Q-types(Q4_K_M、Q4_K_S、Q5_K_M 等)這類技術會做這些事:
- 模型不同部分用不同精度量化,把最敏感的層保持較高位元
- 在一個 tensor 裡用「混合精度」 — 把相似權重分組,每組獨立量化
- 每組用 scaling factor 較好保留動態範圍
- 用真實資料的小樣本校準量化以最小化誤差
結果是 Q4_K_M 量化在基準測試上通常只比原始 BF16 模型損失 1-3 個百分點。聊天用,常常感覺不出差別。對推到模型能力邊緣的程式或推理,有時候感覺得出來。
後綴是什麼意思
看到 Q4_K_M、Q5_K_S、Q4_0,llama.cpp 用的 GGUF 格式大致解碼:
- Q4 / Q5 / Q6 / Q8 — 位元寬度:4、5、6、8 bit
- K — 現代 k-quants,用混合精度區塊(同等大小品質比舊量化高很多)
- S / M / L — K-quants 的小 / 中 / 大變體。大一點意味稍高大小和品質。
- 0 / 1 — 舊的 legacy 量化類型(Q4_0、Q4_1)。新用途避開;K-quants 嚴格較好。
經驗法則:Q4_K_M 是最佳通用 4-bit。Q5_K_M 多 25% 大小換稍高品質。Q8_0 對多數任務跟 BF16 基本無法區分。Q3 以下是記憶體極緊時的最後手段。
量化哪些時候有效、哪些時候會壞
有效:
- 30B+ 模型量化通常很優雅 — 權重裡有足夠冗餘
- 標準聊天、摘要、翻譯、寫程式 — 品質損失小
- 推論用量化(典型情況)比訓練用量化寬容很多
會壞:
- 小模型(7B 以下)常常在激進量化下明顯受損。1.5B 模型的 Q4 可能比同模型的 Q8 差很多。
- 極長 context 生成 — 量化誤差會在數千 token 上累積
- 推到模型能力邊緣的任務(困難數學、新穎推理) — 損失 2-3% 準確率可能讓沒量化能成功的場景失敗
- MoE 模型 — 看 MoE 那篇講為什麼這比較難
- 視覺和音訊模型 — image token 有時候比文字對量化更敏感
那低精度訓練呢?
不同主題,術語有重疊。「混合精度訓練」(BF16 + FP32)幾年來就是標準。「FP8 訓練」現在前緣實驗室在用(DeepSeek-V3、Llama 3.1)大幅降低訓練成本。INT8 / INT4 訓練大致不行 — 品質損失太多。你看到的「INT4 量化」幾乎都是訓練後量化,不是從頭用 INT4 訓練。
什麼時候不要量化
生產 API 服務、每個百分點品質都重要、你有 GPU,跑 BF16。前緣實驗室內部都這樣,即使對外提供量化版。
做研究、量測小效應時,量化會干擾結果。比較模型時,在同一精度等級比較。
極小模型(3B 以下)目標邊緣裝置 — 有時候一個小但沒量化的模型比一個大但 Q4 的模型好。兩個都測。
關鍵推理(醫療、法律、財務決策) — 即使 1-2% 品質損失也重要。不要量化。
替你處理這些的工具
- llama.cpp — 量化模型的主流推論引擎。讀 GGUF 格式。CPU、GPU、或 Apple Silicon 都跑得動。
- Ollama — llama.cpp 的包裝,用友善 CLI 下載和跑模型。預設 Q4_K_M。
- LM Studio — 桌面 app,可以並排比較不同量化等級。
- vLLM — 生產級推論伺服器,支援 AWQ 和 GPTQ 做高吞吐量服務。
- Hugging Face transformers + bitsandbytes — Python 裡載入時 INT8/INT4 量化。
多數使用者只需要知道:挑 Q4_K_M,除非有不挑的理由。
下一步
- 怎麼挑自架技術棧 — 本地跑量化模型的實際設置
- MoE 解釋 — 推論成本的另一個大架構槓桿
- Speculative decoding — 又一個讓推論更快的方法