~/blog/llm-101-what-is-quantization

LLM 101 · part 4

[LLM 101] 什麼是量化?Q4、Q8、FP16 到底差在哪

2026-04-105 分鐘閱讀#llm#量化#ollama#入門English
cat --toc

TL;DR

量化就是 AI 模型的 MP3 壓縮。一個 14B 模型的 Q4_K_M 版比原版 FP16 小 75%(8.4 GB vs 28 GB),但品質損失不到 2%。日常使用選 Q4_K_M。記憶體有餘裕就升 Q5_K_MQ6_K。Q2 和 Q3 除非真的沒辦法,不要碰。

白話版:模型名字後面那些亂碼到底是什麼

你每次打開 Ollama 的模型庫Hugging Face,會看到同一個模型列了十幾個版本:Q2_KQ4_K_MQ5_K_SQ8_0FP16。這些檔名看起來像 Wi-Fi 密碼。同一個模型,大小從 2 GB 到 30 GB 都有。到底在幹嘛?

這些其實都是同一個 AI 模型,只是被壓縮成不同的等級。這種壓縮叫做量化,而它是你能在筆電上跑 14B 模型的唯一原因。沒有量化,個人電腦上的 AI 還只會是實驗室玩具。

量化聽起來很可怕 — 你是在把模型腦袋裡的資訊「丟掉一部分」。但它真的有用,而且品質損失比你想的小很多。這篇文章解釋為什麼這樣做可行、怎麼看懂那些亂碼檔名、還有你到底該下載哪一個。


前言

你的手機裡有幾千首歌。原版錄音室檔案加起來應該有幾百 GB,但 MP3 把每首歌壓成幾 MB,你的耳朵幾乎聽不出差別。它的小技巧是:把人耳聽不到的頻率直接丟掉。

AI 模型的量化用的是一樣的技巧,只是對象換成模型的「記憶」。神經網路裡大部分的精度其實沒在做事 — 你可以把數字狠狠地四捨五入,模型照樣會回答得很好。這就是為什麼一個 14B 的模型可以塞進 9 GB 的記憶體,而不是原本的 28 GB。

上一篇我們聊了怎麼選模型大小。這篇放大一個當時講得很快的東西:那些 Q4Q8FP16 的後綴,以及為什麼你不用害怕那些看起來很小的數字。


量化到底在做什麼?

一個 AI 模型,最底層其實就是一份超巨大的試算表,裡面有一堆數字叫做權重(有時候也叫參數,意思一樣)。當一個 7B 模型說「70 億個參數」,它是真的在檔案裡塞了 7,000,000,000 個數字。跑模型 = 把這堆數字一次拿出來做運算。

每個數字用多少 bit 儲存呢?原版模型用的是 16 位元浮點數(FP16 或 BF16)— 你可以想成每個數字有 16 個小開關來表示它的值。這個精度夠細(大約 4 位有效數字),但每個數字要佔 2 bytes。

算一下 7B 模型原版的大小:

  • 70 億個參數 × 2 bytes = 14 GB

這就是模型「原版」的檔案大小。

量化的意思就是用更少的 bit 來存每個數字。 從 16 bit 降到 4 bit,每個數字只需要四分之一的空間:

  • 70 億個參數 × 0.5 bytes = 3.5 GB

同一個模型、同樣的知識、檔案只剩四分之一。這就是為什麼量化對在個人電腦上跑 AI 這麼重要。


為什麼這樣不會把模型搞壞?

這是讓人覺得很神奇的地方,但其實不是魔法。量化能成功有三個原因:

1. 神經網路本來就很「吵」。 模型的權重是靠訓練好幾兆個字學出來的,每一步都帶著梯度噪音。每個權重的「真實值」從來就不是精確的 — 有一大段範圍的數值都能讓模型表現差不多。把它們四捨五入到 4 bit 大部分還是落在那個範圍內。

2. 大部分權重又小又集中。 把任何一個模型的權重畫成長條圖,你會看到一個以 0 為中心的鐘形曲線。聰明的量化演算法(例如 llama.cpp 用的「K-quant」家族)會把相近的權重分組,共享一個縮放係數,讓有限的 4 bit 預算用在最需要精度的地方。

3. 錯誤是隨機的,不是系統性的。 每個權重都有一點點捨入誤差,但這些誤差並不會全部往同一個方向偏。當你在一次回答裡把幾千個權重乘起來,誤差大部分會互相抵消。模型的輸出會微微偏移,但不會壞掉。

音樂的類比在這裡非常貼切。MP3 並不是比 FLAC「笨」— 它只是用更少的 bit 儲存同一首歌,靠的是你的耳朵聽不出那些細節。4 bit 的模型對自己的權重做一樣的事。


解碼檔名:Q4_K_M 這些符號怎麼讀

這些名字看起來很隨便,但其實有一套規則。我們來拆解 Q4_K_M

  • Q = Quantized,量化過的
  • 4 = 平均每個權重用 4 個 bit
  • K = 用比較新的 K-quant 演算法(更聰明的權重分組方式,2023 年在 llama.cpp 裡引入,見 PR #1684
  • M = Medium 中等版本(另外還有 S 小版和 L 大版,用極小的大小差異換一點點品質)

其他常見的後綴:

名字是什麼
Q8_08 bit,舊版演算法(沒有 K 分組)。幾乎無損。
Q6_K6 bit K-quant。品質極高,檔案中等。
Q5_K_M5 bit K-quant 中等版。絕佳平衡。
Q4_K_M4 bit K-quant 中等版。日常王者。
Q4_K_S4 bit K-quant 小版。略小一點、品質略低一點。
Q3_K_M3 bit K-quant 中等版。明顯變差。只有記憶體很緊才考慮。
Q2_K2 bit。救急用。
FP16 / BF16原版,沒壓縮過。
FP88 bit 浮點數。資料中心 GPU 常用(不是 GGUF 格式)。
AWQGPTQ不同的量化方法,GPU 伺服器比較常用(不是 Ollama 的主力)。

如果你只記得一個名字,記 Q4_K_M。當你輸入 ollama run qwen3:14b,Ollama 預設就是下載這個版本,而這是 90% 情況下的正確選擇。


品質階梯

每個等級實際上要付出多少品質代價?下面的數字參考 llama.cpp 的 perplexity 測試(perplexity 是一個「越低越好」的品質分數,跟 FP16 的差距越小,代表品質損失越小):

等級大小比(對 FP16)品質損失白話版
FP16100%0%(基準)原版,檔案超大
Q8_0約 53%< 0.1%跟原版幾乎沒差
Q6_K約 41%約 0.3%發燒友等級,記憶體夠就值得
Q5_K_M約 35%約 0.6%優秀,有餘裕的甜蜜點
Q4_K_M約 30%約 1.5%日常王者,幾乎感覺不到差別
Q3_K_M約 24%約 4%開始掉了,回答會變糊
Q2_K約 18%約 10%+最後手段,明顯變笨

有兩件事值得注意:

  1. FP16 到 Q4_K_M 之間,你只掉了約 1.5% 的品質,卻省下 70% 的檔案。 這是一筆極划算的交易。這就是為什麼 Q4_K_M 是預設值 — 它剛好站在曲線最有利的位置。
  2. Q4 以下,品質就開始往下跳水。 Q3 明顯比 Q4 差,Q2 明顯比 Q3 差。省下的大小越來越小,但損失的品質越來越大。

記憶體速查表

以下是各個等級需要多少記憶體的估算公式。上一篇用的 B × 0.6 是 Q4 版的公式,這裡把全部等級列出來:

等級記憶體公式7B 範例14B 範例30B 範例
FP16B × 2.014 GB28 GB60 GB
Q8_0B × 1.17.7 GB15.4 GB33 GB
Q6_KB × 0.856.0 GB11.9 GB25.5 GB
Q5_K_MB × 0.74.9 GB9.8 GB21 GB
Q4_K_MB × 0.64.2 GB8.4 GB18 GB
Q3_K_MB × 0.453.2 GB6.3 GB13.5 GB
Q2_KB × 0.352.5 GB4.9 GB10.5 GB

另外要留 1-2 GB 給模型「思考」的工作記憶體(模型在跑的時候除了權重以外還需要臨時空間,技術上叫 KV cache,但名字不重要)。

舉個例子:如果你有一台 16 GB 的筆電,扣掉系統大概剩 10 GB 給 AI 用,那 Q4_K_M 剛好能舒服地跑 14B 模型。同一個模型用 FP16 來跑的話,你至少要一台 32 GB 的電腦。


實戰範例:同一個模型的六個版本

把所有東西結合起來看一個真實例子 — 阿里巴巴的 Qwen3 14B。下面的檔案大小是從 Hugging Face 上的 bartowski/Qwen_Qwen3-14B-GGUF repo 直接抄來的,那裡公開了完整的量化 ladder:

檔案大小能跑的機器品質
Qwen3-14B-BF1629.54 GB32 GB Mac、48 GB 顯卡100%(原版)
Qwen3-14B-Q8_015.70 GB24 GB 顯卡、32 GB Mac~99.9%
Qwen3-14B-Q6_K12.12 GB16 GB Mac、24 GB 顯卡~99.7%
Qwen3-14B-Q5_K_M10.51 GB16 GB Mac~99.4%
Qwen3-14B-Q4_K_M9.00 GB16 GB Mac、12 GB 顯卡~98.5%
Qwen3-14B-Q3_K_M7.32 GB12 GB Mac、8 GB 顯卡~96%

注意 Q4_K_M(9.00 GB)到 Q3_K_M(7.32 GB)之間的落差。你省下 1.68 GB,卻多掉了 2.5% 的品質 — 除非你真的塞不下 Q4,這筆交易很差。反過來從 Q4_K_M 升到 Q5_K_M,要多花 1.51 GB 卻只換回 0.9% 的品質 — 除非你在實際使用中感覺得到,也不太划算。

Q4_K_M 那道「懸崖」是真的。 它是預設值是有原因的。

關於 Ollama 官方 repoollama.com/library/qwen3 對 14B 只提供三個 tag — q4_K_M(預設)、q8_0fp16。上面那張完整表格只有在 Hugging Face 的 GGUF repo(例如 bartowski 的那個)才找得到。這算是常態:Ollama 只收最熱門的幾個等級,想要 Q5_K_M 或 Q6_K 就得自己去抓 GGUF 檔。


常見誤解

「Q4 代表模型只剩 FP16 的 25%。」 不對。Q4 的意思是權重只用 25% 的 bit,不是模型只剩 25% 的智商。品質損失通常是 1-2%,不是 75%。

「記憶體允許的話應該選最高品質的版本。」 不一定。一個剛好塞滿記憶體的模型會跑得很慢 — 因為系統在邊緣頻繁換頁。留 2-3 GB 餘裕、選低一階的量化,實際體感常常比較好。

「大模型的 Q4 vs 小模型的 Q8,哪個比較好?」 幾乎一定是大模型的 Q4。14B 和 7B 之間的差距遠大於 Q8 和 Q4 之間的差距。要做取捨的話,優先選更多參數,而不是更高精度。

「GGUF、AWQ、GPTQ 這些量化格式效果都一樣。」 不完全。GGUF 是 llama.cpp 和 Ollama 用的,個人電腦上最常見。AWQ 和 GPTQ 在用 vLLM 跑 NVIDIA 顯卡的時候比較常見。同樣 bit 數下品質差不多,但檔案格式不能互通。


所以我到底該選哪一個?

按用途給結論:

  • 日常聊天、寫作、翻譯Q4_K_M,不用猶豫。這是 Ollama 預設下載的版本,也幾乎永遠是對的選擇。
  • 寫程式、數學、推理 → 記憶體夠就選 Q5_K_MQ6_K。小小的精度誤差對程式碼比對一般文章殺傷力大。
  • 記憶體很夠(32 GB+)Q6_KQ8_0。發燒友模式。你可能感覺不到差別,但也不會吃虧。
  • 記憶體很緊(8 GB 以下)Q4_K_S(Q4_K 的小版),或更好的選擇是換成小一級模型的 Q4_K_M。一個 Q4_K_M 的 7B 永遠勝過 Q2_K 的 14B。
  • 資料中心 GPU 搭 vLLM → 那是另一個世界,看 FP8 或 AWQ,不要用 GGUF。

在 Ollama 裡,當你輸入 ollama run qwen3:14b,預設就是 Q4_K_M。14B 在官方 repo 只有三個 tag:

ollama run qwen3:14b          # Q4_K_M 預設(約 9 GB)
ollama run qwen3:14b-q8_0     # 幾乎無損(約 16 GB)
ollama run qwen3:14b-fp16     # 原版(約 30 GB)

想要 Q5_K_M 或 Q6_K 這種 Ollama 沒收錄的等級,直接從 Hugging Face 的 GGUF repo 抓就好。Ollama 支援這種寫法:

ollama run hf.co/bartowski/Qwen_Qwen3-14B-GGUF:Q5_K_M
ollama run hf.co/bartowski/Qwen_Qwen3-14B-GGUF:Q6_K

同一個問題丟給不同版本,看看你能不能分辨。大部分人分不出來 — 這正是重點所在。


一句話總結

量化就是 AI 模型的 MP3。Q4_K_M 縮掉 70% 檔案,只花不到 2% 品質,這就是為什麼它到處都是預設值。

下一篇我們會聊:什麼是 Context Window?為什麼 AI 在長對話裡會「忘記」前面說過的話?它一次到底能讀多少字?

這是「LLM 101」系列的第四篇。上一篇:那麼多模型,到底該下載哪一個?

常見問題

AI 模型的量化是什麼?
量化就是 AI 模型的壓縮。原本每個參數用 16 個 bit 儲存,量化之後改用 4 個或 8 個 bit。模型大小會縮到原本的 1/2 到 1/4,在同一台電腦上跑得更快,但品質損失小到多數人感覺不出來。就像音樂的 MP3 和 FLAC 的差別。
Q4_K_M 是什麼意思?
Q4_K_M 是 llama.cpp 和 Ollama 最常用的量化格式。Q4 代表每個參數平均用 4 個 bit、K 是比較新的 K-quant 演算法(分組壓縮更聰明)、M 是中等版本(另外還有 S 小版和 L 大版)。日常使用選 Q4_K_M 就對了 — 比原版小 70%,品質損失不到 2%。
用 Q4 會不會讓模型變笨很多?
不會。Q4 跟 FP16 相比,品質分數通常只掉 1-2%,差距遠小於不同大小模型之間的差異(例如 7B 和 14B)。日常對話時,多數人分辨不出一個調校好的 Q4 跟原版有什麼不同。
我該下載哪一個量化版本?
日常聊天、寫作用 Q4_K_M,size 和品質的最佳平衡。記憶體有餘裕就升到 Q5_K_M 或 Q6_K。寫程式或數學任務建議 Q6_K 以上。避免 Q2 和 Q3 — 除非記憶體真的很緊,品質掉得很明顯。