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%に達します。
対応モデルとモダリティ
accelerateのdevice_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サポートはありません。
- モデルサポート –
accelerateのdevice_mapと互換性のあるアーキテクチャはすべて量子化可能です。 - 訓練 – 純粋な4ビット訓練はサポートされておらず、微調整はQLoRA論文で示されたようにLoRAなどのPEFT手法を使用する必要があります。
- 利用ケース – 1つの4ビットベースモデルが複数のアダプタ(報酬モデル、ポリシーなど)を低コストハードウェア上でホストできるRLHFパイプラインを実現します。
リソース
- 論文: QLoRA (arXiv 2305.14314)
- 推論ノートブック: Google Colab デモ
- 微調整ノートブック: Google Colab 微調整デモ
- コード: QLoRA GitHub リポジトリ
- プレイグラウンド: ブログでリンクされているHugging Face SpaceでGuanaco 33Bモデルを試すことができます。
影響
- 推論とアダプタ微調整のハードウェア要件を削減し、大規模言語モデルへのアクセスを民主化します。
- 大規模GPUクラスターを持たない研究グループが30B以上のモデルを実験できるようになります。
- 消費者デバイスや低コストのクラウドインスタンス上で強力なチャットボットを展開する実用的な道筋を提供します。
謝辞: 本リリースは、ワシントン大学チーム、Pedro Cuenca(レビュー)、Olivier Dehaene、Omar Sanseviero の統合サポートへの貢献に感謝します。