Hugging Face AutoGPTQ 與 Transformers 整合

Hugging Face 已將 AutoGPTQ 函式庫整合進 Transformers 函式庫中,使用戶能夠以 8、4、3 或 2 位元精度對大型語言模型 (LLM) 進行量化並執行。此整合顯著降低了部署 LLM 的硬體需求,實現了在精度損失微乎其微的情況下進行 4-bit 量化,且在小批次大小 (batch size) 下的推論速度與 float16 (fp16) 基線相當。

GPTQ 量化技術概述

GPTQ 是一種訓練後量化 (Post-Training Quantization, PTQ) 方法,透過校準數據集和數小時的計算來壓縮預訓練模型。與在訓練期間進行的量化感知訓練 (Quantization-Aware Training, QAT) 不同,GPTQ 允許在無需昂貴的全模型重新訓練的情況下壓縮大規模模型。

混合精度方案

GPTQ 使用混合 int4/fp16 量化方案。在此架構中,權重被量化為 int4,而激活值 (activations) 則保持為 float16。在推論期間,權重會在靠近計算單元的融合內核 (fused kernel) 中即時去量化,而不是在 GPU 全域記憶體中。這提供了兩個主要優點:

  • 節省記憶體:Int4 量化可提供接近 4 倍的記憶體節省。
  • 推論速度:透過降低權重的位元寬度來減少數據傳輸時間,從而實現潛在的加速。

量化演算法

GPTQ 基於最佳腦量化 (Optimal Brain Quantization, OBQ) 框架。它將每一層的壓縮視為最小化原始權重矩陣與量化版本之間均方誤差 (MSE) 的問題。透過採用逐通道 (per-channel) 量化,GPTQ 會逐一量化權重,並使用 Hessian 矩陣更新剩餘的非量化權重以補償誤差。

GPTQ 優化了此過程,使其比 OBQ 快得多。例如,一個 Bloom 模型 (176B) 可以在不到 4 個 GPU 小時內完成量化,而使用 OBQ 量化一個 BERT 模型 (336M) 則需要 2 個 GPU 小時。

AutoGPTQ 與 Transformers 整合

AutoGPTQ 是一個提供廣泛支援各種 Transformer 架構的函式庫,使其比特定架構的實作更具通用性。Hugging Face 透過 Optimum 函式庫整合了 AutoGPTQ API 的極簡版本,為 LLM 量化提供原生的 Transformers API。

原生支援與使用方式

使用者現在可以透過安裝 AutoGPTQoptimum,直接透過 AutoModelForCausalLM 執行 GPTQ 模型。此整合同時支援 Nvidia GPU 和由 RoCm 驅動的 AMD GPU。

此整合的主要優點包括:

  • 序列化:量化後的模型可以儲存並分享至 Hugging Face Hub。
  • 效能:在小批次大小下,推論延遲與 FP16 推論相當。
  • 硬體相容性:透過 RoCm 原生支援 AMD GPU。
  • 內核支援:支援廣泛架構下的 Exllama 內核。

效能基準測試

在單個 NVIDIA A100-SXM4-80GB GPU 上進行的基準測試中(提示長度 512,生成 512 個 token,batch size 1),觀察到以下結果:

gptq act_order bits group_size kernel Load time (s) Per-token latency (ms) Throughput (tokens/s) Peak memory (MB)
False None None None None 26.0 36.958 27.058 29152.98
True False 4 128 exllama 36.2 33.711 29.663 10484.34
True False 4 128 autogptq-cuda-old 36.2 46.44 21.53 10344.62

部署與微調

Text-Generation-Inference (TGI)

GPTQ 支援已加入用於生產環境服務的 Text-Generation-Inference (TGI) 函式庫。這使得在有限的硬體上部署超大型模型成為可能;例如,現在可以在單個 A100-80GB GPU 上運行 70B 模型,這在使用 fp16 檢查點時是不可能實現的。

使用 PEFT 進行微調

雖然量化模型無法使用標準方法進行訓練,但使用者可以利用 PEFT (Parameter-Efficient Fine-Tuning) 函式庫在凍結的量化模型之上訓練適配器 (adapters)。

目前的局限性與未來方向

支援的架構

目前,此整合支援具有 decoder-only 或 encoder-only 架構的大型語言模型(例如 Llama, OPT, GPT-Neo, GPT-NeoX)。視覺、音訊和多模態模型目前尚不支援。

改進領域

  • 內核優化:雖然使用了 Exllama 內核,但透過基於 Triton 的內核或來自 MIT Han Lab 或 Kim et al. 的其他實作,仍有進一步改進的潛力。
  • 權重與激活值量化:GPTQ 僅量化權重。未來的方向包括探索可以使用 Nvidia Tensor Cores 進行整數運算的 W4A8 量化內核。
  • 批次大小擴展:設計能隨較大批次大小有效擴展的高效能 W4A16 內核仍是一個開放性的挑戰。

Sources