混合精度トレーニング
混合精度トレーニングは、ほとんどの演算を 32 ビットではなく 16 ビット浮動小数点で実行することで、ニューラル ネットワークのトレーニングを高速化し、メモリ使用量を削減します。
概要
It lets the same GPU train bigger models faster with almost no loss in accuracy.
ディープダイブ
従来のトレーニングでは、重みを保存し、32 ビット浮動小数点 (FP32) で計算を実行します。混合精度では、安定した更新のために重みの 32 ビット「マスター コピー」を保持しながら、重みのある行列の乗算に低精度の 16 ビット形式 (FP16 または bfloat16) を使用します。 16 ビット数値はサイズが半分であるため、GPU メモリにより多く適合し、Tensor コアはそれらをおよそ 2 ~ 8 倍高速に処理します。問題は、FP16 の範囲が狭いことです。小さな勾配がゼロにアンダーフローする可能性があります。標準的な修正は損失スケーリングです。これは、バックプロパゲーションの前に損失に大きな係数を乗算して、小さな勾配を表現可能な状態にし、重みの更新前にそれを割り戻します。 NVIDIA の Apex と、PyTorch および TensorFlow の組み込み AMP (Automatic Mixed Precision) がこれを自動化します。
技術的な洞察
FP16 には指数ビットが 5 つしかないため、ダイナミック レンジが小さくなり、勾配アンダーフローが発生します。 Bfloat16 は 8 つの指数ビット (FP32 の範囲に一致) を維持しますが、仮数ビットは少ないため、ロス スケーリングがほとんど必要ありません。これが、Google TPU と最新の GPU が Bfloat16 を好む主な理由です。 Tensor コアは、16 ビット オペランドを乗算するだけでなく、部分和を FP32 で累積することで作業を高速化します。これにより、総和エラーが増大する可能性がある精度が維持されます。
戦略的影響
費用と予算
アーキテクチャの決定により、パフォーマンスと運用コストが何年にもわたって推進されます。
より明確な判決
技術教育は、チームが最新のスタックだけでなく、適切なスタックを選択するのに役立ちます。
品質管理
より良いエンジニアリングの選択により、本番環境での信頼性に関するインシデントが減少します。
混合精度トレーニングの未来
精度はどんどん下がっていきます。 NVIDIA Hopper および Blackwell GPU でサポートされている FP8 トレーニングは、フロンティア モデルの標準になりつつあり、FP4 およびマイクロスケーリング フォーマット (MXFP) の研究がさらに進んでいます。フレームワークによるレイヤーごとの精度の自動選択、ハードウェアによるますます狭い形式のネイティブ処理、量子化対応トレーニングによる低精度トレーニングと推論の境界線があいまいになり、兆パラメータ モデルのトレーニング コストが削減されることが期待されます。
現実世界の実装
PyTorch の torch.cuda.amp.autocast がトレーニング ループをラップして、単一の GPU でメモリを約半分にし、スループットを 2 倍にします。
損失スケーリング調整を回避するために、TPU 上の bfloat16 で GPT スタイルのトランスフォーマーのような大規模な言語モデルをトレーニングする
ResNet イメージ トレーニングを FP32 から FP16 に切り替えることにより、コンシューマ RTX GPU でより大きなバッチ サイズを適合させる
NVIDIA H100 GPU での FP8 混合精度により、フロンティアスケールのモデルの事前トレーニングのコストを削減
リスクとガードレール
1 つのベンチマークを最適化すると、より広範なシステムの弱点が隠れる可能性があります。
インフラストラクチャとメンテナンスのコストは過小評価されがちです。
システムが複雑になるにつれて、セキュリティと可観測性のギャップが拡大する可能性があります。
実装ロードマップ
実装前にレイテンシ、品質、コストの目標を定義します。
現実的な負荷とデータ条件でのベンチマーク。
エラー、ドリフト、ユーザーへの影響を計測器で監視します。
スケーリングの前に、ロールバックとインシデント対応のパスを準備します。
探検を続けましょう
Free newsletter
Get the daily AI briefing
Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.
One email each weekday. Unsubscribe in one click. We never sell or share your address.
Test yourself
Take the Mixed Precision Training quiz
Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.
Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation
次のガイド
疑似ラベル付けと自己トレーニング
よくある質問
What is Mixed Precision Training?
混合精度トレーニングは、ほとんどの演算を 32 ビットではなく 16 ビット浮動小数点で実行することで、ニューラル ネットワークのトレーニングを高速化し、メモリ使用量を削減します。これにより、精度をほとんど損なうことなく、同じ GPU でより大きなモデルをより高速にトレーニングできるようになります。
混合精度トレーニングでは重みの 32 ビット「マスター コピー」が保持されるのはなぜですか?
重みの更新は非常に小さいことがよくあります。 16 ビットで蓄積すると精度が失われるため、完全精度のマスター コピーによって更新の正確さが保たれます。
損失スケーリングは FP16 トレーニングでどのような問題を解決しますか?
FP16 のダイナミック レンジは限られているため、小さな勾配はゼロに丸められる可能性があります。バックプロップの前に損失を乗算することで、表現可能性が保たれます。
bfloat16 には FP16 と比べてどのような利点がありますか?
Bfloat16 は FP32 と同様に 8 つの指数ビットを保持するため、ダイナミック レンジが広く、勾配のアンダーフローはまれです。
Tensor コアは 16 ビット入力を使用しながら精度をどのように維持しますか?
Tensor コアは 16 ビット オペランドを乗算しますが、32 ビットで累算するため、合計エラーが悪化するのを防ぎます。
トレーニング中に 32 ビット値の代わりに 16 ビット値を使用する主な利点は何ですか?
半角数値を使用すると、より多くのデータが GPU メモリに収まり、専用のハードウェアが行列計算を数倍高速に処理できるようになります。