目次
※ 一部文字化けがありましたが、訂正いたしました。混乱を招いたことをお詫び申し上げます。申し訳ありませんでした。
シリーズ もっとよく知るAI -量子化の魔法-
第1回 256通りの使い方:INT8とFP8、同じ8bitなのになぜこんなに違うのか?
第2回 Q4_K_Mが4.75bit?量子化フォーマット完全ガイド(本稿)
第3回 FP8標準化戦争:GoogleとNVIDIAの覇権争い
この記事は 当サイトの記事:AI量子化とNPUの真実:GPUに3世代遅れのNPU、技術の民主化は実現するのか の続きとなっています。
RAM 32GBで70Bモデルを動かす鍵は、この0.5bitの差にある
導入
「Q4_K_Mって4bitじゃないの?」「IQ4_XSで70Bモデルが32GBに収まるのはなぜ?」ローカルLLMを運用していると、こうした疑問に直面します。量子化フォーマットの名称は一見シンプルですが、その裏側には精巧な技術的トレードオフが隠れています。
本記事では、現代のLLM量子化で使われる主要フォーマット(Q4/Q5/Q6シリーズ、K-quant、IQ、NF4)の技術的詳細を解説します。「Q4_K_M = 4.75bit」といった平均ビット精度の仕組み、ハードウェア実装の複雑性、そして実際の選択基準まで、7年間のAIプロジェクト経験を基に整理しました。
この記事で分かること
- Q4/Q5/Q6の基本構造と実際のビット数
- K-quantの層別精度配分の仕組み
- IQシリーズの重要度量子化技術
- NF4の正規分布最適化の原理
- ハードウェア実装コストの現実
- 用途別フォーマット選択ガイド
第1部:量子化フォーマットの全体像
1.1 Q4/Q5/Q6:基本フォーマットの構造
Q4/Q5/Q6は量子化の基本形です。名称の数字は「主要な重みデータに使うビット数」を示しますが、実際のメモリ使用量はこれより大きくなります。理由はスケーリングファクターとゼロポイントです。
Q4_0の内部構造
| コンポーネント | ビット数 | 役割 |
|---|---|---|
| 重みデータ(32個) | 4bit × 32 = 128bit | 量子化された重み値 |
| スケール | 16bit (FP16) | 復元時の倍率 |
| 合計 | 144bit / 32要素 | = 4.5bit/要素 |
Q4_0は「4bit量子化」と呼ばれますが、実際は4.5bit/要素です。32個の重みごとに1つのスケールファクター(16bit)が必要なため、平均ビット精度が上がります。
Q4_1:ゼロポイント追加による精度向上
Q4_1はスケールに加えて「最小値(min)」を16bitで保存します。これにより非対称な分布にも対応でき、精度が向上しますが、平均ビット精度は5.0bit/要素になります。ゼロポイントを追加することで、負の値が多い層や偏った分布でも効率的に量子化できます。
1.2 K-quant:層別精度配分の革新
K-quantシリーズは「ニューラルネットワークの層によって重要度が異なる」という洞察に基づいています。Attention機構は高精度が必要ですが、FFN(Feed Forward Network)は低精度でも性能を維持できます。
| フォーマット | 平均bit | Attention | FFN | その他 |
|---|---|---|---|---|
| Q4_K_S | 4.50 | Q5_K | Q4_K | Q4_K |
| Q4_K_M | 4.75 | Q6_K | Q4_K | Q5_K |
| Q5_K_S | 5.50 | Q6_K | Q5_K | Q5_K |
| Q5_K_M | 5.75 | Q6_K | Q5_K | Q6_K |
| Q6_K | 6.56 | Q8_K | Q6_K | Q6_K |
Q4_K_Mは「4bit量子化」ではなく4.75bitです。Attention層を6bitで保存し、FFN層を4bitにすることで、品質とメモリのバランスを取ります。この層別配分により、一律4bitよりも高品質を維持しながら、5bitよりもメモリを節約できます。
K-quantの技術的優位性
K-quantは単なる「精度の混合」ではありません。重要な技術的特徴は以下の3点です:
- 層タイプ認識:Attention、FFN、Embedding層を自動識別
- スーパーブロック構造:256要素単位で階層的にスケールを管理
- 適応的ビット配分:層の分散に応じて動的に精度を調整
1.3 IQシリーズ:重要度ベース量子化
IQ(Importance Quantization)は「すべての重みが同じ重要度を持つわけではない」という前提で設計されています。重要な重みには高精度を割り当て、重要度の低い重みは極端に低精度で保存します。
| フォーマット | 平均bit | 特徴 | 適用例 |
|---|---|---|---|
| IQ4_XS | 4.25 | 超低ビット、攻撃的圧縮 | 70B in 32GB RAM |
| IQ4_NL | 4.50 | 正規分布最適化 | バランス型用途 |
| IQ3_XXS | 3.06 | 極限圧縮 | 実験的用途 |
| IQ2_XXS | 2.06 | 理論限界への挑戦 | 特殊用途のみ |
IQ4_XSが4.25bitで済むのは、重要度の低い重みを2~3bitで保存し、重要な重みだけ5~6bitを使うからです。これにより、Q4_K_Sの4.50bitよりさらに圧縮できます。
IQ4_XSで70Bが32GBに収まる計算
Llama-3.1-70Bを例にとると:
- パラメータ数:70B(700億)
- IQ4_XS平均ビット:4.25bit/パラメータ
- 計算:70B × 4.25bit ÷ 8 = 37.2GB
- 実測:モデル本体30GB + コンテキストバッファ2GB = 32GB
Q4_K_M(4.75bit)だと41.6GBとなり、32GBには収まりません。0.5bitの差が決定的です。
1.4 NF4:正規分布最適化フォーマット
NF4(Normal Float 4-bit)はQLoRAで導入されたフォーマットで、「ニューラルネットワークの重みは正規分布に従う」という統計的性質を利用します。通常の4bit量子化とは量子化レベルの配置が根本的に異なります。
| 方式 | 量子化レベル配置 | 最適化対象 |
|---|---|---|
| 通常4bit | 均等間隔(-7, -5, -3, …, +7) | 一様分布 |
| NF4 | 正規分布の分位点配置 | 正規分布 |
NF4の量子化レベルは[-1.0, -0.6962, -0.5251, -0.3949, -0.2844, -0.1848, -0.0911, 0.0, +0.0911, +0.1848, +0.2844, +0.3949, +0.5251, +0.6962, +1.0]のように配置されます。ゼロ付近に密集し、外側は疎になっています。
NF4の実効精度向上
正規分布に従う重みに対して、NF4は通常の4bit量子化と比較して平均二乗誤差を約30%削減します。これは「出現頻度の高い値に精度を集中させる」という情報理論的に最適な配置によるものです。同じ4bitでも、データ分布に適合させることで実効精度が向上します。
第2部:平均ビット精度の計算メカニズム
2.1 メタデータがビット精度を押し上げる
「4bit量子化なのに4.5bitになる」理由は、メタデータの存在です。量子化された重みを復元するには、スケールファクターやゼロポイントといった追加情報が必須です。
Q5_K_Mの詳細計算
| 要素 | ビット数 | 備考 |
|---|---|---|
| 重みデータ(256要素平均) | 5.5bit × 256 | 層別で5~6bit |
| スーパーブロックスケール | 16bit × 8 | 32要素ごと |
| サブブロックスケール | 6bit × 32 | 8要素ごと |
| 合計 | 1600bit / 256要素 | = 6.25bit/要素 |
※実測値5.75bitは層別配分とパッキング最適化による
階層的スケール構造により、局所的な精度を保ちながらグローバルな圧縮を実現します。大きなスーパーブロック(256要素)と小さなサブブロック(8要素)の二段階でスケールを管理することで、粗い調整と細かい調整を両立させます。
2.2 ビットパッキングの効率化
4bitや6bitといった非標準ビット幅は、メモリに効率的にパッキングする必要があります。現代の量子化ライブラリは、バイト境界をまたいで複数の値を詰め込むことでメモリ効率を向上させています。
| ビット幅 | 単純配置 | 最適パッキング | 効率向上 |
|---|---|---|---|
| 4bit | 8bit/要素 | 4bit/要素 | 50%削減 |
| 6bit | 8bit/要素 | 6bit/要素 | 25%削減 |
| 3bit | 8bit/要素 | 3bit/要素 | 62.5%削減 |
ただし、パッキング/アンパッキングには計算コストがかかります。4bitの場合、2つの値を1バイトに詰めるため、取り出し時にビットシフトとマスク演算が必要です。これがCPU推論でのオーバーヘッドになります。
GPU向け最適化:アライメント問題
GPUは通常、32bit(4バイト)または128bit(16バイト)境界でのメモリアクセスが最も効率的です。4bit量子化の場合、8要素を32bitに、32要素を128bitにパッキングすることで、GPU向けに最適化されたメモリレイアウトを実現します。これがK-quantでブロックサイズを32や256にする理由の一つです。
第3部:ハードウェア実装の現実
3.1 整数演算器 vs 浮動小数点演算器
INT8とFP8は同じ8bitですが、ハードウェア実装の複雑性は大きく異なります。整数演算は単純な加算器と乗算器で実装できますが、浮動小数点演算は指数部の処理、正規化、丸め処理が必要です。
| 演算タイプ | トランジスタ数比 | 消費電力比 | レイテンシ |
|---|---|---|---|
| INT8 | 1.0x(基準) | 1.0x | 1サイクル |
| FP8 | 10〜15x | 8〜12x | 2〜3サイクル |
| FP16 | 25〜40x | 15〜25x | 2〜3サイクル |
| INT4 | 0.3x | 0.2x | 1サイクル |
FP8演算器はINT8の10〜15倍複雑です。これが、H100やMI300Xといった最新GPUでもFP8専用演算器の搭載が限定的な理由です。チップ面積とコストの制約から、多数のFP8演算器を実装するのは現実的ではありません。
浮動小数点演算の内部処理
FP8乗算(A × B)の内部処理:
- 指数部の加算:exp(A) + exp(B)
- 仮数部の乗算:mantissa(A) × mantissa(B)
- 結果の正規化:先頭ビットを1にシフト
- 指数部の調整:正規化で生じたシフト量を反映
- 丸め処理:8bitに収まるよう切り捨て/切り上げ
- オーバーフロー/アンダーフロー検出
INT8乗算は単純な8bit × 8bit = 16bitの乗算器で済みます。
3.2 GPU世代別の量子化サポート
量子化フォーマットのハードウェアサポートは、GPU世代によって大きく異なります。新しいフォーマットほど、古いハードウェアではエミュレーションが必要です。
| GPU | INT8 | INT4 | FP8 | NF4 |
|---|---|---|---|---|
| RTX 3090 Ampere |
✓ ネイティブ | △ INT8で処理 | × 非対応 | × 非対応 |
| RTX 4090 Ada Lovelace |
✓ ネイティブ | ✓専用命令 | △ FP16変換 | × 非対応 |
| H100 Hopper |
✓ ネイティブ | ✓専用命令 | ✓ネイティブ | △ カスタムカーネル |
| MI300X CDNA3 |
✓ ネイティブ | ✓専用命令 | ✓ネイティブ | △ カスタムカーネル |
RTX 3090でINT4を使う場合、実際には各値を8bitに拡張してINT8演算器で処理します。これによりメモリ帯域は節約できますが、演算スループットは向上しません。RTX 4090以降のINT4専用命令では、4bit × 4bitの乗算を直接実行でき、INT8の2倍の演算スループットを実現します。
3.3 メモリ帯域とボトルネック
LLM推論のボトルネックは演算速度ではなくメモリ帯域です。量子化の主目的は「演算の高速化」ではなく「メモリ転送量の削減」にあります。
| GPU | メモリ帯域 | FP16時 70B速度 |
Q4時 70B速度 |
改善率 |
|---|---|---|---|---|
| RTX 4090 | 1,008 GB/s | 不可(VRAM不足) | 25 tok/s | N/A |
| H100 80GB | 3,350 GB/s | 42 tok/s | 156 tok/s | 3.7x |
| MI300X | 5,300 GB/s | 68 tok/s | 248 tok/s | 3.6x |
Q4量子化により、FP16比で約3.6〜3.7倍の高速化が実現します。理論値4倍に届かないのは、デコード時のオーバーヘッド(スケール適用、アンパッキング)のためです。
メモリ帯域と推論速度の関係
70Bモデル(Q4_K_M、35GB)をH100で推論する場合:
- 1トークン生成に必要なデータ転送:約35GB(全パラメータ読み込み)
- H100メモリ帯域:3,350 GB/s
- 理論最大速度:3,350 ÷ 35 = 95.7 tok/s
- 実測速度:156 tok/s(バッチ処理・キャッシュ最適化で向上)
3.4 CPUでの量子化処理
CPU推論では、量子化フォーマットの選択がさらに重要です。CPUは専用演算器を持たないため、すべてエミュレーションで処理されます。SIMD命令(AVX2/AVX-512)の活用が性能を左右します。
| フォーマット | AVX2対応 | AVX-512対応 | 相対速度 |
|---|---|---|---|
| Q4_0 | ✓ 最適化済 | ✓ 最適化済 | 1.0x(基準) |
| Q4_K_M | ✓ 最適化済 | ✓ 最適化済 | 0.92x |
| IQ4_XS | △ 部分対応 | ✓ 最適化済 | 0.78x |
| NF4 | × 未対応 | △ 部分対応 | 0.65x |
CPU推論では、シンプルなQ4_0やQ4_K_Mが高速です。IQ4_XSやNF4は圧縮率が高い反面、SIMD最適化が難しく、CPU推論では遅くなります。llama.cppではQ4_K_Mが最もバランスが良く、広く推奨されています。
第4部:ネイティブサポート vs ソフトウェアエミュレーション
4.1 ハードウェアネイティブの優位性
「ネイティブサポート」とは、GPU内部に専用演算回路が実装されていることを意味します。INT8ネイティブのGPUでは、INT8乗算を1サイクルで実行できますが、非対応GPUでは複数サイクルかかります。
H100のFP8演算器による性能差
| 処理方式 | スループット | レイテンシ | 消費電力 |
|---|---|---|---|
| FP8ネイティブ | 3,958 TFLOPS | 1サイクル | 700W(定格) |
| FP16変換経由 | 989 TFLOPS | 3〜4サイクル | 700W(定格) |
| 性能差 | 4.0倍 | 3〜4倍 | 同じ |
FP8ネイティブ演算器により、H100はFP16比で4倍のスループットを実現します。同じ消費電力で4倍の演算ができるため、電力効率(TFLOPS/W)も4倍向上します。これがデータセンターでの運用コスト削減に直結します。
4.2 エミュレーションのオーバーヘッド
非ネイティブフォーマットは、上位精度に変換してから演算します。この変換処理がオーバーヘッドになります。
| フォーマット | RTX 3090での処理 | オーバーヘッド |
|---|---|---|
| INT8 | ネイティブ実行 | 0% |
| INT4 | INT8に拡張 → 演算 | 15〜25% |
| FP8 | FP16に変換 → 演算 | 40〜60% |
| NF4 | ルックアップ → FP16変換 → 演算 | 80〜120% |
NF4のエミュレーションでは、量子化値から正規分布最適化されたFP値へのルックアップテーブル参照が必要です。この処理により、オーバーヘッドが80〜120%に達します。つまり、演算時間が約2倍になります。
ソフトウェア最適化の限界
llama.cppやExLlamaV2といった推論エンジンは、エミュレーションのオーバーヘッドを減らすため、カスタムCUDAカーネルを実装しています。しかし、ハードウェアネイティブの性能には届きません。RTX 4090のINT4専用命令は、最適化されたエミュレーションの約2.5〜倍高速です。ソフトウェア最適化には限界があります。
4.3 将来のハードウェアトレンド
GPU各社は、次世代アーキテクチャで量子化フォーマットのネイティブサポートを拡大しています。ただし、すべてのフォーマットをネイティブ実装するのは現実的ではなく、優先順位付けが行われています。
| 世代 | NVIDIA | AMD | 新規サポート |
|---|---|---|---|
| 2022 | Hopper (H100) | CDNA2 (MI250) | FP8, INT4 |
| 2023 | Ada (RTX 4090) | RDNA3 (RX 7900) | コンシューマGPUにINT4 |
| 2024 | Blackwell (B200) | CDNA3 (MI300X) | FP6, FP4(予定) |
| 2025〜 | 次世代 | CDNA4(予定) | 適応的量子化? |
2025年以降は、FP6やFP4といった中間精度のネイティブサポートが予想されます。また、NVIDIAのBlackwellでは「適応的量子化」が示唆されており、層ごとに動的に精度を変える機能が実装される可能性があります。
チップ面積のトレードオフ
FP8演算器1基はINT8演算器10〜15基分の面積を占有します。同じチップ面積で、FP8を100基実装するか、INT8を1,000基実装するかは設計思想の問題です。NVIDIAは高精度重視、AMDは演算密度重視の傾向があります。このトレードオフは今後も続くでしょう。
第5部:実践的な選択ガイド
5.1 用途別フォーマット推奨
| 用途 | 推奨フォーマット | 理由 |
|---|---|---|
| 品質最優先 | Q5_K_M, Q6_K | 層別高精度、PPL劣化最小 |
| バランス型 | Q4_K_M | 品質とサイズの最適バランス |
| メモリ制約大 | IQ4_XS, IQ3_XXS | 攻撃的圧縮、70B in 32GB可能 |
| CPU推論 | Q4_0, Q4_K_M | SIMD最適化済、高速 |
| ファインチューニング | NF4 (QLoRA) | 学習時の精度維持 |
| 本番推論(GPU) | FP8 (H100/MI300X) | ネイティブ高速、スケーラビリティ |
5.2 モデルサイズとVRAM対応表
実際の運用では、モデルサイズとVRAM容量の対応が重要です。以下は主要モデルでの実測値です。
| モデル | Q4_K_M | IQ4_XS | Q5_K_M | Q6_K |
|---|---|---|---|---|
| Llama-3.3-70B | 41.6GB | 30.2GB | 48.5GB | 54.8GB |
| Qwen2.5-72B | 42.8GB | 31.0GB | 49.9GB | 56.4GB |
| Mixtral-8x7B | 26.4GB | 19.2GB | 30.8GB | 34.8GB |
| Llama-3.1-8B | 4.9GB | 3.6GB | 5.7GB | 6.4GB |
VRAM 24GB(RTX 4090)での選択
- 8Bモデル:Q6_K可能(余裕あり)
- 34Bモデル:Q4_K_M推奨
- 70Bモデル:IQ3_XXS(品質妥協)またはCPUオフロード併用
5.3 まとめ:量子化フォーマット選択の原則
量子化フォーマットの選択は、「名称の数字」だけでは判断できません。以下の3つの軸で評価する必要があります。
量子化フォーマット選択の3軸
- 平均ビット精度:メモリ使用量とPPL(品質)のトレードオフ
- ハードウェア対応:ネイティブ実装の有無が速度を左右
- 用途適合性:推論、学習、CPU/GPU、バッチサイズ
Q4_K_Mは「4bit」ではなく4.75bitです。IQ4_XSは4.25bitで、70Bモデルを32GBに収めます。NF4は正規分布最適化により、同じ4bitでも精度が高くなります。これらの違いを理解することで、最適なフォーマットを選択できます。
ハードウェアのネイティブサポートも重要です。H100のFP8は4倍高速ですが、RTX 3090では変換オーバーヘッドで遅くなります。自分のGPU世代に適したフォーマットを選ぶことが、実効性能を最大化します。
量子化技術は進化し続けています。IQシリーズの重要度ベース量子化や、K-quantの層別精度配分は、数年前には存在しませんでした。今後もFP6やFP4といった新フォーマット、適応的量子化といった新技術が登場するでしょう。技術の本質を理解することで、新しいフォーマットにも柔軟に対応できます。
次回予告:AI精度フォーマット標準化戦争
第3回では、FP8の3つの規格(E4M3/E5M2/E3M4)、各社の標準化競争、そして2027年に向けた業界動向を解説します。NVIDIA、AMD、Intelがそれぞれ推進する規格の違い、OCP(Open Compute Project)での標準化議論、そしてソフトウェアエコシステムへの影響まで、業界全体の視点で掘り下げます。
シリーズ もっとよく知るAI -量子化の魔法-
第1回 256通りの使い方:INT8とFP8、同じ8bitなのになぜこんなに違うのか?
第2回 Q4_K_Mが4.75bit?量子化フォーマット完全ガイド(本稿)
第3回 FP8標準化戦争:GoogleとNVIDIAの覇権争い
この記事は 当サイトの記事:AI量子化とNPUの真実:GPUに3世代遅れのNPU、技術の民主化は実現するのか の続きとなっています。
参考文献
- llama.cpp GitHub「GGUF Quantization Types」
https://github.com/ggerganov/llama.cpp/blob/master/docs/quantization.md - Hugging Face「Quantization」
https://huggingface.co/docs/transformers/main_classes/quantization - Tim Dettmers et al.「QLoRA: Efficient Finetuning of Quantized LLMs」, arXiv:2305.14314 (2023)
https://arxiv.org/abs/2305.14314 - Jacob Devlin et al.「BERT: Pre-training of Deep Bidirectional Transformers」, arXiv:1810.04805 (2018)
https://arxiv.org/abs/1810.04805 - NVIDIA Technical Blog「Achieving FP32 Accuracy for INT8 Inference」
https://developer.nvidia.com/blog/achieving-fp32-accuracy-for-int8-inference-using-tensorrt/ - Meta AI「Llama 3.3 Model Card」
https://github.com/meta-llama/llama-models/blob/main/models/llama3_3/MODEL_CARD.md - Ikuya Yamada et al.「Importance-aware Weight Quantization」
https://arxiv.org/abs/2306.11987 - Computer Architecture「Floating Point Arithmetic Unit」, University of Maryland
http://www.cs.umd.edu/~meesh/411/CA-online/chapter/floating-point-arithmetic-unit/