Q4 Q8 FP16 差在哪






最近去社群跟人交流,聊著聊著才第一次認真聽到「模型量化」這個詞——別人在講自己電腦跑的是 Q4 還是 Q8,我只能先點頭,回來補課研究一下。
卡住的點其實很好懂:想把一個開源模型抓下來跑在自己電腦上,打開下載頁,同一個模型底下列了一整排——Q4_K_M、Q5_K_M、Q8_0、FP16,還有一堆看不懂的後綴。全都是「同一個模型」,體積卻從幾 GB 到幾十 GB 不等。到底該點哪一個。如果你也在下載頁前面這樣卡住過,這篇就是寫給你的。
先講在前面:這篇是我補課後的概念整理,重點是把原理講清楚,不會有自己實測的數字(速度、記憶體、回答品質那些不在這篇)。這次先講清楚兩件事:那串 Q4、Q8、FP16 到底在講什麼,以及怎麼照自己電腦的記憶體挑一個跑得動、又不會太笨的版本。一句話的結論先給:塞得下就挑標了 K_M 的平衡款,塞不下就換更小的模型,而不是硬壓到最低。
量化在量什麼
模型的「本體」是一大堆權重(weights,就是訓練完固定下來的那幾十億個數字)。這些數字原本用比較多的位元存——精度高,但檔案大、跑起來吃記憶體。
量化(quantization,把權重壓成更省空間的表示法)做的事很單純:用更少的位元去存每一個權重。位元少了,整個模型的體積跟著縮,載進記憶體的量變小,運算也更快。代價是每個數字被「四捨五入」得更粗,精度掉一點。
一句話:量化是拿「精度」換「體積跟速度」。
Q4、Q8、FP16 那個數字是什麼
關鍵就一個:那個數字≈每個權重用幾個位元存。
- FP16:16-bit 浮點數,一般拿它當「原始精度」的基準(其實上面還有 FP32,但社群多半從 FP16 起算)。最大、最準、最吃資源。
- Q8:每個權重 8 個位元,大約是 FP16 的一半大。
- Q4:每個權重 4 個位元,又比 Q8 少一半。
- 更低的 Q3、Q2 也有,位元再往下砍。
數字越小=存得越省=檔案越小、載入越快,但四捨五入的誤差越大。
至於 Q4_K_M、Q5_K_M 後面那串 K、M、_0、_1——那是不同的量化「配方」(哪些權重壓得兇一點、哪些保留精度)。先不用管細節,同一個位元數裡挑標了 K_M 的,通常就是社群預設的平衡款。
什麼時候會明顯覺得變笨
品質不是跟著位元線性往下掉。實務上大致的體感是:
- Q8 跟 FP16:日常用幾乎分不出來。
- Q4:大多數情況還很好用,是很多人跑本地模型的預設選擇。
- 掉到 Q3、Q2:開始容易講錯、邏輯變鬆,複雜一點的任務就露餡。
會不會「有感變笨」也跟模型大小有關——大模型量化後比較耐撐,小模型本來餘裕就少,壓太兇更容易崩。
這段先講到通則的體感就好,真要在自己機器上排出哪一級開始崩,還是得挑同一個模型的不同版本自己跑一輪才準。
怎麼照自己電腦挑
先抓一個粗估的算法:
模型光是權重要吃的記憶體 ≈ 參數量 × 每個權重的位元數 ÷ 8(換算成 byte)。
拿一個 7B(70 億參數)的模型當例子,純算權重大概是:
- Q4:70 億 × 4 ÷ 8 ≈ 3.5 GB
- Q8:70 億 × 8 ÷ 8 ≈ 7 GB
- FP16:70 億 × 16 ÷ 8 ≈ 14 GB
要提醒的是,這組數字是用公式粗估的「純權重」下限,不是實際載入後的佔用;真的跑起來還要再加上下文(context)、KV cache(模型運作時額外吃的記憶體)跟框架本身的開銷,抓寬一點比較保險。
挑的順序大概是:先看自己有多少可用記憶體(有獨立顯卡看 VRAM(顯卡自己的記憶體),純 CPU 或 Mac 統一記憶體看 RAM(電腦的一般記憶體)),減掉系統本來要用的,剩下的塞得下哪個版本,就從那個位元數裡挑 K_M 的平衡款。塞得下 Q8 就別勉強上 FP16,塞不下 Q4 就往更小的模型換,而不是硬壓到 Q2。
想自己跑的話
實際下載跟切換量化版本,Ollama、llama.cpp、LM Studio 這幾個工具都能做,各有各的上手方式。這篇先把觀念講清楚,實際挑一個版本下來跑,就交給你自己在機器上試。
量化不是把模型變笨的開關,是讓你拿手上這台電腦,換一個跑得動又夠用的檔位。
最近開始做免費的一對一諮詢,幫你把 AI 接進自己的工作流——有需要的話可以約:https://www.dawsonwang.com/
名詞對照(想再往下挖再看)
下載頁還會看到 GGUF、GPTQ、AWQ 這幾個字,簡單分:
- GGUF:一種模型檔案格式,llama.cpp、Ollama、LM Studio 這條線在用,CPU 跟 Mac 也能跑,前面講的 Q4_K_M 這種標示就是它的。
- GPTQ、AWQ:另外兩種量化「方法」,主要跑在 NVIDIA 顯卡上,常見於用 GPU 全速推論的場景。
一般在自己電腦上玩、尤其是 Mac,多半會先碰到 GGUF。