一句話解釋

Quantization(模型量化)是把 AI 模型裡的數字從高精度壓成低精度,讓模型佔用更少記憶體、跑得更快,但代價是微量的品質下降。

白話解釋

想像你手上有一張超高解析度的照片,檔案大到手機存不下。你可以把解析度降一點,從 4K 壓到 1080p,檔案變小很多,肉眼看起來幾乎沒差。模型量化做的事情類似。AI 模型裡面存了幾十億個數字(參數),每個數字原本用 32 位元或 16 位元來存。量化就是把這些數字壓到 8 位元甚至 4 位元。數字的精確度下降了一點,但模型的整體行為幾乎不變。

為什麼要這樣做?因為一個 70B 參數的模型,如果用 FP16(16 位元)儲存,需要 140GB 的記憶體。這意味著你需要兩張以上的高階 GPU 才跑得動。但如果量化到 4 位元,同一個模型只需要大約 35GB,一張消費級顯卡就能跑。

另一個常見的比喻是地圖。你手上有一張精確到每棟建築、每棵樹的超高解析度地圖。如果你只是要從台北開車到台中,用一張只標示主要幹道和交流道的簡化地圖就夠了。量化就是在做這件事:把模型裡「不需要那麼精確」的數值簡化,節省空間和計算量,同時保留模型的核心能力。

對於個人使用者來說,量化的直接好處是你可以在自己的電腦上跑原本需要昂貴伺服器才能運作的 AI 模型。對於企業來說,量化可以降低部署成本,讓同一台伺服器服務更多的使用者。

量化怎麼運作

AI 模型的參數本質上就是一堆浮點數(小數)。訓練完成後,這些數字決定了模型的行為。原始的訓練通常用 FP32(32 位元浮點數),這代表每個數字可以精確到小數點後好幾位。但很多時候,這麼高的精度其實用不到。模型裡大量的數字差異很小,用比較粗略的方式表示也不影響最終輸出。

量化的過程可以分幾個步驟來理解。首先,分析模型裡每一層的數字分布範圍。每一層神經網路的參數都有自己的數值範圍,有些層的參數集中在 -0.01 到 0.01 之間,有些層的範圍可能是 -1.0 到 1.0。了解這些分布範圍是量化的基礎。

接著,把這個範圍映射到目標精度的數字區間。比如 INT8 只有 256 個可能的值(-128 到 127),系統會把原本的浮點數四捨五入到最接近的整數表示。這個映射過程需要計算 scale(縮放因子)和 zero-point(零點偏移),把原始的浮點數範圍對應到整數範圍。

量化可以分為兩大類:訓練後量化(Post-Training Quantization, PTQ)和量化感知訓練(Quantization-Aware Training, QAT)。PTQ 是在模型訓練完成後直接對參數做量化,操作簡單但品質損失可能較大。QAT 則是在訓練過程中就模擬量化的效果,讓模型在訓練時就學會「在低精度下也能正常工作」。QAT 的品質通常比 PTQ 好,但需要額外的訓練時間和資源。

不同精度等級的比較

不同的精度等級效果不同,選擇時需要根據你的硬體和品質需求做權衡:

FP32(32 位元浮點數)是訓練時的標準精度,每個參數佔 4 bytes。這是最高品質但也最佔空間。一個 7B 參數的模型用 FP32 儲存需要 28GB。在推論階段幾乎沒有人用 FP32,因為它太佔記憶體了,而且推論速度也比低精度格式慢。

FP16 / BF16(16 位元)是目前推論的主流精度,每個參數佔 2 bytes。品質幾乎沒有損失,是大多數雲端 API 使用的格式。FP16 和 BF16 的差別在於數值範圍:BF16 犧牲了一些精度換取更大的數值範圍,在深度學習中通常表現更穩定。Google 的 TPU 和 NVIDIA 的 A100 以上 GPU 都原生支援 BF16。

INT8(8 位元整數)每個參數佔 1 byte,大小是 FP16 的一半。在多數任務上品質仍然很好,但在需要高精度數學計算的場景可能會有微量偏差。INT8 是企業部署中最常用的量化等級,因為它在品質和效率之間取得了很好的平衡。NVIDIA 的 TensorRT 和 Intel 的 OpenVINO 都有成熟的 INT8 最佳化支援。

INT4(4 位元整數)每個參數只佔 0.5 bytes,是目前本地部署最常用的格式。品質會有可察覺的下降,特別是在複雜推理和長文本生成時。但對一般對話和簡單任務來說,表現仍然堪用。INT4 是讓個人使用者在自己電腦上跑大模型的關鍵技術。

INT2(2 位元整數)是目前的極端壓縮。品質下降非常明顯,大部分場景不建議使用。但在極端資源受限的環境下(例如嵌入式裝置),INT2 仍然有其研究價值。

精度 每參數大小 7B 模型大小 70B 模型大小 品質保留 推論速度
FP32 4 bytes 28GB 280GB 100% 最慢
FP16/BF16 2 bytes 14GB 140GB 99%+
INT8 1 byte 7GB 70GB 95-99% 更快
INT4 0.5 bytes 3.5GB 35GB 90-95% 最快
INT2 0.25 bytes 1.75GB 17.5GB 70-85% 最快

GGUF 與本地部署生態系

如果你想在自己的電腦上跑 AI 模型,GGUF 是你最常遇到的格式。

GGUF 是 llama.cpp 專案定義的模型格式,專門為 CPU 和一般消費級 GPU 優化。它把量化後的模型打包成一個檔案,可以直接在本機執行,不需要網路連線,也不需要付 API 費用。GGUF 的前身是 GGML 格式,GGUF 在 2023 年底推出後迅速成為社群標準,因為它解決了 GGML 在元資料管理和版本相容性方面的問題。

常見的量化等級命名是 Q4_K_M、Q5_K_S、Q8_0 這類代號。數字代表位元數,後面的字母代表量化的方法和設定。具體來說:

Q4_K_M 是品質和大小的甜蜜點,最多人用。K 代表使用了 k-quant 方法,M 代表中等品質設定。這個版本會對模型中比較重要的層保留更高精度,不太重要的層壓得更小。

Q5_K_M 品質更好一些但檔案也大一些。如果你的記憶體夠用,Q5 比 Q4 的品質提升是值得的,特別是在中文和程式碼生成的場景。

Q8_0 品質最接近原始模型但需要更多記憶體。如果你有一張 24GB 以上的顯卡,跑 7B 模型用 Q8 可以得到接近 FP16 的品質。

Q2 和 Q3 太粗糙,通常不建議使用。除非你的硬體真的非常受限,否則壓到這麼低的精度會讓模型的回答品質明顯下降,特別是在中文場景。

在台灣,很多開發者用 Ollama 搭配 GGUF 模型在本機跑 AI。Ollama 是一個簡化本地模型部署的工具,你只需要一行指令就能下載和執行量化模型。好處是完全不用擔心資料外洩,因為所有東西都在你的電腦裡。缺點是品質和速度都不如雲端 API。對於需要處理機密資料的場景(例如法律文件、醫療紀錄),本地部署搭配量化模型是一個兼顧隱私和成本的選擇。

另一個在台灣社群中常見的工具是 LM Studio。它提供圖形化介面,讓不熟悉命令列的使用者也能輕鬆下載和執行量化模型。LM Studio 支援所有 GGUF 格式的模型,並且提供了類似 OpenAI API 的本地端點,讓你可以用現有的程式碼直接連接本地模型。

常見的量化工具與方法

GPTQ 是最早流行的 GPU 量化方法,速度快但需要校準資料集。它特別適合在 GPU 上跑量化模型。GPTQ 的原理是逐層量化:對每一層做量化時,會用一小組校準資料來評估量化誤差,並調整其他未量化的權重來補償。這個方法在 INT4 量化上效果特別好,品質通常優於直接做 Round-to-Nearest 量化。

AWQ(Activation-aware Weight Quantization)是較新的方法,會分析哪些參數對輸出影響比較大,對重要的參數保留更高精度。AWQ 的核心觀察是:模型中只有少部分的權重對最終輸出有關鍵影響(稱為 salient weights)。AWQ 會找出這些關鍵權重,在量化時對它們特別小心。品質通常比 GPTQ 好一點,特別是在極低精度(INT3、INT2)的場景。

bitsandbytes 是 Hugging Face 生態系裡最方便的量化工具,只要在載入模型時加一個參數就能啟用 INT8 或 INT4 量化,幾乎不用改程式碼。它的使用方式很直覺:

from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
    "model_name",
    load_in_4bit=True,
    device_map="auto"
)

就這樣,模型會自動以 4-bit 精度載入,記憶體用量大幅降低。bitsandbytes 搭配 QLoRA 是目前最流行的低資源微調方案。

llama.cpp 內建的量化工具可以把模型轉成 GGUF 格式的各種量化等級,是本地部署的標準工具。它支援多種量化方法(k-quant、iq-quant 等),每種方法對品質和壓縮率的權衡不同。

NVIDIA 的 TensorRT-LLM 是企業級的推論引擎,內建了先進的量化功能。它支援 INT8、INT4、FP8 等精度,並且針對 NVIDIA GPU 做了深度最佳化。如果你的企業在 NVIDIA 的 GPU 上部署模型,TensorRT-LLM 通常能提供最佳的推論速度。

實際應用場景

個人使用者在自己的筆電或桌機上跑 LLM 時,量化幾乎是必要的。一般消費級顯卡只有 8-24GB 記憶體,不量化的話只能跑非常小的模型。以台灣市場常見的 GPU 為例:RTX 3060 有 12GB VRAM,只夠跑 Q4 量化的 7B 模型。RTX 4070 Ti 有 12GB VRAM,情況類似。RTX 4090 有 24GB VRAM,可以跑 Q4 量化的 13B-34B 模型,或 Q8 量化的 7B 模型。如果你用 Apple Silicon 的 Mac,M2 Pro 以上的機型有統一記憶體架構,16GB 記憶體就能流暢跑 Q4 的 7B 模型,32GB 可以跑 13B,64GB 可以跑更大的模型。

企業在自建推論伺服器時,量化可以讓同一台機器服務更多用戶。原本一張 GPU 只能跑一個請求,量化後可能同時跑好幾個。以一家台灣的科技公司為例,他們在 A100(80GB)上部署 70B 模型:用 FP16 只能放一個模型副本,同時處理 1-2 個請求。量化到 INT8 後可以放下整個模型並同時處理 4-6 個請求。量化到 INT4 甚至可以放兩個模型副本做負載平衡。

邊緣裝置(手機、IoT 設備)上的 AI 幾乎都經過量化。手機上的語音辨識、即時翻譯,背後的模型都是量化過的。Apple 的 Core ML 和 Google 的 TensorFlow Lite 都內建了量化支援,讓開發者可以把模型壓縮到手機能跑的大小。

成本考量也很重要。在雲端,GPU 時間就是錢。模型越小,推論越快,每次請求的成本就越低。一家每天處理百萬次 AI 請求的企業,把模型從 FP16 量化到 INT8,推論速度提升約 2 倍,意味著 GPU 成本可以降低將近一半。

安全與限制

量化最大的風險是品質下降。當你把精度壓得太低,模型可能會在複雜推理任務中犯更多錯。在生成長文本時前後矛盾的機率會增加。在數學計算中出現更多錯誤。在理解微妙語境時表現變差。在中文處理上,量化的影響可能比英文更明顯,因為中文的語意表達更依賴上下文,量化造成的微小誤差可能被放大。

另一個要注意的是,量化的效果因模型而異。小模型(7B 以下)量化後品質下降比較明顯,因為它本來的參數就少,壓縮空間有限。大模型(70B 以上)量化後通常表現還不錯,因為它有更多「冗餘」可以壓。經驗法則是:70B Q4 的品質通常比 7B FP16 還好,因為模型本身的能力差距大於量化造成的損失。

安全方面,量化本身不會引入新的安全漏洞。但如果你從不明來源下載量化模型,要注意模型檔案是否被篡改。理論上,惡意的量化模型可能在權重中嵌入後門(backdoor),讓模型在特定輸入下產出有害內容。建議只從官方來源或知名社群(如 Hugging Face 上有聲譽的上傳者)下載。下載後可以比對檔案的 SHA256 雜湊值來驗證完整性。

還有一點:量化模型的行為可能跟原始模型有微妙差異。如果你的應用對輸出的一致性要求很高(比如醫療或法律領域),需要在量化後重新驗證模型的表現。建議準備一組標準測試案例,在量化前後分別跑過,量化量化造成的品質偏移是否在可接受範圍內。

在合規層面,如果你的應用需要通過某些認證或審查(例如醫療器材軟體的 FDA 認證),使用量化模型可能需要額外的驗證文件來證明量化沒有影響模型在關鍵場景下的表現。

量化 vs 蒸餾 vs 剪枝

這三種都是讓模型變小的方法,但做法不同:

量化是降低數字精度,模型結構不變,只是表示每個數字的方式從「精確」變成「粗略」。好處是實作簡單,通常不需要重新訓練。缺點是壓縮比有上限,壓太多品質就崩了。

蒸餾(Distillation)是用大模型教小模型,產出一個全新的、更小的模型。結構可能完全不同。好處是可以大幅縮小模型(從 70B 蒸餾到 7B),缺點是需要大量的計算資源來做蒸餾訓練,而且小模型的能力上限受限於原始大模型。

剪枝(Pruning)是把模型裡「不太重要」的連結直接刪掉,讓模型變稀疏。好處是可以在不改變精度的情況下減少計算量。缺點是需要仔細評估哪些連結可以刪除,而且硬體對稀疏計算的支援還不夠成熟。

方法 原理 壓縮比 品質影響 實作難度 是否需要重新訓練
量化 降低數字精度 2-8x 小到中 通常不需要
蒸餾 大模型教小模型 2-100x 中到大 需要
剪枝 刪除不重要的連結 1.5-4x 小到中 有時需要

實務上,這三種方法經常搭配使用。比如先蒸餾出一個較小的模型,再對它做量化。或是先剪枝減少連結數量,再量化降低精度。多種壓縮技術疊加使用可以達到單一技術無法達到的壓縮效果。

台灣本地部署實務

在台灣,本地部署 AI 模型的需求越來越大,主要原因包括資料主權考量、網路延遲、以及持續上漲的 API 成本。量化是本地部署的關鍵技術,因為大部分台灣企業不具備購買高階 GPU 叢集的預算。

常見的本地部署方案包括:

中小企業方案:一台配備 RTX 4090 的工作站(成本約 10-15 萬台幣),搭配 Ollama 跑 Q4 量化的 7B-13B 模型。適合內部知識問答、文件摘要、簡單的程式碼輔助。效能不如雲端 API,但資料完全不出門,適合處理客戶個資或營業秘密。

中型企業方案:一到兩張 A100(可以租用雲端 GPU),跑 INT8 量化的 70B 模型。品質接近商用 API,可以服務數十個同時使用者。適合需要高品質中文處理但不想把資料送到海外的企業。

研發團隊方案:用 Apple Silicon Mac(M2 Ultra 或 M4 Max,192GB 記憶體)跑大模型。Apple 的統一記憶體架構讓 CPU 和 GPU 共享記憶體,雖然速度不如 NVIDIA GPU,但勝在安靜、省電、不需要特別的散熱。適合研發人員做原型驗證和實驗。

常見問題

量化後的模型品質到底差多少?

要看量化程度和任務類型。INT8 在大多數任務上幾乎感覺不到差異。INT4 在簡單對話中表現不錯,但在數學、邏輯推理、程式生成等任務會有可察覺的品質下降。一般來說,同一個模型的 Q4_K_M 量化版大約保留原始模型 90-95% 的能力。具體的品質損失取決於任務的複雜度和模型本身的大小。70B 模型的 Q4 版通常比 7B 模型的 FP16 版表現更好。

我的電腦能跑什麼大小的模型?

粗略計算:模型在 Q4 量化下需要的記憶體大約是「參數量(B)× 0.5 + 2GB」。7B 模型大約需要 5.5GB,13B 大約 8.5GB,34B 大約 19GB,70B 大約 37GB。你的顯卡記憶體或系統記憶體需要大於這個數字才能流暢運行。額外的 2GB 是 KV cache 和其他開銷的估計,實際用量可能因模型架構和上下文長度而異。

量化模型可以繼續 Fine-tune 嗎?

可以。QLoRA 就是專門為此設計的技術——在 4 位元量化的模型上用 LoRA 進行微調。這讓你可以在消費級 GPU 上微調大型模型,是目前最受歡迎的低成本微調方案。要注意的是,QLoRA 微調出來的 adapter 在推論時需要跟量化後的基底模型一起使用,不能直接套用在不同量化等級的版本上。

同一個模型的不同量化版本,選哪個好?

如果你的記憶體允許,選最高品質的(Q8 > Q6 > Q5 > Q4)。如果記憶體有限,Q4_K_M 是最常被推薦的平衡點。避免使用 Q2 和 Q3,除非你真的只是要測試功能。另一個考量是推論速度:位元數越低推論越快,如果你的應用對延遲敏感,可以考慮用較低的量化等級換取更快的回應速度。

用量化模型處理機密資料安全嗎?

量化本身不影響資料安全。如果你用本地量化模型(像 Ollama + GGUF),資料完全不會離開你的電腦,反而比雲端 API 更安全。但要確認模型來源可信,避免從不明管道下載。建議使用知名上傳者提供的版本,並驗證檔案的雜湊值。在台灣的法規環境下,本地部署量化模型可以幫助企業滿足個資法對資料境內處理的要求。

量化和蒸餾可以一起用嗎?

可以,而且實務上經常這樣做。常見的流程是先用大模型(例如 70B)蒸餾出一個小模型(例如 7B),然後再對這個小模型做量化。這樣可以得到一個體積非常小、推論速度非常快的模型,同時保留大部分的能力。缺點是品質損失會疊加,需要仔細評估每一步的品質影響。

相關文章

參考資料