FP8
FP8とは何か、E4M3とE5M2の仕組み、そしてスケーリング、ハードウェアサポート、混合精度がどのようにAIのトレーニングと推論を改善するのかを学びます。
FP8(8ビット浮動小数点数)は、各値を8ビットで格納する低精度の数値フォーマットです。AIシステムは互換性のあるハードウェア上でメモリトラフィックを削減し、行列積や畳み込み、その他の負荷の高い演算を高速化するためにFP8を使用します。FP16やFP32と比較して表現できる値の種類が少ないため、成功するFP8ワークフローでは、モデルの品質を維持するために、高速な低精度演算とスケーリング、および選択的な高精度演算を組み合わせて使用します。
Link to this sectionFP8が数値を表現する仕組み#
浮動小数点数の値には、符号、範囲を制御する指数部、および詳細を制御する仮数部が含まれます。FP8は、PyTorch floating-point data typesで文書化されている2つのフォーマットで一般的に使用されます:
- E4M3: 1つの符号ビット、4つの指数ビット、3つの仮数部ビット。数値の詳細情報を多く提供しますが、表現できる範囲は狭くなります。
- E5M2: 1つの符号ビット、5つの指数ビット、2つの仮数部ビット。より広い範囲をカバーしますが、値の丸め処理がよりアグレッシブに行われます。
E4M3は重みや活性化関数に適していることが多く、一方のE5M2は値の範囲が広い勾配をより良く収容できます。AMD low-precision floating-point documentationに示されているように、正確なバリアントはプラットフォームによって異なるため、FP8モデルがすべてのアクセラレータとランタイムの間で自動的に移植可能になるわけではありません。
8ビットではテンソルの元の全範囲と詳細を表現できないため、フレームワークは通常、変換前に値をスケーリングファクターで乗算します。NVIDIA’s FP8 scaling primerでは、以前に観測された最大値から将来のスケールを導出する遅延スケーリングなどの戦略について説明しています。スケーリングにより、すべての演算を高精度で実行しなくても、オーバーフロー、アンダーフロー、および飽和を制限できます。
Link to this sectionFP8と関連フォーマットの比較#
FP8は、一般的なAIデータタイプの中で中間的な位置を占めています:
- FP16または半精度: 2倍のビットを使用し、より高い数値の詳細と一般的にシンプルなトレーニングを提供します。FP8はストレージと帯域幅をさらに削減できますが、より慎重なスケーリングが必要です。
- BF16: FP16よりも小数部分の詳細を減らしつつ、広い指数範囲を維持します。FP8トレーニングにおいて、高精度側のコンパニオンとしてよく使用されます。
- INT8: 浮動小数点数ではなく整数を表します。INT8のモデル量子化は通常、実数を固定の整数レベルにマッピングするためにスケールに依存しますが、FP8は自然に不均一な間隔を維持するために指数部を保持します。
- FP4: わずか4ビットしか使用せず、より高い圧縮を提供できますが、極端に制限された範囲と粒度のせいで精度維持が通常より難しくなります。
FP8は、すべてのテンソルのデータタイプというよりも、混合精度ワークフローの一部として頻繁に使用されます。累積、正規化、オプティマイザの状態、または機密性の高いレイヤーは、BF16、FP16、またはFP32のままにされる場合があります。また、数値の精度は、モデルの正解予測の割合を測定する精度評価指標とは異なります。
Link to this section実社会での応用#
2つの実践的なアプリケーションが、なぜFP8が重要であるかを示しています:
-
大規模モデルのトレーニング: Transformerのトレーニングでは、大規模な行列積が繰り返し実行されます。FP8対応のフレームワークは、安定性が必要な場所で高精度を維持しながら、適格な重みと活性化関数をFP8にキャストできます。これにより帯域幅の要求が軽減され、トレーニングのスループットが向上する可能性があります。TorchAO quantized-training workflowには、最大速度と外れ値のより優れた処理能力のバランスを取るテンソル単位および行単位のスケーリングの選択肢が含まれています。
-
高スループットのビジョン推論: データセンターは、数百のリテール、トラフィック、または製造業のビデオストリームにわたって物体検出を実行する場合があります。FP8対応のカーネルは、適格なモデルレイヤーが使用する時間とメモリを削減し、推論レイテンシを低下させ、同時ストリーム容量を増加させる可能性があります。TensorRT quantized-types guideでは、明示的な量子化および逆量子化の操作がFP8実行をどのように記述するかについて説明しています。
Link to this section数値的リスクとハードウェアサポート#
不適切なスケーリングは、大きな値の飽和や小さな値のゼロへの丸めを引き起こす可能性があります。1つのスケールがテンソル全体をカバーする場合、外れ値は特に問題になります。これらの効果は信頼度スコアをシフトさせ、トレーニングを不安定にさせたり検出精度を低下させたりする可能性があるため、開発者は変換されたモデルを高精度なベースラインと比較して検証する必要があります。
ネイティブハードウェアのサポートも同様に重要です。NVIDIA Hopper architectureはFP8 Tensor Coreアクセラレーションを導入しましたが、古いNVIDIA A100 GPUはFP16、BF16、INT8をサポートしているものの、ネイティブのFP8計算はサポートしていません。そのため、デプロイの精度を選択する前に、TensorRT hardware support matrixを確認する必要があります。
Link to this section実践でのFP8の操作#
この小さなPyTorchの例は、E4M3への変換と、FP8の値がFP32に復元されたときに発生する丸め誤差を示しています:
import torch
values = torch.tensor([0.1, 1.0, 3.14, 100.0], dtype=torch.float32)
# Convert to E4M3 FP8, then restore the values for comparison.
fp8_values = values.to(torch.float8_e4m3fn)
restored = fp8_values.to(torch.float32)
absolute_error = (restored - values).abs()
print(torch.stack((values, restored, absolute_error), dim=1))The documented Ultralytics TensorRT export workflow provides FP16 and calibrated INT8 options for Ultralytics YOLO rather than a one-argument FP8 export. FP8 deployment therefore requires a compatible downstream conversion toolchain. Whatever precision is selected, use Ultralytics benchmark mode on the target GPU to compare latency, throughput, memory use, and task accuracy before production deployment.






