AI・機械学習
上級

BitsAndBytes(ビッツアンドバイツ)

BitsAndBytes(bitsandbytes)とは、Tim Dettmersが開発したPyTorch用の軽量量子化ライブラリで、LLMの8ビット/4ビット量子化推論およびQLoRAファインチューニングを実現する。HuggingFace Transformersにネイティブ統合されており、数行のコード変更でモデルの量子化ロードが可能である。

0 回閲覧
0 いいね
2026/5/31 更新

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との違い

特徴BitsAndBytesGPTQAWQ
量子化タイミングロード時(オンザフライ)事前処理(オフライン)事前処理(オフライン)
校正データ不要必要必要
量子化所要時間ロード時間のみ数分〜数時間数分〜数時間
推論速度中速高速最高速
ファインチューニング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分散ロードが安定化

メモリ使用量の実測値

モデルFP16INT8 (LLM.int8())NF4 (QLoRA)
Llama 3.1 8B16GB8.5GB5.5GB
Llama 3.1 70B140GB72GB38GB
Mistral 7B14GB7.5GB5GB
Qwen 2.5 72B144GB74GB40GB
Mixtral 8x7B94GB48GB26GB

よくある質問(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の数行で利用可能
この記事について
カテゴリーAI・機械学習
難易度上級
作成日2026/5/24