AI・機械学習
上級

NF4(Normal Float 4-bit)(エヌエフフォー)

QLoRA論文(2023)で提案された情報理論的に最適な4bit量子化データタイプ。LLMの重みが正規分布に従うことに着目し、正規分布に特化したノンリニア量子化グリッドを使用することでFP4より精度が高い。BitsAndBytesライブラリでbnb_4bit_quant_type="nf4"として実装されている。

0 回閲覧
0 いいね
2026/5/24 更新
関連タグ
量子化
NF4
QLoRA
BitsAndBytes
4bit量子化
ダブル量子化
情報理論

NF4(Normal Float 4-bit)とは

NF4(Normal Float 4-bit)は2023年5月にTim Dettmers、Artidoro Pagnoni、Ari Holtzman、Luke Zettlemoyerが発表したQLoRA論文("QLoRA: Efficient Finetuning of Quantized LLMs")で提案された情報理論的に最適な4bitデータ型です。

LLMの重み(Weight)が統計的にゼロ平均の正規分布(ガウス分布) に従う性質に着目し、通常の固定間隔4bit量子化(FP4)より量子化誤差を最小化するために設計されています。

NF4の情報理論的背景

FP4との違い

FP4(Fixed-Point 4-bit): 均等間隔で-8〜+7の16段階に量子化。値の密度が高い±1付近でも粗い間隔のため精度損失が大きい。

NF4: 正規分布N(0, 1)の確率密度関数を等面積(1/16ずつ)に分割した16点を量子化グリッドとして使用。ゼロ付近に量子化点が密集し、重要な値域での精度を保持。

FP4 vs NF4 精度比較

指標FP16(基準)FP4NF4
Llama-7B PPL(WikiText-2)5.125.785.32
量子化誤差(平均MSE)00.00430.0033
MTベンチ(7Bモデル)7.67.17.4
品質劣化率--6.6%-2.3%

→ NF4はFP4比で量子化誤差を約23%削減し、品質劣化を半分以下に抑える。

ダブル量子化(Double Quantization)との組み合わせ

QLoRA論文ではNF4とダブル量子化(DQ)を組み合わせることで、さらに圧縮率を向上させます。

NF4 vs NF4+DQ:

  • NF4のみ: 4.5 bit/param(4bit + 0.5bit FP32スケール)
  • NF4+DQ: 4.127 bit/param(追加8%削減)
from transformers import BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True,
)

QLoRAにおけるNF4の役割

QLoRAはNF4量子化された「凍結」ベースモデルに、FP16/BF16の小さなLoRAアダプター(trainable)を付与します。

QLoRAでQwen2.5-32Bをファインチューニングする構成例(RTX 4090 24GB):

  • Base: Qwen2.5-32B-Instruct NF4+DQ → 17.6GB VRAM
  • LoRA: r=16, alpha=32, target=q_proj/v_proj → +0.8GB
  • 合計: 18.4GB → RTX 4090(24GB)で余裕あり

NF4とGPTQ/AWQの違い

観点NF4(BnB)GPTQ-Int4AWQ-Int4
主用途ファインチューニング推論推論
量子化タイミングロード時(動的)事前量子化(静的)事前量子化(静的)
推論速度FP16比-40〜50%FP16比-20%FP16比-10%
ファインチューニング対応QLoRA主流限定的限定的

よくある質問(FAQ)

Q1: NF4はなぜFP4より精度が高いのか? A: LLMの重みは統計的に正規分布するため、正規分布の等面積分割で量子化グリッドを設計したNF4はゼロ付近に量子化点が多く、精度損失が少ない。FP4は均等間隔のため疎な領域にも無駄なグリッドを使う。

Q2: NF4モデルをGGUFやGPTQに変換できる? A: NF4はランタイム動的量子化のため、事前量子化GGUFやGPTQへの直接変換はできない。変換にはFP16モデルから改めてGGUF化・GPTQ化が必要。

Q3: bnb_4bit_compute_dtypeはfloat16とbfloat16どちらが良い? A: 新しいGPU(Ampere/Ada/Hopper: RTX 3000系以降)はbfloat16がネイティブ対応しており推奨。古いGPU(RTX 2000系等)はfloat16を使う。

まとめ

  • NF4はLLM重みの正規分布性質に最適化した情報理論的4bit量子化データ型
  • FP4比で量子化誤差23%削減、QLoRA論文で実証されたファインチューニング標準手法
  • ダブル量子化(DQ)と組み合わせでさらに0.4bit/param追加削減
  • BitsAndBytesでload_in_4bit+nf4の2行設定が実質的な業界標準
この記事について
カテゴリーAI・機械学習
難易度上級
作成日2026/5/24