Hugging Face Transformers 量化概覽
Hugging Face 在 Transformers 庫中原生支援兩種主要的量化方案:bitsandbytes 和 auto-gptq。這些整合使得使用者能夠在較小的硬體上運行大型模型,並使用適配器進行參數高效的微調(PEFT)。
比較 bitsandbytes 和 auto-gptq
在 bitsandbytes 和 auto-gptq 之間的選擇取決於主要目標是設置和微調的便利性,還是文本生成的最大推理速度。
bitsandbytes: 易用性與微調
Bitsandbytes 針對可及性與靈活性進行設計,提供以下幾項關鍵優勢:
- 零射量化: 它不需要校準數據集,這意味著任何包含
torch.nn.Linear模組的模型在載入時都可以直接進行量化。 - 跨模態互操作性: 由於它針對線性層,因此可以在不同模態之間工作,支援如 Whisper、ViT 和 Blip2 等模型。
- 適配器整合: 在量化基礎模型上訓練的適配器可以合併回基礎模型或去量化模型,以便在部署時不會導致推理性能下降。
限制: bitsandbytes 4-bit 模型在文本生成過程中較 GPTQ 慢,且目前不支援 4-bit 權重序列化。
auto-gptq: 優化推理
Auto-gptq 已針對部署和高吞吐量文本生成進行優化:
- 生成速度: GPTQ 量化的模型在文本生成方面顯著快於 bitsandbytes 模型。
- N-bit 支援: 該演算法支援量化至 2 位,儘管 4 位是品質的推薦權衡。
- 序列化: GPTQ 模型支援任意位數的序列化,使得載入預先量化的模型變得容易(例如來自 TheBloke 的模型)。
- 硬體支援: 整合在 AMD GPU 上開箱即用。
限制: GPTQ 需要校準數據集來進行量化,這可能需要數小時(例如,對於 175B 參數模型需要 4 個 GPU 小時)。此外,當前的 API 專門針對語言模型設計,不原生支援多模態模型。
效能與速度基準測試
Hugging Face 使用 meta-llama/Llama-2-7b-hf 和 meta-llama/Llama-2-13b-hf 在 NVIDIA A100、T4 和 Titan RTX GPU 上進行了基準測試。
推理與生成速度
- 前向傳遞(預填充): 在預填充步驟中,bitsandbytes 和 GPTQ 的表現相似,儘管在較大的批次大小下 GPTQ 稍快一些。
- 文本生成: GPTQ 在不同硬體(A100、T4、Titan RTX)和生成長度上始終快於 bitsandbytes。當使用注意力快取 (
use_cache=True) 且批次大小為 4 時,GPTQ 的速度可以是 bitsandbytes 的兩倍。
適配器微調速度
使用 Low Rank Adapters (LoRA) 微調適配器時,bitsandbytes 的速度快於 GPTQ。請注意,對於 GPTQ 的微調,必須禁用 exllama 內核,因為它們不支援訓練。
模型品質降低
來自 Open-LLM 排行榜的基準測試顯示,量化導致的性能下降極小,且此下降在較大的模型中不那麼明顯。
Llama-2-7b 效能(平均分數):
- FP16: 54.32
- bnb-4bit: 53.4
- GPTQ: 53.23
Llama-2-13b 效能(平均分數):
- FP16: 58.66
- GPTQ (actorder_True): 58.03
- GPTQ: 57.56
- bnb-4bit: 56.9
優化模型的推薦工作流程
為了在微調彈性與部署性能之間取得最佳平衡,Hugging Face 建議以下流程:
- 量化 基礎模型,使用 bitsandbytes 進行零射量化。
- 微調 在量化基礎模型之上的適配器。
- 合併 訓練好的適配器到基礎模型或去量化模型中。
- 量化 由此合併得到的模型,使用 GPTQ 以在最終部署時最大化生成速度。