Transformers 文件
選擇量化方法
並獲得增強的文件體驗
開始使用
選擇量化方法
Transformers 中提供了多種量化方法用於推理和微調。本指南將幫助您根據用例選擇最常用且生產就緒的量化技術,並介紹每種技術的優缺點。
要全面瞭解所有支援的方法及其功能,請參閱概述中的表格。
推理
請考慮以下量化方法用於推理。
量化方法 | 用例 |
---|---|
bitsandbytes | 易用性,以及在 NVIDIA GPU 上的 QLoRA 微調 |
壓縮張量 | 載入特定量化格式 (FP8, 稀疏) |
GPTQModel 或 AWQ | 在預先校準的情況下具有良好的 4 位精度 |
HQQ | 無需校準即可快速進行即時量化 |
torchao | 使用 torch.compile 實現靈活性和快速推理 |
無需校準(即時量化)
這些方法通常更易於使用,因為它們不需要單獨的校準資料集或步驟。
bitsandbytes
優點 | 缺點 |
---|---|
非常簡單,推理無需校準資料集。 | 主要針對 NVIDIA GPU (CUDA) 進行了最佳化。 |
社群支援良好,應用廣泛。 | 不能保證推理速度提升。 |
更多詳情請參閱 bitsandbytes 文件。
HQQ(半二次量化)
優點 | 缺點 |
---|---|
快速量化過程,無需校準資料。 | 在小於 4 位的位深度下,精度可能會顯著下降。 |
支援多種後端以實現快速推理。 | 除非使用 torch.compile 或後端,否則推理速度可能無法與其他方法匹配。 |
與 torch.compile 相容。 | |
支援廣泛的位深度(8、4、3、2、1 位)。 |
更多詳情請參閱 HQQ 文件。
torchao
優點 | 缺點 |
---|---|
與 torch.compile 強整合,可實現潛在的速度提升。 | 較新的庫,生態系統仍在發展中。 |
提供不錯的 CPU 量化支援。 | 效能取決於 torch.compile 的良好執行。 |
量化方案靈活(int8、int4、fp8)。 | 4 位量化 (int4wo) 可能無法在精度上與 GPTQ/AWQ 匹敵。 |
更多詳情請參閱 torchao 文件。
基於校準的量化
這些方法需要使用資料集進行預先校準步驟,以可能實現更高的精度。
GPTQ/GPTQModel
8B 模型校準在大約 20 分鐘內完成,使用一塊 A100 GPU。
優點 | 缺點 |
---|---|
通常能達到高精度。 | 需要校準資料集和單獨的校準步驟。 |
可以提高推理速度。 | 可能會在校準資料上過擬合。 |
Hugging Face Hub 上有許多預量化的 GPTQ 模型。 |
更多詳情請參閱 GPTQ 文件。
AWQ(啟用感知權重校準)
8B 模型校準在大約 10 分鐘內完成,使用一塊 A100 GPU。
優點 | 缺點 |
---|---|
通常在 4 位精度下實現高精度。(有時在特定任務上超過 GPTQ。) | 如果自行量化,則需要校準。 |
可以提高推理速度。 | |
校準時間比 GPTQ 短。 | |
Hugging Face Hub 上有許多預量化的 AWQ 模型。 |
更多詳情請參閱 AWQ 文件。
載入特定格式
compressed-tensors
優點 | 缺點 |
---|---|
支援靈活的格式,包括 FP8 和稀疏性。 | 主要用於載入預量化模型。 |
不直接在 Transformers 中執行量化。 |
更多詳情請參閱 compressed-tensors 文件。
微調
在微調期間考慮以下量化方法以節省記憶體。
bitsandbytes
- 描述:透過 PEFT 進行 QLoRA 微調的標準方法。
- 優點:支援在消費級 GPU 上微調大型模型;對 PEFT 有廣泛的支援和文件。
- 缺點:主要針對 NVIDIA GPU。
其他方法也相容 PEFT,但 bitsandbytes 是 QLoRA 最成熟和直接的路徑。
更多詳情請參閱 bitsandbytes 文件 和 PEFT 文件。
研究
諸如 AQLM、SpQR、VPTQ、HIGGS 等方法正在突破壓縮邊界(小於 2 位)或探索新穎技術。
- 如果滿足以下條件,請考慮使用這些方法:
- 您需要極高的壓縮率(小於 4 位)。
- 您正在進行研究或需要從其相關論文中獲得最先進的結果。
- 您有足夠的計算資源可用於潛在複雜的量化過程。我們建議在選擇一種方法用於生產之前,仔細查閱每種方法的文件和相關論文。
基準比較
為了對不同的量化方法進行定量比較,我們對 Llama 3.1 8B 和 70B 模型上的幾種常用技術進行了基準測試。下表顯示了精度(越高越好)、以每秒令牌數衡量的推理吞吐量(越高越好)、以 GB 為單位的峰值 VRAM 使用量(越低越好)和量化時間的結果。
效能指標是在 Llama 3.1 70B(bfloat16)上使用 2 塊 NVIDIA A100 80GB GPU,FP8 方法使用 1 塊 NVIDIA H100 80GB GPU,所有其他方法使用 1 塊 NVIDIA A100 80GB GPU 測量的。吞吐量是在批次大小為 1 且生成 64 個令牌的情況下測量的。適用於 torch.compile
和 Marlin 核心的結果已包含在內。
主要結論如下:
量化與方法 | 記憶體節省 (vs bf16) | 準確率 | 其他注意事項 |
---|---|---|---|
8 位 (bnb-int8, HQQ, Quanto, torchao, fp8) | 約 2 倍 | 非常接近基線 bf16 模型 | |
4 位 (AWQ, GPTQ, HQQ, bnb-nf4) | 約 4 倍 | 相對較高的精度 | AWQ/GPTQ 通常在精度上領先,但需要校準。HQQ/bnb-nf4 易於即時使用。 |
4 位以下 (VPTQ, AQLM, 2 位 GPTQ) | 極端 (>4 倍) | 顯著下降,尤其是在 2 位時 | 量化時間可能非常長 (AQLM, VPTQ)。效能各異。 |
始終在您的特定任務和硬體上對量化模型的效能(精度和速度)進行基準測試,以確保其符合您的要求。有關詳細的使用說明,請參閱上面連結的各個文件頁面。