BitsAndBytes(ビッツアンドバイツ)
BitsAndBytes(bitsandbytes)とは、Tim Dettmersが開発したPyTorch用の軽量量子化ライブラリで、LLMの8ビット/4ビット量子化推論およびQLoRAファインチューニングを実現する。HuggingFace Transformersにネイティブ統合されており、数行のコード変更でモデルの量子化ロードが可能である。
BitsAndBytes(bitsandbytes)は、大規模言語モデルを少ないGPUメモリで推論・ファインチューニングするための量子化ライブラリである。2022年にLLM.int8()論文と共に発表され、2023年のQLoRA論文でNF4量子化が追加されたことで爆発的に普及した。2026年現在、HuggingFace TransformersのBitsAndBytesConfigとして標準的に利用されている。
主要な量子化モード
BitsAndBytesは2つの量子化モードを提供する。
LLM.int8()(8ビットモード)
LLM.int8()はVector-wise Quantizationに基づく8ビット量子化手法である。モデルの重み行列を行ベクトル単位で量子化し、各ベクトルに個別のスケールファクターを適用する。
- Mixed-precision Decomposition: 外れ値(outlier)が多いチャネル(全体の約0.1%)はFP16で計算し、残り99.9%をINT8で処理
- 外れ値の閾値はデフォルト6.0(
llm_int8_thresholdパラメータで調整可能) - FP16ベースラインと比較して精度劣化はほぼゼロ(Perplexity差0.01以内)
- メモリ使用量はFP16の約50%
NF4(4ビットモード)
NF4(4-bit NormalFloat)はQLoRA論文で提案された4ビット量子化フォーマットで、以下の特徴を持つ。
- 正規分布最適化: ニューラルネットワークの重みが正規分布に従う性質を利用し、量子化レベルを正規分布の分位点に配置
- Double Quantization: 量子化のスケールファクター(FP32)自体をさらにFP8に量子化し、メモリオーバーヘッドを64ビット→8ビットに削減
- INT4やFP4と比較して、同じ4ビットでも情報理論的に最適な量子化精度を達成
- メモリ使用量はFP16の約25%
HuggingFace統合
from transformers import BitsAndBytesConfig
# 4ビット量子化設定
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
)
上記のようにBitsAndBytesConfigを定義し、from_pretrainedのquantization_config引数に渡すだけで量子化ロードが完了する。GPTQ/AWQと異なり事前の量子化処理が不要で、オリジナルのFP16/BF16モデルをそのままロード時に量子化する「オンザフライ量子化」方式である。
GPTQやAWQとの違い
| 特徴 | BitsAndBytes | GPTQ | AWQ |
|---|---|---|---|
| 量子化タイミング | ロード時(オンザフライ) | 事前処理(オフライン) | 事前処理(オフライン) |
| 校正データ | 不要 | 必要 | 必要 |
| 量子化所要時間 | ロード時間のみ | 数分〜数時間 | 数分〜数時間 |
| 推論速度 | 中速 | 高速 | 最高速 |
| ファインチューニング | QLoRA対応(主力) | 非対応 | 非対応 |
| 精度(4bit) | 良好(NF4) | 良好 | 最良 |
| GPU要件 | CUDA必須 | CUDA必須 | CUDA必須 |
BitsAndBytesの最大の強みは「校正データ不要でロード時に即座に量子化できる」点と「QLoRAファインチューニングとシームレスに統合されている」点である。一方、推論速度ではGPTQ/AWQに劣るため、推論専用環境ではGPTQ/AWQが選ばれることが多い。
BitsAndBytes 0.44+ の新機能(2025-2026年)
- マルチバックエンド対応: CUDA以外にもIntel XPU(Arc/Max GPU)やAMD ROCmへの対応が進行中
- FP4量子化: NF4に加えてIEEE FP4形式をサポート。一部のモデルでNF4より高精度
- Nested Quantization: 3段階以上のネスト量子化による超圧縮モード(研究段階)
- CPUオフロード改善: 大規模モデルのGPU+CPU分散ロードが安定化
メモリ使用量の実測値
| モデル | FP16 | INT8 (LLM.int8()) | NF4 (QLoRA) |
|---|---|---|---|
| Llama 3.1 8B | 16GB | 8.5GB | 5.5GB |
| Llama 3.1 70B | 140GB | 72GB | 38GB |
| Mistral 7B | 14GB | 7.5GB | 5GB |
| Qwen 2.5 72B | 144GB | 74GB | 40GB |
| Mixtral 8x7B | 94GB | 48GB | 26GB |
よくある質問(FAQ)
Q1: BitsAndBytesはAMD GPUで使えますか? A: 2026年現在、AMD ROCm対応は実験的段階である。安定して動作するのはNVIDIA CUDA GPU(Compute Capability 7.0以上、RTX 20シリーズ以降)のみ。AMD GPUでローカルLLMを実行する場合はGGUF+llama.cpp(Vulkan/ROCm対応)が推奨される。
Q2: load_in_4bitとload_in_8bitはどちらを選ぶべきですか?
A: QLoRAファインチューニングが目的ならload_in_4bit一択。推論のみでメモリに余裕があるならload_in_8bitの方が精度劣化が少ない。VRAM制約が厳しい場合はload_in_4bitで十分実用的な品質が得られる。
Q3: BitsAndBytesで量子化したモデルを保存・共有できますか?
A: 4ビット量子化モデルはmodel.save_pretrained()で保存可能で、HuggingFace Hubにアップロードして共有できる。ただしGPTQ/AWQのような事前量子化形式と異なり、ロード時に毎回量子化処理が走るため、共有するなら事前量子化済みのGPTQ/AWQ形式の方が配布には適している。
まとめ
- BitsAndBytesはオンザフライ量子化でモデルロード時に自動的に4bit/8bit化する
- QLoRAファインチューニングの基盤ライブラリとして事実上の標準
- 校正データ不要で手軽に利用できるが、推論速度ではGPTQ/AWQに劣る
- HuggingFace Transformersにネイティブ統合され、BitsAndBytesConfigの数行で利用可能