# 論文閱讀 : LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale ## 問題背景 - 大型語言模型(LLMs)推理時需要大量 GPU 記憶體。 - 現有的推理方式通常使用 16-bit 或 32-bit 精度,資源成本高。 - 95% 的參數 和 65–85% 的計算量 集中在: - Feed-forward 層 - Attention projection 層 ## 解決方案 - 將 transformer 模型中的前饋層與注意力投影層轉為 Int8 推理。 - 推理所需記憶體減半,但保留與 full precision 相同的效能表現。 - 可直接使用 ## 主要解決方法 1. 向量級量化(Vector-wise Quantization) - 適用規模 : 可支援至 2.7B 參數模型而不損失效能。 - 每個內積指定不同的 normalization constant,處理大部分特徵。 - 核心: - 矩陣乘法被視為一系列獨立的 row × column 內積。 - 對每個內積使用 獨立的 normalization 常數,提高量化精度。 - 再透過 row/column normalization 的 outer product 還原原始輸出結果。 3. 混合精度處理(Mixed-Precision Decomposition) - 從 6B 開始出現異常大值(最大值比一般特徵高 20 倍)。 - 6.7B 模型規模出現「相變」現象: - 所有層都出現極大特徵。 - 約 75% 序列維度受影響。 - 每個序列中出現 15 萬個 outlier 特徵,但集中在僅 6 個維度。 - 這些極端值特徵對模型至關重要: - 將這些維度設為 0 會使: - Attention softmax 的 top-1 機率下降 20%+ - Perplexity 惡化 600–1000% - 隨機移除相同數量的特徵,影響幾乎可以忽略(<0.3%) - 針對模型中的「突變特徵(outlier features)」,單獨使用 16-bit 計算。 - 超過 99.9% 的權重仍以 8-bit 執行。 ![image](https://hackmd.io/_uploads/HJUwnmLLxx.png) ## 實驗結果 : LLM.int8() 在各種模型規模下的效果評估(125M~175B) ![image](https://hackmd.io/_uploads/HyWs6GDLge.png) ### 語言建模效能(Perplexity) — C4 驗證集 - LLM.int8() 是唯一在所有模型規模下能保留完整 perplexity 的方法。 - 其他量化方法在大模型下效果明顯惡化: - Absmax、Row-wise、Vector-wise quantization 在超過 2.7B 參數後效能惡化。 - Zeropoint quantization 可延伸到 6.7B,但超過後亦退化。 - 特別是 13B 模型 下,量化後的效果甚至比 6.7B 還差。 - 對 175B 參數 的模型,推理準確率無明顯損失。 ### Zero-shot 任務表現 - LLM.int8() 在 125M~175B 的 OPT 模型中皆保留 full precision(16-bit)效能。 - 傳統 8-bit Absmax Vector-wise 方法表現嚴重退化,趨近隨機猜測。 ### 推理速度與延遲 - 在 小模型(≤6.7B) 中: - LLM.int8() 的推理略慢於 FP16 baseline(量化額外開銷)。 - 在 大模型(如 175B) 中: - LLM.int8() 的大型矩陣乘法推理速度約為 FP16 的兩倍快。 ## 隨模型規模擴大而出現的「極端特徵值」與其對模型與量化的影響 ![image](https://hackmd.io/_uploads/Skf8kmv8gl.png) ### 主要發現 - 隨 Transformer 模型規模擴大(如 13B),會出現大幅度特徵值(magnitude ≥ 6) - 對 attention 和 整體預測性能 有重大影響 - 在 13B 模型中: - 每個 2048 token 序列可出現 多達 150,000 個 outlier - 這些值高度集中,僅出現在最多 7 個 feature 維度 - 如果將 magnitude ≥ 6 的特徵視為 outlier 並用 16-bit 計算,則: - 可完全避免 perplexity 劣化 #### Outlier 定義 - 特徵值絕對值 ≥ 6.0 - 出現在 至少 25% 的 Transformer 層 - 且在 至少 6% 的序列維度 s 上出現 - 僅針對 Attention 的投影層(K/Q/V/Output) 和 FFN 的第一層(Expansion) 進行分析 - 忽略 FFN 的 Contraction 層與 attention function 本體 #### 穩健性驗證 - 三種不同訓練框架訓練的模型(OpenAI GPT-2、Meta Fairseq、Eleuther GPT-J) - 兩種推理框架進行分析(Fairseq, Hugging Face Transformers) ## 結論 - 首次實現:支援 數十億參數的 Transformer 模型進行 無效能損失的 Int8 量化推理。 - 方法基礎: - 對 大幅度異常特徵(outlier features) 的觀察與分析 - 結合: - ector-wise quantization - 混合精度分解(Mixed-precision decomposition) - 實驗證明:LLM.int8() 可完整保留高達 175B 模型的推理效能 ### 限制 - 模型規模上限為 175B,超過 175B 的模型可能會出現新的 emergent 現象 - 未對 Attention 函數進行 Int8 量化 ### LLM.int8() 是一種「無需校準資料的靜態量化」方法 - 對每個內積(inner product)分別做 vector-wise quantization - 不再依賴整體 activation 範圍 - 每個 row/column 自行 normalize,直接套公式量化 - Outlier 特徵使用 FP16 處理(混合精度)