要理解量化,你需要先理解它在壓縮什麼。神經網路的「知識」儲存在數十億個數值參數(權重)中,每個都是一個浮點數。在訓練期間,它們通常以 FP32(32 位元浮點數)或 BF16(bfloat16,16 位元)儲存。一個 70 億參數的模型在 BF16 下佔 7B × 2 位元組 = 14GB 記憶體。量化就是降低每個權重的精度 —— 用更少的位元來表示。在 INT8(8 位元整數)下,同一個模型縮小到約 7GB。在 INT4(4 位元)下,約 3.5GB。關鍵洞見是神經網路權重具有驚人的冗餘性 —— 你實際上不需要 16 位元精度就能有效表示它們。大多數權重聚集在零附近,可以用粗糙得多的表示來近似。
你會遇到的主要量化格式各採用不同的技術方法。GPTQ(GPU 優化的訓練後量化)是最早的實用方法之一 —— 它分析權重在實際推理時如何相互作用(使用校準資料),然後以最小化誤差傳播的方式量化。AWQ(感知啟動值的權重量化)在此基礎上改進,聚焦於對模型品質最重要的少數權重,以更高精度保護它們。GGUF 是 llama.cpp 使用的格式,設計用於在 CPU 和 GPU 上進行靈活的混合精度量化。GGUF 檔案的命名慣例告訴你得到的是什麼:Q4_K_M 表示使用 K-quant 方法的 4 位元量化,中等品質。Q5_K_M 是 5 位元。Q2_K 是激進的 2 位元(品質損失明顯)。Q8_0 是 8 位元(幾乎無損)。
量化的品質損失是真實的,但通常被高估。從 BF16 到 Q8(8 位元)基本上是免費的 —— 基準測試通常顯示標準評估上不到 0.5% 的退化。Q5_K_M 仍保留了模型的大部分能力,通常是本地推理的甜蜜點。Q4_K_M 是你開始注意到微妙差異的地方:模型在數字處理上可能稍欠精確,偶爾在非常長的輸出上失去線索,或在遵循複雜指令時略差。低於 4 位元,品質退化更為明顯 —— Q2 和 Q3 量化可以使模型在推理任務上明顯變笨。一般經驗法則是:日常使用量化到 Q4_K_M 或 Q5_K_M,只有在 VRAM 實在裝不下時才用更低的量化。
量化有第二個常被忽略的維度:它不只是節省記憶體,還使推理更快。如果你認為量化運算是「近似的」因而更慢,這會有點反直覺。但對於 LLM 推理,token 生成時的瓶頸是從 VRAM 讀取模型權重(記憶體頻寬),而非計算本身。Q4 模型比 Q8 少一半的資料需要讀取,所以 token 產出大約快一倍 —— 前提是你的推理引擎正確支援量化運算。這就是為什麼 llama.cpp 在桌面 GPU 上運行 Q4_K_M 模型有時可以匹配雲端 API 的每秒 token 數:量化模型在每單位硬體上確實更高效。代價始終相同 —— 你用一些品質換取速度和可及性 —— 但對許多應用來說,這是非常值得的交換。
值得了解的最新發展是量化感知訓練(QAT),模型從一開始就在考慮量化的前提下訓練,而非事後量化。Meta 發布了 Llama 模型的 QAT 版本,在相同位元寬度下優於事後量化的對等版本。這種方法產出的模型「天生」就能在低精度下運作,而非被強加低精度,這很可能是本地推理持續增長下該領域的發展方向。