Hugging Face 4ビット量子化とQLoRAリリース

TL;DR

Hugging Faceは4ビット量子化(bitsandbytes)とQLoRA微調整手法の統合をリリースし、ほとんどのTransformerモデルを単一のコンシューマー向けGPU上で実行・適応できるようにし、メモリ負荷を最小限に抑えました。

4ビット量子化の概要

  • 4ビット量子化はモデルの重みを4ビットに圧縮し、計算はより高精度(通常はbfloat16またはfloat16)で行います。
  • bitsandbytes ライブラリは2つの4ビットフォーマットを提供します:NF4(Normalized Float‑4、デフォルト)とFP4(生の4ビット浮動小数点)。NF4は精度向上のために推奨されます。
  • ダブル量子化(bnb_4bit_use_double_quant=True)は2段階目の量子化を追加し、パラメータあたり約0.4ビットを節約します。
  • 量子化された重みは4ビットで保存されますが、行列乗算は16ビットまたは32ビットで実行されるため、特別なGPUハードウェアは不要です—CUDA ≥ 11.2 が必要です。

QLoRA:量子化モデルの効率的な微調整

  • QLoRAは4ビット量子化された事前学習モデルを凍結し、唯一の学習可能パラメータとしてLow‑Rank Adapter(LoRA)を注入します。
  • 訓練中、勾配は凍結された4ビットモデルを通ってLoRA層へ流れ、16ビットのbfloat16で更新されます。
  • メモリ使用量が大幅に削減され、48 GBの単一GPU上で65 Bパラメータモデルを微調整でき、フル16ビット性能と同等になります。
  • 論文ではNormalFloat‑4 (NF4)、ダブル量子化、ページング最適化手法を導入し、メモリスパイクを低く抑えます。
  • その結果得られたGuanacoモデルファミリーは、1GPUで24時間微調整した後、ChatGPTのVicunaベンチマークスコアの99.3%に達します。

対応モデルとモダリティ

  • acceleratedevice_map 引数でロード可能なモデルはすべて4ビットで量子化できます。
  • リリース時点でサポートされているアーキテクチャにはLLaMA、OPT、GPT‑Neo、GPT‑NeoX、BLOOM、CodeGen、ビジョンモデル(例:BLIP‑2、ViT)など多数があります(完全なリストはブログ記事をご参照ください)。
  • この手法はテキスト、ビジョン、マルチモーダルモデルに適用可能です。

クイックスタートガイド

pip install -U bitsandbytes
pip install -U git+https://github.com/huggingface/transformers.git
pip install -U git+https://github.com/huggingface/peft.git
pip install -U git+https://github.com/huggingface/accelerate.git
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
import torch

config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",          # NF4 quantization
    bnb_4bit_use_double_quant=True,      # nested quantization
    bnb_4bit_compute_dtype=torch.bfloat16
)
model = AutoModelForCausalLM.from_pretrained(
    "facebook/opt-350m",
    quantization_config=config,
    device_map="auto"
)
  • load_in_4bit=True(または上記の BitsAndBytesConfig)を使用してモデルをロードします。
  • ロード後に手動でデバイス配置を行わないでください;device_map が自動で処理します。
  • 訓練を高速化するために bnb_4bit_compute_dtype を調整します(例:torch.bfloat16)。

QLoRAでの訓練

  • PEFTライブラリをインストールし、凍結された4ビットモデル上にLoRAアダプタを使用します。
  • Hugging Faceが提供するサンプルノートブックは、無料のGoogle Colabインスタンス上でGPT‑Neo‑X(20 B)の微調整を示しています。
  • ベンチマークにはTRLライブラリの SFTTrainer が使用され、スクリプトはリンクされたGitHub gistで入手可能です。

ベンチマークとメモリへの影響

モデル FP16 サイズ GPU(VRAM) 量子化 計算データ型 勾配チェックポイント シーケンス長 OOM?
LLaMA‑7B 14 GB 1 × T4 (16 GB) 4ビット NF4 + bfloat16 bfloat16 なし 512 ✅ OOMなし
LLaMA‑7B 14 GB 1 × T4 (16 GB) 4ビット NF4 + bfloat16 bfloat16 あり 1024 ✅ OOMなし
LLaMA‑13B 27 GB 1 × T4 (16 GB) 4ビット NF4 + fp16 fp16 あり 512 ✅ OOMなし
LLaMA‑13B 27 GB 1 × T4 (16 GB) 4ビット NF4 + fp16 fp16 あり + ネスト量子化 1024 ✅ OOMなし
  • この表は、ダブル量子化とオプションの勾配チェックポイントを組み合わせた4ビット NF4 が、8ビットやFP16ベースラインで発生するメモリ不足(OOM)エラーを防止することを示しています。

よくある質問

  • ハードウェア要件 – CUDA対応GPUのみが必要で、4ビット推論のCPUサポートはありません。
  • モデルサポートacceleratedevice_map と互換性のあるアーキテクチャはすべて量子化可能です。
  • 訓練 – 純粋な4ビット訓練はサポートされておらず、微調整はQLoRA論文で示されたようにLoRAなどのPEFT手法を使用する必要があります。
  • 利用ケース – 1つの4ビットベースモデルが複数のアダプタ(報酬モデル、ポリシーなど)を低コストハードウェア上でホストできるRLHFパイプラインを実現します。

リソース

影響

  • 推論とアダプタ微調整のハードウェア要件を削減し、大規模言語モデルへのアクセスを民主化します。
  • 大規模GPUクラスターを持たない研究グループが30B以上のモデルを実験できるようになります。
  • 消費者デバイスや低コストのクラウドインスタンス上で強力なチャットボットを展開する実用的な道筋を提供します。

謝辞: 本リリースは、ワシントン大学チーム、Pedro Cuenca(レビュー)、Olivier Dehaene、Omar Sanseviero の統合サポートへの貢献に感謝します。

Sources