Hugging Face Transformers 量化概覽

Hugging Face 在 Transformers 庫中原生支援兩種主要的量化方案:bitsandbytesauto-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-hfmeta-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 建議以下流程:

  1. 量化 基礎模型,使用 bitsandbytes 進行零射量化。
  2. 微調 在量化基礎模型之上的適配器。
  3. 合併 訓練好的適配器到基礎模型或去量化模型中。
  4. 量化 由此合併得到的模型,使用 GPTQ 以在最終部署時最大化生成速度。

Sources