BF16 / FP16 / TF32 の違い 2026年版
BF16 / FP16 / TF32 / FP32 の違いを、指数部・仮数部のビット配分・ダイナミックレンジ・GPU 世代別対応 (Ampere〜Blackwell) と Apple Silicon MPS 対応で整理します。RTX 5090 / RTX PRO 6000 / H100 / M4 Max / M3 Ultra で BF16 と FP16 のどちらが速いか、なぜ学習は BF16・推論は FP16 や INT8 が主流になったか、低精度 NVFP4 / MXFP4 / FP8 とどう組み合わせるかを 2026 年の実務視点で解説します。
- #BF16
- #FP16
- #TF32
- #FP32
- #浮動小数点
- #Tensor Core
- #ローカルLLM
- #RTX 5090
- #H100
- #Apple Silicon
本記事は Amazon.co.jp および各販売店のアフィリエイトリンクを含む場合があります。推奨は性能・コスパ・実機ベンチマーク基準で編集判断しており、提供記事は受け付けていません。詳細は プライバシーポリシー をご覧ください。

結論:BF16 は FP32 と同じ 8bit 指数を持ちダイナミックレンジが広いため学習向き、FP16 は 5bit 指数と狭い代わりに 10bit 仮数で精度が細かく推論向き、TF32 は Ampere 以降の Tensor Core が『FP32 API のまま裏で 19bit に落として高速化する』互換モードです。ローカル LLM 実務では学習 = BF16 混合精度、推論 = FP16 か INT8 / FP8 / NVFP4 が 2026 年時点の標準で、GGUF (Q4_K_M) は FP16 経由の量子化、Apple Silicon は M2 以降 BF16 対応、Blackwell (RTX 5090) は BF16 / FP16 / FP8 / NVFP4 まで全てネイティブ演算します。
BF16 / FP16 / TF32 / FP32 早見表
判断に必要な情報を 1 枚にまとめます。以降の各章はこの表の数字を掘り下げる形で読んでください。
| フォーマット | ビット幅・内訳 (符号+指数+仮数) | ダイナミックレンジ | 精度 (仮数) | ハード対応の主起点 | 主な用途 |
|---|---|---|---|---|---|
| FP32 | 1 + 8 + 23 = 32bit | ±3.4×10^38 | 高精度 (7 桁) | すべての GPU / CPU | 精度検証・オプティマイザ状態・BN 統計 |
| TF32 | 1 + 8 + 10 = 19bit (実質) | FP32 と同じ | FP16 と同じ | Ampere (A100 / RTX 30) 以降の Tensor Core | FP32 コードの透過的高速化 |
| BF16 | 1 + 8 + 7 = 16bit | FP32 と同じ | 粗い (約 2〜3 桁) | Ampere 以降・M2 以降 | 学習 (混合精度) の主流 |
| FP16 | 1 + 5 + 10 = 16bit | ±6.55×10^4 | 高精度 (約 3〜4 桁) | Volta (V100) 以降・M1 以降 | 推論・GGUF 化前の中間表現 |
3 行で言うと、FP32 は「基準」、TF32 は「Ampere Tensor Core 用の互換モード」、BF16 は「FP32 の指数を保ったまま仮数を削って学習向きに」、FP16 は「指数を削って仮数を残して推論向きに」した 16bit です。
「浮動小数点」の基本:符号・指数・仮数
浮動小数点は、ビットを 符号 (sign) / 指数 (exponent) / 仮数 (mantissa) に割り振って数値を表す形式です。表記の E〇M〇 はこの内訳を意味します。
- 符号 (sign): 1bit で正負を表す
- 指数 (exponent): 数値の桁 (2 の何乗か) を表す。ここが多いほど『扱える最大値と最小値の幅 = ダイナミックレンジ』が広い
- 仮数 (mantissa): 有効数字を表す。ここが多いほど『同じ桁の中での精度』が細かい
FP32 は 1 + 8 + 23 で、指数 8bit・仮数 23bit という配分です。16bit に半減させるときに『指数を削るか・仮数を削るか』の 2 通りがあり、この選択が BF16 と FP16 の分岐点です。
BF16 (Brain Floating Point 16) — Google Brain が定義した「FP32 の指数」
BF16 は Google Brain が TPU v2 (2017 年) と共に投入した 16bit 浮動小数点で、1 + 8 + 7 の配分です。ポイントは 指数 8bit を FP32 と同じにする ことで、FP32 と同じダイナミックレンジ (±3.4×10^38) を保ちます。仮数は 7bit と粗くなり、有効数字はおおよそ 3 桁弱まで落ちます。
なぜ学習で BF16 が選ばれるかというと、深層学習の勾配 (gradient) は数値の大小が極端に広がりやすく、FP16 (指数 5bit で最大 ±6.55×10^4) だと勾配が範囲外に飛び出して NaN になったり、逆に 0 に潰れて消失したりする問題が起きやすいためです。BF16 は仮数の細かさは犠牲にする代わりに、FP32 と同じ範囲で数値を扱えるため、勾配の爆発 / 消失を根本から回避できます。
FP16 (Half Precision) — Volta 以降の Tensor Core が最初に対応した 16bit
FP16 (IEEE 754 half) は 1 + 5 + 10 の配分で、指数 5bit・仮数 10bit です。指数は狭いため、扱える数値の最大は約 65,504 (±6.55×10^4)、最小は約 6.1×10^-5 で、範囲を超えると overflow / underflow が起きます。代わりに仮数 10bit で有効数字は約 4 桁弱と、BF16 より精度が細かく出ます。
FP16 は Volta (V100) の第 1 世代 Tensor Core が最初にハードネイティブ対応した 16bit フォーマットで、2017〜2020 年頃の混合精度学習 (mixed precision training) は FP16 + FP32 マスタウェイトの構成が主流でした。ただし FP16 の狭いダイナミックレンジが原因で loss scaling と呼ばれる工夫 (勾配を一時的にスケール倍して underflow を回避する) が必要になり、コードが複雑化しました。BF16 対応が Ampere で入ってからは、学習側はほぼ BF16 に移行しています。
TF32 (TensorFloat-32) — Ampere が導入した「FP32 API のまま裏で 19bit」
TF32 は 2020 年の Ampere (A100) で導入された NVIDIA 独自の内部フォーマットで、1 + 8 + 10 の実質 19bit です。指数は FP32 / BF16 と同じ 8bit で、ダイナミックレンジは FP32 と同じ。仮数は FP16 と同じ 10bit に削っています。
TF32 の特徴は アプリケーション側は FP32 のまま扱える 点で、Tensor Core が行列演算の入力を裏で TF32 に落として計算し、結果を FP32 に戻します。既存の FP32 学習コードを書き換えずに、Ampere の Tensor Core を活用して数倍高速化する目的の互換モードで、PyTorch では torch.backends.cuda.matmul.allow_tf32 = True などのフラグで制御します。
ただし 2026 年時点では、新規に学習コードを書くなら TF32 経由の高速化より、明示的に BF16 混合精度を指定するほうが 2 倍近く速く、精度も安定します (H100 SXM dense で BF16 = 989 TFLOPS vs TF32 = 494 TFLOPS)。TF32 は『既存の FP32 コードを触らずに Ampere / Hopper で走らせる』用途に限定される互換モードになりつつあります。
3 つの比較:ダイナミックレンジと精度のトレードオフ
同じ 16〜19bit でも、ビットの割り振り方でダイナミックレンジと精度が真逆になるのが浮動小数点の面白いところです。
| フォーマット | 指数 bit | 最大値 | 最小値 | 仮数 bit | 有効数字 |
|---|---|---|---|---|---|
| FP32 | 8 | ±3.4×10^38 | ±1.2×10^-38 | 23 | 約 7 桁 |
| TF32 | 8 | ±3.4×10^38 | ±1.2×10^-38 | 10 | 約 3〜4 桁 |
| BF16 | 8 | ±3.4×10^38 | ±1.2×10^-38 | 7 | 約 2〜3 桁 |
| FP16 | 5 | ±6.55×10^4 | ±6.1×10^-5 | 10 | 約 3〜4 桁 |
BF16 と FP16 は同じ 16bit なのに、扱える数値の最大値が『10^38 対 10^4』と 34 桁も違います。この差が『勾配爆発を起こしやすい学習では BF16 が優位、数値範囲が狭くて済む推論では FP16 の精度が生きる』という使い分けの本質です。
GPU 世代別対応表 (NVIDIA)
BF16 / FP16 / TF32 のハードウェア対応は Tensor Core の世代でひとつずつ広がってきました。
| 世代 (代表 GPU) | Tensor Core | FP16 | BF16 | TF32 | FP8 | FP4 |
|---|---|---|---|---|---|---|
| Volta (V100) | 第 1 世代 | ○ | × | × | × | × |
| Turing (T4 / RTX 20) | 第 2 世代 | ○ | × | × | × | × |
| Ampere (A100 / RTX 30) | 第 3 世代 | ○ | ○ | ○ | × | × |
| Ada (RTX 40) | 第 4 世代 | ○ | ○ | ○ | ○ | × |
| Hopper (H100 / H200) | 第 4 世代 | ○ | ○ | ○ | ○ | × |
| Blackwell (B200 / RTX 50 / RTX PRO 6000) | 第 5 世代 | ○ | ○ | ○ | ○ | ○ (NVFP4 / MXFP4) |
ローカル LLM 用途で押さえるべき境目は 2 つです。まず Ampere (2020) 以降 なら BF16 / TF32 が使えるため、中古で RTX 3090 / A100 を買っても学習は BF16 混合精度で回せます。次に Blackwell (2024〜) で FP4 (NVFP4 / MXFP4) がネイティブ対応し、4bit 推論の速度と省電力が一段跳ねました。FP8 は Ada / Hopper 以降なので、RTX 4090 / H100 でも動きます。詳しい NVFP4 / MXFP4 / FP8 の使い分けは「NVFP4 vs MXFP4 vs FP8 とは 2026年版」で扱っています。
Apple Silicon (M2 以降) と Metal Performance Shaders
Apple Silicon 側の BF16 対応は M2 世代 (2022) から始まりました。
- M1 世代 (2020): FP16 のみ対応。PyTorch MPS で BF16 を要求すると FP32 フォールバックが起きる
- M2 / M3 / M3 Ultra / M4 / M4 Max (2022〜): Metal Performance Shaders (MPS) で BF16 をハードサポート
- Neural Engine: 全世代で FP16 / INT8 に対応、BF16 は M2 以降のみ。Core ML 経由でのみアクセス可能
ローカル LLM 実務では、llama.cpp の Metal バックエンド、MLX、PyTorch MPS のいずれも M2 以降で BF16 モデルを直接ロードできます。特に Mac Studio M3 Ultra 512GB は、Llama 4 Scout (109B、BF16 で約 218GB) を BF16 のまま展開でき、Maverick (400B、BF16 では約 800GB で 512GB を超えるため不可) も Q4 量子化 (約 200GB) なら余裕で載るため、大規模モデルを FP16 / BF16 のまま扱いたいユースケースで唯一無二の存在です。詳しい容量別の動作範囲は「Mac Studio M3 Ultra 512GB でローカルLLM 完全ガイド 2026年版」で整理しています。
なぜ学習は BF16、推論は FP16 / Q4 が主流か
ここまでの話をつなぐと、学習と推論で最適な精度が違う理由がはっきりします。
- 学習では勾配の範囲が広い: 勾配は前向き値より数桁小さいことがあり、underflow (0 に潰れる) と overflow (NaN 発火) の両方が起きやすくなります。FP16 の狭い指数では loss scaling が必要になりますが、BF16 なら FP32 と同じ範囲で扱えて工夫がいりません。だから 学習 = BF16 混合精度 が主流です
- 推論では数値範囲が狭く、精度が効く: 学習済みモデルの活性化値と重みは、学習中の勾配ほど極端な範囲を取りません。むしろ細かい数値精度が出力品質に効きます。FP16 の 10bit 仮数は BF16 の 7bit より粗さが目立たず、体感品質は高くなります
- さらに 4bit / 8bit の量子化で追加圧縮: FP16 の重みを INT8 / INT4 (GGUF Q4_K_M / Q5_K_M) / FP8 / NVFP4 に圧縮してメモリと帯域を減らします。llama.cpp の GGUF は FP16 経由の量子化、TensorRT-LLM / vLLM は BF16 → FP8 / NVFP4 経由の量子化が典型です
推論側で KV cache の精度も別軸の話で、これは「ローカル LLM の KV cache 量子化ガイド 2026年版」で詳しく扱っています。
ローカル LLM 実務での使い分けチャート
| 用途 | 推奨フォーマット | 理由 |
|---|---|---|
| LoRA / QLoRA 学習 (RTX 3090 / 4090) | BF16 (混合精度) | 4bit LoRA でも計算は BF16、Ampere 以降で高速化 |
| 大規模 pretrain (H100 / B200) | BF16 (FP8 混合含む) | H100 SXM は dense BF16 = 989 TFLOPS (2:4 sparsity で 1,979)、B200 は dense FP8 = 4,500 TFLOPS |
| ローカル推論 (vLLM / TensorRT-LLM) | BF16 → FP8 / NVFP4 | Blackwell (RTX 5090) で NVFP4 が最速 |
| llama.cpp / GGUF 推論 | FP16 経由 Q4_K_M / Q5_K_M | GGUF エコシステムは FP16 中間表現が標準 |
| Mac Studio M3 Ultra 512GB 推論 | BF16 直接 or MLX 4bit | Unified Memory 大容量を活かして BF16 のまま |
| Flash Attention 2/3 経由 | BF16 or FP16 | Flash Attention は BF16 / FP16 が前提、FP32 では動作せず |
Flash Attention 側の細かい話は「Flash Attention 2/3 とは 2026年版」で解説しています。メモリ帯域と tok/sec の関係は「メモリ帯域幅 (GB/s) がローカル LLM の tok/sec を決める仕組み 2026年版」で、量子化フォーマット (GGUF / GPTQ / AWQ / EXL2) は「ローカル LLM の量子化フォーマットとは 2026年版」で扱っています。
私の見立て:Ampere 中古で BF16、Blackwell 新品で NVFP4 が 2026 年の分岐
2026 年 8 月時点でローカルLLM を始める人には、次の 2 択が最短ルートです。
- 中古 RTX 3090 24GB (Ampere) → BF16 で LoRA 学習と 70B Q4 推論まで。BF16 対応で新規学習コードもフルに書ける。予算 8〜12 万円 (中古)
- 新品 RTX 5090 32GB (Blackwell) → BF16 学習 + NVFP4 推論のフル装備。4bit 推論が最速、Blackwell 世代の第 5 世代 Tensor Core で 8bit 未満まで対応。予算 40〜50 万円
Ada 世代 (RTX 4090) は FP8 対応で悪くありませんが、FP4 が無いため 2026〜27 年の推論最適化トレンドで Blackwell に置いていかれる可能性があります。「今から新品で 1 枚買うなら RTX 5090」「予算優先で中古なら RTX 3090」というのが浮動小数点フォーマット対応から見た分岐点です。
入手先・関連商品
当サイトは Amazon.co.jp アソシエイト・プログラムに参加予定です。下記リンク経由で購入された場合、紹介料を受け取ることがあります。読者の負担は増えません。リンクは記事評価とは独立しており、編集判断には影響しません。
Blackwell 世代 GPU (BF16 + FP8 + NVFP4 フル対応)
- NVIDIA GeForce RTX 5090 を Amazon.co.jp で見る — 32GB VRAM、第 5 世代 Tensor Core、NVFP4 ハードネイティブ
- NVIDIA RTX PRO 6000 Blackwell 96GB を Amazon.co.jp で見る — Blackwell ワークステーション、BF16 大規模学習用
Apple Silicon (M2 以降 BF16 対応)
- Apple MacBook Pro 16 M4 Max 48GB を Amazon.co.jp で見る — MPS 経由で BF16 学習可、546GB/s メモリ帯域
- Mac Studio M3 Ultra を Apple公式サイトで見る — Unified Memory 512GB、BF16 で 400B クラスを直接ロード可 (Amazon.co.jp 非取扱、こちらからは紹介料が発生しません)
あなたに合うPCを診断する
用途や予算をもう少し細かく入力すると、3つの候補構成を提案します。
→ 診断スタート
関連記事
- NVFP4 vs MXFP4 vs FP8 とは 2026年版:Blackwell の 4bit 浮動小数点をローカルLLM で使う
- ローカル LLM の量子化フォーマットとは 2026年版:GGUF / GPTQ / AWQ / EXL2 の使い分け
- ローカル LLM の KV cache 量子化ガイド 2026年版:長コンテキストで VRAM を半分に
- Flash Attention 2/3 とは 2026年版:BF16 / FP16 前提の Attention 高速化と VRAM 節約の仕組み
- メモリ帯域幅 (GB/s) がローカル LLM の tok/sec を決める仕組み 2026年版:VRAM 容量より『帯域』を見るべき理由
よくある質問
- BF16 と FP16 はどちらを選ぶべきですか?
- 学習 (train) は BF16、推論 (inference) は FP16 か INT8 / FP8 / NVFP4 が 2026 年時点の実務標準です。BF16 は FP32 と同じ 8bit 指数を持つためダイナミックレンジ (表現できる大小の幅) が広く、勾配の爆発 / 消失を回避しやすい特性が学習向きです。FP16 は 5bit 指数で範囲が狭い代わりに 10bit 仮数で精度が細かく、推論で必要な数値精度に強く出ます。ローカル LLM の推論ランタイム (vLLM / TensorRT-LLM) は BF16 対応が中心で、llama.cpp / GGUF は FP16 経由の量子化 (Q4_K_M / Q5_K_M 等) を通すのが標準です。
- TF32 とは何ですか?
- TF32 (TensorFloat-32) は NVIDIA Ampere 世代の Tensor Core が対応する数値フォーマットで、1bit 符号 + 8bit 指数 + 10bit 仮数 = 実質 19bit の内部表現です。API 上は FP32 として扱えるまま、Tensor Core が裏で TF32 に落として計算する『透過的な高速化』の仕組みで、FP32 精度の学習をコード変更なしで数倍速くする目的で導入されました。BF16 と同じ 8bit 指数を持つため FP32 と同じダイナミックレンジを保ちながら、仮数だけ FP16 相当の 10bit に削っています。
- BF16 と FP16 のビット配分はどう違いますか?
- BF16 は 1bit 符号 + 8bit 指数 + 7bit 仮数 = 16bit で、FP32 (1+8+23) と同じ 8bit 指数を持ちます。FP16 は 1bit 符号 + 5bit 指数 + 10bit 仮数 = 16bit で、指数が 5bit と狭い代わりに仮数を 10bit と厚めに取ります。同じ 16bit でも『指数 8bit + 仮数 7bit』と『指数 5bit + 仮数 10bit』でダイナミックレンジと精度のトレードオフが逆になっており、これが『BF16 = 学習向き、FP16 = 推論向き』という使い分けの根拠になっています。
- Apple Silicon (M4 Max / M3 Ultra) は BF16 に対応していますか?
- M2 以降の Apple Silicon (M2 / M3 / M3 Ultra / M4 / M4 Max) は Metal Performance Shaders (MPS) 経由で BF16 をハードウェアサポートします。M1 世代 (Neural Engine 含む) は BF16 が実装されておらず、PyTorch MPS バックエンドで BF16 を要求すると FP32 にフォールバックします。ローカルLLM 実務では llama.cpp / MLX の両ランタイムで BF16 / FP16 モデルを直接ロードでき、Mac Studio M3 Ultra 512GB では Llama 4 Scout (109B、BF16 で約 218GB) を BF16 のまま、Maverick (400B、BF16 で約 800GB) は Q4 量子化 (約 200GB) で Unified Memory に展開できます。
- RTX 5090 は BF16 / FP16 / FP8 / NVFP4 のどれをネイティブ演算できますか?
- RTX 5090 (Blackwell 世代) の第 5 世代 Tensor Core は BF16 / FP16 / TF32 / FP8 (E4M3 / E5M2) / FP6 / FP4 (NVFP4 / MXFP4) をハードウェアネイティブに演算します。Ada 世代 (RTX 40) が FP8 まで、Hopper (H100) も FP8 まで、Ampere (RTX 30 / A100) は BF16 / TF32 / FP16 までで、FP4 と MXFP4 / NVFP4 は Blackwell からの新規追加です。ローカル LLM で重要なのは BF16 / FP16 が Ampere 以降ならどの世代でも高速化される点で、これが Ampere (RTX 3090 / A100) が中古市場で今も現役の理由になっています。
- H100 で TF32 と BF16 のどちらが速いですか?
- H100 (Hopper) の第 4 世代 Tensor Core では、公称 TFLOPS で BF16 = 989 TFLOPS、TF32 = 494 TFLOPS と BF16 が約 2 倍速です (dense・Sparsity なし・SXM 版、2:4 sparsity を効かせるとそれぞれ 1,979 / 989 TFLOPS)。BF16 が TF32 の半分のビット数で 2 倍のスループットを出すのは Tensor Core の設計上の常識で、TF32 は『FP32 コードのまま透過的に高速化したい』用途の互換モード、BF16 は『新規学習コードで明示的に BF16 を使う』本命という位置付けです。学習コード側で明示的に BF16 混合精度を書けば TF32 は基本使いません。
- FP32 は今も使いますか?完全に不要になりましたか?
- 学習の一部 (勾配蓄積・BatchNorm 統計・オプティマイザ状態) と、精度検証のリファレンス実装ではまだ FP32 が使われます。ただし主要演算 (行列積・畳み込み) は 2026 年時点で BF16 混合精度 (BF16 前向き + FP32 マスタウェイト) が完全に主流で、FP32 純粋演算は Tensor Core を活用できず速度も 1/2 以下になるため、大規模学習で純 FP32 を選ぶ理由はほぼ無くなりました。ローカルLLM の推論では FP32 モデルはほぼ流通しておらず、BF16 / FP16 / Q4 のいずれかで配布されます。
- GGUF の Q4_K_M は BF16 / FP16 のどちらから量子化されていますか?
- llama.cpp / GGUF エコシステムの Q4_K_M は、通常 FP16 の原モデルから量子化されます。BF16 で学習・配布されたモデル (Llama 3 系、Qwen 系など) を GGUF 化するときは、まず一度 FP16 に変換し、その後 Q4_K_M / Q5_K_M / Q8_0 などの整数量子化を掛けます。この過程で BF16 → FP16 のダイナミックレンジ縮小が起きますが、LLM 重みの実測分布では FP16 の範囲で概ね収まるため、実用上の精度劣化は Q4 量子化そのものより小さいのが通例です。