Hugging Face Transformers 量子化の概要

Hugging Face は、Transformers ライブラリで 2 つの主要な量子化スキーム、bitsandbytesauto-gptq をネイティブにサポートしています。これらの統合により、ユーザーは小規模なハードウェアで大規模モデルを実行し、アダプターを使用してパラメータ効率の高いファインチューニング (PEFT) を行うことができます。

Comparing bitsandbytes and auto-gptq

bitsandbytes と auto-gptq のどちらを選ぶかは、セットアップとファインチューニングの容易さが主な目的か、テキスト生成における最大の推論速度が目的かで決まります。

bitsandbytes: Ease of Use and Fine-tuning

Bitsandbytes は、アクセシビリティと柔軟性を考慮して設計されており、いくつかの主要な利点を提供します:

  • ゼロショット量子化: キャリブレーション データセットは必要なく、torch.nn.Linear モジュールを含む任意のモデルは、モデル読み込み時にすぐに量子化できます。
  • クロスモダリティ相互運用性: 線形レイヤーを対象とするため、異なるモダリティ間で動作し、Whisper、ViT、Blip2 などのモデルをサポートします。
  • アダプター統合: 量子化されたベースモデルで訓練されたアダプターは、推論性能の低下なく、ベースモデルまたは非量子化モデルにマージしてデプロイできます。

制限事項: bitsandbytes の 4-bit モデルは、テキスト生成時に GPTQ よりも遅く、現在 4-bit 重みのシリアライズをサポートしていません。

auto-gptq: Optimized Inference

auto-gptq は、デプロイメントと高スループット テキスト生成のために最適化されています:

  • 生成速度: GPTQ 量子化モデルは、テキスト生成において bitsandbytes モデルよりも大幅に高速です。
  • N-bit サポート: このアルゴリズムは 2 ビットまでの量子化をサポートしますが、品質とのトレードオフとして 4 ビットが推奨されます。
  • シリアライズ: GPTQ モデルは任意のビット数でのシリアライズをサポートし、事前に量子化されたモデル(TheBloke から提供されるものなど)を簡単にロードできます。
  • ハードウェア サポート: AMD GPU では、追加の設定なしで統合が動作します。

制限事項: GPTQ は量子化のためにキャリブレーション データセットが必要であり、例えば 175B パラメータ モデルでは 4 GPU 時間かかることがあります。さらに、現在の API は言語モデル専用に設計されており、マルチモーダル モデルをネイティブにサポートしていません。

Performance and Speed Benchmarks

Hugging Face は、NVIDIA A100、T4、Titan RTX GPU 上で meta-llama/Llama-2-7b-hfmeta-llama/Llama-2-13b-hf を使用してベンチマークを実施しました。

Inference and Generation Speed

  • フォワードパス (プリフィル): プリフィル ステップでは、bitsandbytes と GPTQ の性能は同様ですが、バッチサイズが大きいときに GPTQ がわずかに速くなります。
  • テキスト生成: GPTQ は、異なるハードウェア (A100, T4, Titan RTX) と生成長にわたって、bitsandbytes よりも一貫して高速です。バッチサイズ 4 で注意キャッシュ (use_cache=True) を使用すると、GPTQ は bitsandbytes の 2 倍の速度を達成できます。

Adapter Fine-tuning Speed

Low Rank Adapters (LoRA) を使用してアダプターをファインチューニングする際、bitsandbytes は GPTQ よりも高速です。なお、GPTQ のファインチューニングでは、トレーニングでサポートされていないため exllama カーネルを無効にする必要があります。

Model Quality Degradation

Open-LLM リーダーボードのベンチマークによると、量子化による性能低下は最小限であり、この低下は大規模モデルではさらに顕著ではありません。

Llama-2-7b Performance (Average Score):

  • FP16: 54.32
  • bnb-4bit: 53.4
  • GPTQ: 53.23

Llama-2-13b Performance (Average Score):

  • FP16: 58.66
  • GPTQ (actorder_True): 58.03
  • GPTQ: 57.56
  • bnb-4bit: 56.9

Recommended Workflow for Optimized Models

ファインチューニングの柔軟性とデプロイメント性能のバランスを最適に保つため、Hugging Face は次のパイプラインを推奨します:

  1. ゼロショット量子化のために bitsandbytes を使用してベースモデルを量子化します。
  2. 量子化されたベースモデルの上にアダプターをファインチューニングします。
  3. 訓練されたアダプターをベースモデルまたは非量子化モデルにマージします。
  4. 最終的なデプロイメントにおいて生成速度を最大化するため、マージされたモデルを GPTQ を使って量子化します。

Sources