壓縮而不失智:LLM 量化技術深度解析

新聞
HongKong
4
04:17 PM · Dec 18 ,2025

編者按: 如何在資源受限的設備上高效部署大語言模型,同時還儘可能保持其性能表現?

我們今天為大家帶來的這篇文章,作者的核心觀點是:量化技術通過在模型精度與效率之間尋找最優平衡點,使得大語言模型能夠在資源受限的設備上高效部署,而幾乎不降低其"智能水平"。

文章從量化的基本原理出發,深入剖析了訓練後量化(PTQ)與量化感知訓練(QAT)的適用場景,詳細解釋了縮放因子、零點、對稱/非對稱量化等關鍵技術細節,並進一步探討了高級量化技術(如 GPTQ、AWQ、SmoothQuant)以及 KV 緩存量化等前沿方法。作者還結合實戰經驗,梳理出一套可落地的量化工作流,並展示了量化在端側 AI、低成本雲部署、長上下文處理等場景中的巨大價值。

作者 | Bhavishya Pandit

編譯 | 嶽揚

像我們這樣的大語言模型,多少有點"養尊處優"。我們鍾愛龐大的參數規模、海量的內存和強悍的 GPU。但當有人試圖在手機或配備低性能 GPU 的筆記本電腦上運行我們時,現實便會毫不留情地給我們一記耳光。

工程師們如何確保我們在微型設備上依然能流暢智能地運行?

答案就是:量化技術(quantization) ------ 它是現代 AI 模型部署中的一項核心技術。

讓我們花點時間,真正理解它。

01 什麼是量化技術?

量化的本質在於降低數值的存儲精度。 LLM的所有運算都離不開數字------每個權重參數、每次激活值、每一個注意力分數,全都建立在浮點數運算之上。這些數值流暢、連續、無限精確。

但計算機呢?它們更喜歡固定、離散的存儲單元(比如整數而不是高精度浮點數)。要麼你的數據能塞進去,要麼就塞不進去。就像你試圖把整個衣櫃塞進一個登機箱一樣,裝得下就裝,裝不下就沒辦法。這時候,量化技術站出來説:

"嘿,大語言模型,如果每個數字不再使用 32 位精度,而是砍到 8 位,甚至 4 位呢?你幾乎察覺不到差別,但我們能省下大量內存。"

32 位浮點數(FP32)→ 黃金標準

8 位整數(INT8)→ 依然智能,體積要小得多

4 位整數(INT4)→ 超緊湊,只是稍微健忘一點

好吧,但大語言模型為什麼要在乎這個?

因為現在的 LLM 實在太臃腫了。數十億參數需要數十億個數字。一個 70B 參數的模型若用 FP32 表示,需要 280 GB------這已經不是模型了,這是存儲災難。

量化能把這種情況:"我得靠一整個服務器集羣才能跑這個東西"

變成這樣:"嘿,我或許能在筆記本上運行它,甚至在手機上也行!"

本質上這就是 AI 模型的瘦身方案 ------ 在保持智能的前提下剔除冗餘數據。

但是,壓縮數字精度不會損害模型質量嗎?

有時候確實會。但量化的精髓(也是整門技術的重點)在於:

在模型最不敏感的地方降低精度

在模型最核心的地方保留準確性

02 量化在大語言模型生命週期中的位置:訓練 vs 推理

在我搞清楚"量化是什麼"之後,下一個問題便接踵而至:

"挺酷的,但我們到底什麼時候做量化?是在訓練期間?訓練之後?還是兩個階段都需要?"

事實證明,時機的選擇非常關鍵,因為大語言模型非常挑剔。你是在它們學習過程中就引入量化,還是等它們已經記牢所有模式後再量化,表現會大不相同。

2.1 訓練後量化(Post-Training Quantization, PTQ)

可以把 PTQ 想象成給模型貼一張便利貼提醒:

"嘿,我要把你的某些數字四捨五入了,試着適應一下。"

你直接拿一個已經完全訓練好的模型,然後進行:

  • FP32 → INT8 或 INT4
  • 可能還會用一些花哨的取整技巧

優點是:

  • 快速又便宜:無需重新訓練一個 70B 參數的龐然大物
  • 易於實驗:可以先試試 INT8,看模型是否撐得住,再大膽嘗試更低精度

缺點是(我是吃了虧才明白的):

  • 精度可能下降:某些網絡層對量化極其敏感
  • 異常值影響大:如果某個權重特別大,會破壞整個量化尺度,導致所有參數在壓縮後嚴重失真。
  • 有時需要保留原精度層:LayerNorm、嵌入層(embedding layers)或語言模型頭(LM head)可能得保持在 FP16 精度

2.2 量化感知訓練(Quantization-Aware Training, QAT)

QAT 是更成熟、更系統的做法。與其等模型學完後再強迫它適應低精度,不如從一開始訓練時就讓它習慣。

我探索 QAT 時是這麼做的:

  • 在訓練過程中插入"偽量化層"(fake quantization layers):模型在學習時就看到低精度的數字
  • 使用直通估計器(straight-through estimators)讓梯度正常流動,使模型能主動適應
  • 到訓練結束時,權重天然具備對量化噪聲的魯棒性

優點是:

  • 最終準確率更高,尤其在極低精度(如 INT4 或 3-bit)時
  • 推理更穩定,意外更少
  • 可以進行激進量化而不丟失模型的"聰明勁兒"

缺點(我注意到的):

  • 耗時:哪怕只部分重訓 7B--70B 的模型,成本也很高
  • 工程投入大:需要謹慎集成到訓練流程中

如何選擇(根據我的實驗和閲讀):

  • PTQ → 首選方案。便宜、快速,在 INT8 上效果出奇地好,配合智能取整策略,INT4 也常常有效
  • QAT → 僅當你需要最後那 1--2% 的準確率,或要做極低精度(如 4-bit 以下)量化時才用
  • 混合方案 → 先做 PTQ,同時將某些關鍵層回退到 FP16,再對核心層做輕量微調(近似 mini-QAT)

為什麼選擇在哪個階段進行量化如此重要?

我意識到,量化不只是一個數學技巧 ------ 它會徹底改變整個部署流程:

  • 對純推理任務,PTQ 往往勝出:顯存佔用更少,吞吐量更高
  • 對需要訓練+部署的完整工作流程,QAT 可能更划算:最終模型更小,長上下文處理能力也更強

選擇在哪個階段進行量化的問題歸根結底是:

你是想要快速、便宜、基本夠用,還是謹慎、稍慢、接近完美?

03 量化技術背後的運作機制

在我搞清楚"何時"量化之後,就不得不弄明白"量化究竟是怎麼實現的"。老實説,這個過程出人意料地優雅。量化的核心思想很簡單:

把連續且無限精確的數字,映射到一組有限的離散值上,並儘可能保留模型的"智能"。

3.1 理解縮放因子(Scale)與零點(Zero-Point)

想象模型中的這樣一個權重:

0.8921374650012345

我們真的需要這麼多小數位嗎?不需要。量化技術是這樣做的:

  • 選擇一個縮放因子(s)→ 決定每個"區間"有多寬
  • 選擇一個零點(z)→ 將我們的整數對齊到實際數據的範圍

公式看起來挺花哨,但概念上其實很簡單:

quantized_value = round(original_value / scale) + zero_point

當你想還原回 FP32 時:

dequantized_value = (quantized_value - zero_point) * scale

3.2 對稱量化 vs 非對稱量化

我發現,並不是所有量化都一樣:

  • 對稱量化(Symmetric quantization) → 零點為 0,區間以 0 為中心對稱
    • 優點:更簡單,效率極高
    • 常用於權重
  • 非對稱量化(Asymmetric quantization) → 零點可調,正負範圍不一定相等
    • 優點:能更好地捕捉偏態分佈
    • 常用於激活值(activations),因為它們通常不是以 0 為中心的

3.3 按張量量化 vs 按通道量化:粒度很重要

起初,我嘗試了按張量量化(per-tensor quantization):整個權重矩陣使用一套縮放因子和零點。很簡單,但有時會出現災難性失效。為什麼呢?因為 Transformer 很挑剔 ------ 權重矩陣中有些行的數值很大,有些則很小。若整行共用一套縮放因子,結果會是:

  • 小數值被擠進同一個區間(導致精度損失)
  • 或大數值被截斷(產生巨大誤差)

解決方案?按通道(per-channel,即按行)量化。

  • 每一行都有自己獨立的縮放因子(和可能的零點)
  • 保留了數值的相對差異
  • 與帶來的收益相比,其額外的內存開銷微乎其微

3.4 取整與截斷:微小誤差,重大影響

量化並非魔法。它會引入兩類誤差:

  • 取整誤差(Rounding error) → 實際值與其最接近的量化區間值之間的差異
  • 截斷誤差(Clipping error) → 當數值超出可表示範圍時被強行裁剪

像 GPTQ 或 SmoothQuant 這樣的現代 LLM 量化方案,核心就是通過巧妙的取整方法或層間重平衡(rebalancing)來最小化這些誤差(後面會細説)。

3.5 如何選擇量化精度

這是我每天都要面對的問題:

FP32 → INT8 → INT4 → ... 我最多能壓縮到多少位?

我的經驗是:通常先從 INT8 開始 ------ 安全又經濟,只有在採用高級取整技術時,才嘗試 INT4。低於 4 比特的量化尚處於實驗階段,除非你準備好對模型進行微調,否則風險很高。

3.6 一個直觀的比喻

這是我的思維模型:

  • 每個權重 = 一件衣服
  • 每個量化區間 = 行李箱裏的一個隔層
  • 縮放因子 = 你的隔層有多大
  • 零點 = 第一個隔層從哪兒開始

04 量化為何有時會帶來副作用

量化並非魔法 ------ 如果我們不夠謹慎,它可能會微妙地破壞模型性能。這些誤差主要來源於以下幾個方面:

1)取整誤差:將 FP32 精度的數值映射到 INT8/INT4 會引入微小的精度損失。

  • 單次誤差很小,但在 Transformer 中,微小的取整誤差會跨層累積。
  • 結果:導致注意力分佈或詞元概率發生細微變化,有時甚至會引發模型幻覺。

2)截斷誤差:異常值會迫使量化因子變大。

  • 這使得大多數權重被壓縮到少數幾個區間內 → 有效精度大幅下降。
  • 實例:LayerNorm 層中一個罕見的大激活值若被截斷,就可能導致模型不穩定。

快速應對:採用百分位數法確定縮放因子,代替極值法,或對敏感層特殊處理。

3)網絡層敏感度差異:並非所有網絡層對量化的反應都相同:

  • 注意力投影層(Attention projections) & 語言模型頭(LM head) → 高度敏感
  • LayerNorm 層 → 極度敏感,通常需保持 FP16 精度
  • MLP 層 → 中等敏感,可耐受 INT8/INT4
  • 嵌入層(Embeddings) → 中高度敏感,需要小心處理

05 高級量化技術

在經歷了取整、截斷和敏感網絡層帶來的種種挑戰後,研究人員和工程師們開發出一些巧妙的方法,使得 LLM 即使在 4 位精度下也能表現出色。以下是我瞭解到的一些核心技術。

5.1 GPTQ:基於 Hessian 矩陣的智能取整

  • 核心思想:並非所有取整誤差都同等重要。某些權重對模型輸出的影響更大。
  • GPTQ 通過分析模型的二階敏感度(Hessian 矩陣)來識別哪些權重可以安全地進行取整處理。
  • 效果:即使在大模型中,INT4 權重量化也能幾乎保持原始精度。

5.2 AWQ:激活感知量化

  • 激活值與權重相互作用,如果在對權重進行取整時不考慮激活值的分佈範圍,可能會損害模型性能。
  • AWQ 根據激活值的統計特徵來調整權重量化策略,從而降低推理過程中的誤差風險。

5.3 SmoothQuant:層間平衡技術

  • 痛點:某些網絡層的激活值範圍過大,導致均勻量化效率低下。
  • SmoothQuant 會在不同層之間對權重和激活值進行重新縮放,但保證它們相乘後的結果(即模型的輸出)保持不變。
  • 優勢:實現更平滑的量化,大幅減小精度損失。

5.4 HQQ 與混合方法

  • 該方法將 Hessian 信息與混合精度或分組量化技術相結合。
  • 思路:對層中"安全"的部分使用低比特精度,而對敏感部分保留更高精度。
  • 該技術在對生產級模型進行 INT4 或更低比特量化時尤為實用。

5.5 混合精度回退機制

  • 有些網絡層天生抗拒被量化。
  • 常見策略:將 LayerNorm、LM Head(語言模型輸出頭)以及部分嵌入層維持在 FP16 精度,其餘部分則量化為 INT4/INT8。
  • 權衡:雖略微增加內存佔用,卻能換來模型質量的大幅提升。

06 KV 緩存量化

如果你曾嘗試用大語言模型處理長上下文任務,一定對此深有體會:KV 緩存會瘋狂佔用內存。每個生成的詞元都要為每一層保存鍵(Key)矩陣和值(Value)矩陣,而模型動輒擁有數十億參數,內存很快就會被吃光。量化技術此時便派上用場。

6.1 為什麼 KV 緩存很重要

  • 在解碼過程中,Transformer 會為每個歷史詞元存儲鍵(K)和值(V)。
  • 這樣就能在計算注意力時訪問所有先前詞元,無需重複計算。
  • 問題在於:對於長提示詞(如 8K+ 詞元)和超大模型(70B+ 參數),緩存可能佔用大部分 GPU 內存。

6.2 INT8/INT4 KV 緩存

  • 將鍵和值以更低精度(如 INT8 或 INT4)存儲,可大幅減少內存佔用。
  • 精度損失極小,因為注意力機制對 K/V 矩陣中的微小取整噪聲具有較強的容忍度。

用一種更為直觀的方式理解:注意力機制包容性強,就像聽 128kbps 的歌曲 ------ 細節雖有損失,但整體旋律依舊清晰。

6.3 反量化 or 直接在整數域中進行計算

兩種實現方式:

1)動態反量化(Dequant on-the-fly)

  • 在計算注意力時,將 INT8/INT4 臨時轉回 FP16
  • 有輕微計算開銷,但內存效率高

2)在整數域中直接計算(Compute directly in integer domain)

  • 充分利用支持低精度運算的硬件(如支持 INT8 的 GPU)
  • 速度更快、內存數據移動量更少,但工程實現稍複雜

6.4 實用建議

  • 將 KV 緩存量化與分層混合精度結合使用,效果最佳。
  • INT8 KV 緩存通常很安全;若使用 INT4,建議配合高級取整策略(如 GPTQ 或 AWQ)。
  • 務必在長序列上進行測試 ------ 短上下文的基準測試無法暴露潛在的模型幻覺或詞元錯位問題。

07 量化技術實戰工作流

在深入研究了量化的原理、誤差來源和高級技巧後,我意識到真正的挑戰不在於理解量化,而在於如何安全地實施它而不破壞模型。以下是我的實踐方法。

7.1 準備校準數據集

在調整任何權重之前,首先準備一個體量小但具有代表性的數據集:

  • 包含 100-500 條覆蓋模型典型任務的輸入序列
  • 目的:記錄每一層激活值的數值範圍和分佈形態,從而為後續的量化過程提供準確的統計依據。
  • 原因:如果推理時的激活值分佈與校準數據偏差過大,INT4 量化可能會失敗

7.2 逐層確定精度

並非所有網絡層都能同等程度地適應 INT4 精度:

  • MLP 層和大多數注意力權重 → 採用 INT4
  • 嵌入層 → 若存在風險則採用 INT8
  • LayerNorm、LM Head 及有時首個投影層 → 回退至 FP16 精度

7.3 執行量化操作

  • 首先進行訓練後量化(PTQ),通常將所有權重轉為 INT8,檢查模型輸出
  • 然後使用 GPTQ 或 AWQ 逐步將 MLP /注意力層降至 INT4
  • 始終將敏感網絡層保持在 FP16 精度

此階段是迭代過程:應用量化 → 測試 → 調整網絡層精度

7.4 評估與調試

這是理論照進現實的環節:

  • 使用真實場景的提示詞進行測試,而非僅依賴基準數據集
  • 檢查是否出現幻覺、詞元錯位或推理能力下降
  • 若某網絡層表現異常,可選擇性地恢復其精度或嘗試按通道縮放

7.5 微調(可選步驟)

對於激進的低比特量化(如 INT4、混合 3-4 位量化),有時需要進行輕量級的量化感知微調:

  • 在校準數據上訓練幾個 epoch
  • 讓模型適應量化引入的噪聲
  • 通常能將 INT4 的性能表現提升至接近 FP16 水平

7.6 部署就緒

當量化穩定後:

  • KV 緩存也進行量化(INT8/INT4),提升內存效率
  • 對那些被特意保留為較高精度的層,已採取保護措施
  • 模型已通過長上下文任務測試

最終成果:內存佔用更小,推理速度更快,精度損失微乎其微。當第一次看到 70B 參數的模型在單張 GPU 上流暢運行時,那種感覺堪稱神奇。

08 應用場景

  • 端側 AI(On-Device AI) :量化讓我能直接在筆記本、邊緣設備甚至手機上運行大語言模型。過去需要多卡 GPU 服務器的模型,如今單張 GPU 就能裝下,讓 AI 能夠進行實時交互,擺脱雲端延遲。我用它來做筆記、進行代碼補全、當離線聊天助手 ------ 就像把一台超級計算機裝進了揹包裏。
  • 高性價比的雲端部署(Cost-Efficient Cloud Deployment) :即使在雲端,量化也能大幅降低 GPU 內存佔用,使單個節點能夠服務更多用户,大幅節省運維成本。例如,如果一個 13B 模型在 INT4 精度下的表現幾乎與 FP16 相當,但 GPU 內存佔用減少了一半,這樣使得預算有限的團隊也可以部署高性能的 LLM。
  • 長上下文應用(Long-Context Applications) :通過降低 KV 緩存的內存佔用,使得處理長文檔成為可能。藉助 INT8 或 INT4 的 KV 緩存,我成功實現了整本書籍的摘要生成、分析法律合同,甚至維持數小時的連續對話而不會爆內存。這讓虛擬助手、教學系統和摘要工具能無縫處理超長上下文。
  • 多模型協作流水線(Multi-Model Pipelines) :量化模型在混合流水線中表現尤為出色。我經常用小型 INT4 模型做初步篩選或生成初始建議,再將結果交給更大的模型進行最終推理。若無量化技術,並行調度多個模型會很容易超出內存限制。而現在,就像在一台機器上部署了一整個 AI 專家團隊。
  • 研究與實驗(Research and Experimentation) :最後,量化技術讓實驗變得更快速、更便宜。我可以在消費級 GPU 上迭代新架構、測試模型消融實驗或微調模型,無需等待昂貴的專用硬件。這極大加速了我們的學習與實驗進程,讓大模型研究變得更加觸手可及。

END

本期互動內容 🍻

❓你覺得未來大模型會默認以量化形式發佈,還是保留"原始精度+按需量化"的模式?

本文經原作者授權,由 Baihai IDP 編譯。如需轉載譯文,請聯繫獲取授權。

原文鏈接:

https://bhavishyapandit9.substack.com/p/deep-dive-into-quantization-of-llms

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.