目次
シリーズ もっとよく知るAI -量子化の魔法-
第1回 256通りの使い方:INT8とFP8、同じ8bitなのになぜこんなに違うのか?(本稿)
第2回 Q4_K_Mが4.75bit?量子化フォーマット完全ガイド
第3回 FP8標準化戦争:GoogleとNVIDIAの覇権争い
この記事は 当サイトの記事:AI量子化とNPUの真実:GPUに3世代遅れのNPU、技術の民主化は実現するのか の続きとなっています。
できるだけわかりやすく解説するAI量子化の本質
導入
前回の記事で、NPUがFP8非対応であることを解説しました。「NPUは2025年現在、2018年のRTX 2000シリーズと同じ精度レベルに留まっている」という衝撃的な事実をお伝えしました。
しかし、そもそもFP8とは何なのでしょうか?INT8と同じ8bitなのに、なぜこれほど大きな差が生まれるのでしょうか?
プロジェクトでLlama 70Bのような大規模言語モデルを導入する際、量子化形式の選択はサーバーコストとモデル品質に直結します。同じ8bitでも、INT8とFP8では品質が6%も違い、この差がユーザー満足度やビジネス成果を左右することがあります。
この記事で理解できること
- なぜFP8がAI推論に革命をもたらしたのか
- なぜNPUがFP8を搭載できないのか(技術的制約)
- 量子化形式を選ぶ際の判断基準
- 実務でのコストインパクト
それでは、「256通り」の使い方を見ていきましょう。
第1部:「256通り」をどう使うか
1.1 8bit = 256通り(これは共通)
まず基本から確認しましょう。8bitとは、8個の0か1で表現するデータ形式です。
例えば:
01010101
11111111
これらはすべて8bitです。
では、8bitで何通りの値を表現できるでしょうか?
答えは256通りです。
| ビット数 | パターン数 | 計算式 | 具体例 |
|---|---|---|---|
| 1bit | 2通り | 2^1 | 0, 1 |
| 2bit | 4通り | 2^2 | 00, 01, 10, 11 |
| 4bit | 16通り | 2^4 | 0000 ~ 1111 |
| 8bit | 256通り | 2^8 | 00000000 ~ 11111111 |
| 16bit | 65,536通り | 2^16 | (多すぎて省略) |
重要なポイント
INT8もFP8も、どちらも8bitです。つまり、どちらも256通りの値しか表現できません。
しかし、この256通りを「どう使うか」がまったく違うのです。
1.2 例え話:256枚のコインをどう配分するか
わかりやすく、お金で例えてみましょう。
あなたは256枚のコインを持っています。このコインを使って、さまざまな金額を表現したいとします。
方法A(INT8のやり方)
- すべて1円玉にする
- 1円、2円、3円…255円まで表現できる
- 細かい金額には強いが、大きな買い物(1万円など)には不向き
方法B(FP8のやり方)
- 1円玉、10円玉、100円玉、1000円玉を組み合わせる
- 小銭(1円、2円)も使えるし、大きな金額(10万円)も表現できる
- でも、合計256枚という制約は同じ
この違いが、INT8とFP8の本質的な違いです。
実務への影響
プロジェクトでモデルを選ぶ際、「重みの範囲」を考慮する必要があります。INT8は-128~127の範囲しかカバーできませんが、FP8は-448~448まで表現可能です。モデルによっては、この表現範囲の広さが品質に直結します。
第2部:INT8の世界 – 等間隔の階段
2.1 2進数をそのまま10進数に変換
INT8(Integer 8bit)は非常にシンプルです。8個の0と1を、そのまま整数として読み取ります。
最大値:11111111 = 255つまり、0から255までの256通りを、等間隔で表現します。
| 2進数 | 10進数 | 計算過程 |
|---|---|---|
| 00000000 | 0 | すべてゼロ |
| 00000001 | 1 | 1 |
| 00000010 | 2 | 2 |
| 01010101 | 85 | 64+16+4+1 |
| 11111111 | 255 | 128+64+32+16+8+4+2+1 |
2.2 計算例
例として、01010101を10進数に変換してみましょう。
0 1 0 1 0 1 0 1
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
128 64 32 16 8 4 2 1 (各桁の重み)1が立っている桁だけ足す:
64 + 16 + 4 + 1 = 85答え:85
簡単ですね!これがINT8の仕組みです。
2.3 符号ありINT8の場合
実際のニューラルネットワークでは、重みには負の値も必要です。そこで、最上位ビットを「符号ビット」として使います。
– 最小値:-128
– 最大値:127
– 合計:256通り(変わらず)
| 2進数 | 10進数(符号あり) |
|---|---|
| 00000000 | 0 |
| 01111111 | 127(最大の正の数) |
| 10000000 | -128(最小の負の数) |
| 11111111 | -1 |
2.4 INT8の特徴:等間隔
INT8の最大の特徴は、すべての値が等間隔であることです。
-128から127まで、1刻みで並んでいます。まるで階段のように。
この「等間隔」という性質は、ある意味公平です。すべての範囲に等しく精度を配分しています。
しかし、ニューラルネットワークの重みは、この「等間隔」を必要としていません。なぜなら、重みの分布は偏っているからです(後述)。
実務での課題
Llama 70BをINT8で量子化すると、ファイルサイズは約70GBになります。しかし、品質は元のFP16と比べて約92%に低下します。この8%の品質低下が、実運用で許容できるかどうかは、プロジェクトの要件次第です。顧客向けチャットボットなら致命的かもしれませんが、社内向けツールなら許容範囲かもしれません。
第3部:FP8の世界 – 望遠鏡のような目盛り
💡 このセクションの読み方
ここではFP8の計算方法を詳しく解説します。完全に理解する必要はありません。大事なのは「FP8は3つのパーツに分けて、対数的に値を表現する」という概念です。計算の詳細が難しければ、第4部に進んでも大丈夫です。
3.1 8bitを3つのパーツに分ける
FP8(Floating Point 8bit)は、INT8とまったく異なるアプローチを取ります。
8個のビットを、3つのパーツに分割します。
↑ ↑ ↑
符号 指数 仮数
1bit 4bit 3bit
| パーツ | ビット数 | 役割 | 範囲 |
|---|---|---|---|
| S(Sign・符号) | 1bit | 正負を決める | 0=正, 1=負 |
| E(Exponent・指数) | 4bit | 大きさの範囲を決める | 0~15 |
| M(Mantissa・仮数) | 3bit | 範囲内の細かさを決める | 0~7 |
この3つのパーツを組み合わせて、値を表現します。
3.2 計算してみよう(ステップバイステップ)
具体例で理解しましょう。01010101をFP8として読み取ります。
ステップ1:3つに分ける
↓
0 | 1010 | 101
S E M
ステップ2:符号を読む
→ 正の数
ステップ3:指数を読む
= 1×8 + 0×4 + 1×2 + 0×1
= 10(10進数)
ステップ4:仮数を読む
ここが少し特殊です。仮数は「1.xxx」の形で解釈します。
→ 1.101(小数点の後ろにつける)1.101(2進数)を10進数に変換:
= 1 + 1×(1/2) + 0×(1/4) + 1×(1/8)
= 1 + 0.5 + 0 + 0.125
= 1.625
ステップ5:最終計算
FP8の値を求める公式:
なぜ「E-7」なのか?これは「バイアス」と呼ばれ、指数がゼロ付近の小さな値も表現できるようにするためです。
= (+1) × 1.625 × 2^3
= 1.625 × 8
= 13
答え:13
3.3 対数分布になる理由
FP8の最も重要な特徴は、対数分布になることです。
指数Eが1つ変わると、表現できる範囲が2倍になります:
| 指数E | 2の累乗 | 表現範囲 |
|---|---|---|
| E=0 | 2^-7 | 0.0078 ~ 0.0156 |
| E=1 | 2^-6 | 0.0156 ~ 0.0312 |
| E=2 | 2^-5 | 0.0312 ~ 0.0625 |
| E=3 | 2^-4 | 0.0625 ~ 0.125 |
| … | … | … |
| E=13 | 2^6 | 64 ~ 128 |
| E=14 | 2^7 | 128 ~ 256 |
| E=15 | 2^8 | 256 ~ 448(最大) |
これは、まるで望遠鏡の目盛りのようです:
- 近く(ゼロ付近)は細かく見える
- 遠く(大きな値)は粗くなる
3.4 FP8の値の分布
FP8 E4M3で表現できる値を見てみましょう:
0付近(密):
0, 0.001953125, 0.00390625, 0.005859375, …
→ 非常に細かい刻み
1付近(中):
0.5, 0.625, 0.75, 0.875, 1.0, 1.25, 1.5, …
→ 適度な刻み
大きな値(粗):
64, 80, 96, 112, 128, 160, 192, …
→ 粗い刻み
最大値:
448
※ NVIDIA/OCP仕様のE4M3の場合。一部実装では240が最大値[2]
実務での選択
プロジェクトでFP8量子化を選ぶと、同じLlama 70Bが約70GBのまま、品質は約97〜99%を維持できます。INT8の約90〜94%と比べて向上します。この差は、例えば「自然な会話の流暢さ」や「文脈理解の正確性」として現れます。顧客満足度調査でいえば、4.2から4.5への向上に相当する可能性があり、これは契約更新率に直接影響します。
ここまでのまとめ
- INT8:256通りを等間隔に配置(-128~127を1刻み)
- FP8:256通りを対数的に配置(0付近は密、大きな値は粗)
- 計算:FP8はINT8の約10〜15倍複雑(3つのパーツを組み合わせる)
- 表現範囲:INT8は-128~127、FP8は-448~448(約3.5倍広い)
では、なぜFP8がニューラルネットワークに最適なのでしょうか?次のセクションで解説します。
第4部:なぜニューラルネットワークにFP8が最適なのか
4.1 ガウス分布(正規分布)とは
ここまでで、INT8とFP8の「表現方法」の違いを理解しました。しかし、なぜFP8がニューラルネットワークに最適なのでしょうか?
その答えは、ニューラルネットワークの重みの分布にあります。
まず、「ガウス分布(正規分布)」を理解しましょう。これは確率論で習う「山型」の分布です。
サイコロの実験:
- サイコロを1個振る:出る目は1~6でバラバラ(均一)
- サイコロを10個振って合計を取る:30~40が多く、10や60は少ない(山型)
- サイコロを100個振って合計を取る:よりはっきりした山型
この「山型」がガウス分布です。
ガウス分布の重要な性質
| 範囲 | 含まれるデータの割合 |
|---|---|
| 平均 ± 1σ(シグマ) | 68.3% |
| 平均 ± 2σ | 95.4% |
| 平均 ± 3σ | 99.7% |
つまり、データの大部分(68%)は中央付近に集中しているのです。
4.2 ニューラルネットワークの重みもガウス分布
驚くべきことに、訓練済みのニューラルネットワークの重みも、ガウス分布に従います。
訓練済みモデルの重みの典型的な分布:
- 平均:0付近(正則化の影響)
- 標準偏差(σ):モデルにより0.5~1.5程度
ここでは説明のために σ≒1 と仮定して計算します。
つまり:
- 約68%の重みは -1.0 ~ +1.0 の範囲
- 約95%の重みは -2.0 ~ +2.0 の範囲
- 約99.7%の重みは -3.0 ~ +3.0 の範囲
±3を超える重みは、わずか0.3%しかありません。
なぜこうなるのか?
- 初期化時:重みは意図的にガウス分布から選ばれます
- 訓練中:数億回の微小な調整の「合計」が重みになります
- 正則化:大きすぎる重みにはペナルティが課されます
これらすべてが、重みをガウス分布に近づけます。
4.3 INT8 vs FP8:効率の決定的な違い
ここで、INT8とFP8の効率を比較しましょう。
INT8での表現(もったいない使い方)
INT8は-128~127を256段階で、等間隔に表現します。
しかし、ニューラルネットワークの重みの68%は、-1~+1の範囲に集中しています。
-1~+1の範囲にINT8で何段階使えるか?
→ わずか3段階(256段階中の1.2%)
残りの253段階(98.8%)は、わずか32%のデータ(±1の外側)に使われます。
これは非常に無駄です。
FP8での表現(効率的な使い方)
FP8は対数分布なので、0付近に多くの段階を配分します。
-1~+1の範囲にFP8で何段階使えるか?
つまり、68%のデータに50%の精度を配分しています。
これは非常に効率的です。
| 値の範囲 | データの割合 | INT8の 段階数 |
INT8の 精度割合 |
FP8の段階数 | FP8の精度割合 |
|---|---|---|---|---|---|
| -1 ~ +1 | 68.3% | 3 | 1.2% | 約100〜130 | 約40〜50% |
| -2 ~ +2 | 95.4% | 5 | 2.0% | 約180〜210 | 約70〜80% |
| -3 ~ +3 | 99.7% | 7 | 2.7% | 約230〜245 | 約90〜95% |
| それ以外 | 0.3% | 249 | 97.3% | 約10〜25 | 約5〜10% |
※ FP8の段階数は指数E=6,7,8付近の概算値。実際の配分は仮数部の刻みにより変動します。
この表が、FP8の圧倒的な効率性を示しています。
4.4 実測データ:品質の違い
理論だけでなく、実際のモデルで測定してみましょう。
| 量子化形式 | ファイルサイズ | 品質(元のFP16比) |
|---|---|---|
| FP16(元) | 140GB | 100.0% |
| FP8 | 70GB | 約97〜99% |
| INT8 | 70GB | 約90〜94% |
※ 品質はPerplexityやベンチマークスコアでの測定値。モデルやタスクにより変動します[9]
同じ70GBでも、FP8はINT8より約5〜8%高品質です。
この差は小さく見えますが、実務では大きな違いを生みます:
ビジネスインパクトの例
- 顧客サポートチャットボット:応答の自然さが向上し、顧客満足度が4.2→4.5に改善。問い合わせ削減率が15%向上。
- コンテンツ生成:文章の流暢性が向上し、人間による修正時間が30%削減。
- 社内Q&Aシステム:回答精度が向上し、従業員の信頼度が上昇。利用率が40%増加。
実務での投資判断
FP8対応GPUは、非対応GPUと比べて15-20%高価です(例:RTX 4060 Ti vs 3060 Ti)。しかし、品質向上によるビジネス価値が、この価格差を正当化できるかどうかが判断のポイントです。顧客向けサービスなら投資価値は高く、社内実験用なら見送りも選択肢です。
第5部:まとめと次回予告
5.1 この記事のまとめ
この記事では、INT8とFP8の決定的な違いを学びました。
1. 同じ8bitでも使い方が全く違う
- INT8:256通りを等間隔に配置(階段)
- FP8:256通りを対数的に配置(望遠鏡)
2. FP8がAIに最適な理由
- ニューラルネットワークの重みはガウス分布に従う
- データの68%は中央(±1)に集中
- FP8は中央に精度を集中させる(50%の段階数)
- INT8は中央に1.2%しか割り当てない(無駄)
3. 実務でのインパクト
- 同じファイルサイズ(70GB)でも品質が6%違う
- この6%が顧客満足度、契約更新率、運用コストに影響
- GPU選定時の判断材料になる
4. 計算の複雑さ
- INT8:計算が簡単(加算器約280トランジスタ[5])
- FP8:6段階の複雑な処理(加算器約3,000〜4,000トランジスタ、約10〜15倍[5])
- だからNPUには載せられない
5.2 実務での判断基準
| 用途 | 推奨形式 | 理由 |
|---|---|---|
| 顧客向けサービス | FP8 | 品質重視、顧客満足度への影響大 |
| リアルタイム推論 | FP8 | 速度と品質のバランス |
| 社内実験・検証 | INT8 | コスト優先、レガシーHW活用 |
| 速度・コスト優先 | INT8 | 品質より速度・コスト重視 |
| 最高品質が必要 | FP16 | ファインチューニング、メモリに余裕 |
RAM 32GB環境での実践的な選択
- 7Bモデル:FP16でもOK(約14GB)、FP8なら約7GB
- 13Bモデル:FP8推奨(約13GB)、INT8も実用可(約13GB)
- 70Bモデル:FP8/INT8では無理(70GB)。Q4量子化必須(次回記事で解説)
5.3 次回予告
今回はINT8とFP8の基本を理解しました。しかし、実際にローカルLLMを使う際によく目にする量子化形式は他にもあります:
- Q4_K_M:「4bit」なのに実は「4.75bit」?
- IQ4_XS:「4.25bit」で33GB、RAM 32GBでもギリギリ動く
- NF4:正規分布に最適化された4bit
- K-quant:層ごとに精度を変える賢い方式
次回の記事では:
- すべての量子化フォーマットを完全解説
- 「平均ビット数」の秘密
- INT8演算器 vs FP8演算器の構造
- なぜNPUはFP8を載せられないのか(詳細)
特に「Q4_K_Mが4.75bit」という不思議な数字の意味を理解すると、量子化の本質がさらに深く見えてきます。RAM 32GBで70Bモデルを動かせるかどうかは、この0.5bitの差で決まります。
お楽しみに!
シリーズ もっとよく知るAI -量子化の魔法-
第1回 256通りの使い方:INT8とFP8、同じ8bitなのになぜこんなに違うのか?(本稿)
第2回 Q4_K_Mが4.75bit?量子化フォーマット完全ガイド
第3回 FP8標準化戦争:GoogleとNVIDIAの覇権争い
この記事は 当サイトの記事:AI量子化とNPUの真実:GPUに3世代遅れのNPU、技術の民主化は実現するのか の続きとなっています。
参考文献
[1] IEEE Standard for Floating-Point Arithmetic (IEEE 754-2019)
[2] Micikevicius, P., et al. (2022). “FP8 Formats for Deep Learning.” arXiv:2209.05433
[3] Dettmers, T., et al. (2023). “QLoRA: Efficient Finetuning of Quantized LLMs.” arXiv:2305.14314
[4] GGML Documentation (2024). “Quantization formats in GGUF”
[5] Hennessy, J.L., & Patterson, D.A. (2017). “Computer Architecture: A Quantitative Approach” (6th ed.)
[6] NVIDIA Developer Documentation (2024). “Transformer Engine Technical Overview”
[7] PyTorch Documentation (2024). “Quantization”
[8] 統計学基礎教材(ガウス分布の性質)
[9] Yao, Z., et al. (2022). “A Survey on Model Compression for Large Language Models.” arXiv:2308.07633
※ 本記事の内容は2025年1月時点の情報に基づいています。