# 混合精度訓練 ## 定義 混合精度訓練とは、深層学習の訓練過程でモデルのパラメータ・勾配・オプティマイザ状態・アクティベーションを単一の精度(FP32)ではなく、複数の異なる浮動小数点精度(FP16/BF16/FP8 等)に使い分けることで、速度向上・メモリ削減・通信コスト削減を図りつつ、FP32 訓練と同等の精度を維持する手法の総称。Micikevicius ら(2017)が FP16 混合精度を確立し、大規模言語モデル(LLM)訓練では BF16 混合精度が主流となり、2023 年以降は FP8 へのさらなる拡張が実用段階に入った。 主要な精度レベルと特性: | 形式 | 最大値 | 精度 | 特性 | |---|---|---|---| | FP32 (S1E8M23) | 3.40×10^38 | 相対誤差 ~10^-7 | 基準精度。計算コスト大 | | BF16 (S1E8M7) | 3.39×10^38 | 相対誤差 ~10^-2 | FP32 と同じ動的範囲。LLM 訓練の主流 | | FP16 (S1E5M10) | 65,504 | 相対誤差 ~10^-3 | 動的範囲が狭く、100B 超では不安定 | | FP8 E4M3 (S1E4M3) | 448 | 相対誤差 ~10^-1 | 精度高めだが範囲狭。テンソルスケーリング必須 | | FP8 E5M2 (S1E5M2) | 57,344 | 相対誤差 ~2×10^-1 | 範囲広め。FP16 と同範囲 | 訓練変数の精度感度(精度分離の原則、FP8-LM より): - **高精度必須**: マスタ重み(更新量が極小のため精度損失が直接精度劣化に連鎖)、第二次勾配モーメント(二乗計算でアンダーフロー感度高) - **低精度許容**: 第一次勾配モーメント(方向情報が主で大きさの精度要件が低い)、GEMM 計算の中間アクティベーション ## 横断的知見 - **FP16 から BF16 への移行**: BF16 は FP16 と同じ 16 ビット幅でありながら FP32 と同じ指数ビット数(8 ビット)を持ち、100B 超のモデルで顕在化した FP16 の数値不安定問題を解消した。Bloom-175B・Gopher・Chinchilla ら大規模モデルが BF16 混合精度を採用している。([[@2023__arXiv__FP8-LM Training FP8 Large Language Models]]) - **FP8 への拡張**: NVIDIA H100 GPU(Hopper アーキテクチャ)の登場(2022 年)で FP8 ハードウェアサポートが初めて実用化された。先行する NVIDIA Transformer Engine(TE)は GEMM 計算のみ FP8 化したが、勾配・オプティマイザ状態・集団通信は FP16/FP32 のままであった。FP8-LM(Microsoft、2023 年)は訓練全段階への FP8 浸透を実現し、TE 比で GPT-175B のメモリを 42% 追加削減した。([[@2023__arXiv__FP8-LM Training FP8 Large Language Models]]) - **テンソルスケーリングが FP8 実用化の鍵**: FP8 の動的範囲はアンダーフロー・オーバーフローを生じやすい。per-tensor スケーリング(遅延スケーリングまたは即時スケーリング)によりテンソル値を FP8 表現範囲に収め、量子化誤差を抑制する。FP8-LM ではさらに FP8 all-reduce 向けに全 GPU 共有の単一スカラー $s'_g = \min(s'_1, \ldots, s'_N)$ を導入し、NCCL 互換性を維持しつつ FP8 集団通信を実現した。([[@2023__arXiv__FP8-LM Training FP8 Large Language Models]]) - **精度分離(Precision Decoupling)**: オプティマイザ変数を精度感度で分類し、感度の低い変数のみ低精度化する原則。FP8-LM は Adam の第一次モーメントを FP8、第二次モーメントを FP16、マスタ重みを FP16(テンソルスケーリング)とすることで、16 バイト/パラメータから 6 バイト/パラメータ(2.6 倍削減)を実現し、訓練精度を BF16 と同等に維持した。([[@2023__arXiv__FP8-LM Training FP8 Large Language Models]]) - **分散並列訓練との統合**: FP8 化は GEMM 計算に留まらず、テンソル並列・シーケンス並列の境界にある all-gather/reduce-scatter 通信にも適用できる。FP8-LM は通信量をアクティベーション関連で GPT-175B 比 65% 削減した。ZeRO 分散訓練では FP8 テンソルとスケーリングファクタを一体として貪欲アルゴリズムで配布する FP8 ZeRO を提案し、従来のサブパーティション分割を回避した。([[@2023__arXiv__FP8-LM Training FP8 Large Language Models]]) - **HPC ソルバーとの目的の分岐**: 深層学習の混合精度訓練は FP64 精度保証を要求しないが、HPC の混合精度反復求解法([[混合精度反復求解法]])は低精度 LU を前処理器として使いつつ最終的に FP64 前進誤差・後退誤差を達成する。Haidar ら(SC 2018)は V100 テンソルコア(FP16-TC)により FP64 密線形ソルバーを最大 4× 高速化した。テンソルコアの FP32 蓄積という特性が深層学習の精度許容を前提としない HPC 応用を可能にする鍵であり、両分野でテンソルコアが中心的役割を担う理由が異なる。([[@2018__SC__Harnessing GPU Tensor Cores for Fast FP16 Arithmetic to Speed up Mixed-Precision Iterative Refinement Solvers]]) - **精度分離の原則は HPC ソルバーにも独立に現れる**: 深層学習の FP8-LM は Adam オプティマイザ状態を精度感度で分類し、感度の低い変数のみ低精度化した。HPC の Haidar ら SC18 はほぼ同じ発想を線形ソルバーの LU 分解に適用し、数値的に感度の高いパネル分解・trsm を FP32 に残しつつ計算量の大部分を占めるトレーリング行列更新(GEMM)のみを FP16-TC 化した。「計算量が大きく精度感度が低い処理のみを低精度化する」という原則が訓練系(深層学習)と求解系(HPC)の双方で独立に収束していることは、混合精度設計の普遍性を示す。(Source: [[@2018__SC__Harnessing GPU Tensor Cores for Fast FP16 Arithmetic to Speed up Mixed-Precision Iterative Refinement Solvers]], [[@2023__arXiv__FP8-LM Training FP8 Large Language Models]]) - **GMRES 前処理による条件数制約の拡張**: HPC の反復精密化では、FP16 の数値表現限界($\kappa_\infty(A) < 10^4$)を FP16 LU を前処理とした GMRES(IRGM)に切り替えることで $\kappa_\infty(A) < 10^8$ まで緩和できる。この「低精度近似を前処理として使い、外側の高精度ループで精度を回収する」パターンは、深層学習の勾配スケーリング(スケールが狂ったまま更新し後から補正)や FP8 ZeRO の post-communication スケーリング回復とも構造が対応する。ただし深層学習側は確率的近似を許容するのに対し、IRGM は数学的収束保証が求められる点で目的が根本的に異なる。(Source: [[@2018__SC__Harnessing GPU Tensor Cores for Fast FP16 Arithmetic to Speed up Mixed-Precision Iterative Refinement Solvers]], [[@2023__arXiv__FP8-LM Training FP8 Large Language Models]]) ## 未解決の問い - FP8 の 2 フォーマット(E4M3 / E5M2)の使い分け基準はどう定まるか。GEMM の順伝播・逆伝播、オプティマイザ状態でそれぞれ最適フォーマットは異なるか - H100 以降の世代(Blackwell B200 等の FP4 サポート)では混合精度の設計原則がどう変化するか - FP8 ZeRO の貪欲アルゴリズムは極端なテンソルサイズ分布(MOE の expert weight 等)でどの程度の負荷偏りを生じるか - 精度分離の原則は Adam 以外のオプティマイザ(Adafactor、SOAP、Muon 等)でも成立するか - FP8 集団通信のオートスケーリングパラメータ(0.001% 閾値・1,000 ステップ増大)は訓練設定や言語モデルアーキテクチャに対して感度が高いか - HPC の混合精度反復求解法([[混合精度反復求解法]])では低精度 LU をソルバーの前処理器として用いて最終的に FP64 精度を保証するが、深層学習の混合精度訓練は近似精度の許容が設計の前提である。この目的の差異はアルゴリズム設計にどのような分岐をもたらすか - 精度分離の原則(感度の低い演算のみ低精度化)はマルチ精度 LU と FP8 精度分離で独立に現れた。この原則はさらに低精度(FP4・INT4)に拡張できるか、また HPC ソルバーに FP4 テンソルコアを適用した場合の数値安定性の限界はどこか - IRGM の収束保証($\kappa_\infty(A) < 10^8$)は行列の疎構造・条件数分布が変化する確率的最適化問題(深層学習で言えば損失曲面の曲率)に類似した設定で成立するか ## 関連 - 子 concept: テンソルスケーリング - 隣接 concept: [[LLM分散学習]] / [[並列化戦略]] / [[集合通信]] / [[LLM学習モニタリング]] - エンティティ: [[Houwen Peng]] / [[Han Hu]] / [[Peng Cheng]] / [[Microsoft]] / [[Megatron-LM]] - 関連 MOC: [[分散深層学習 - MOC]] ## 出典 - [[@2023__arXiv__FP8-LM Training FP8 Large Language Models]] — Microsoft。FP8 訓練全段階浸透。精度分離・オートスケーリング・FP8 ZeRO を提案。GPT-7B〜175B で BF16 同等精度・最大 75% 高速化・39% メモリ削減 - [[@2018__SC__Harnessing GPU Tensor Cores for Fast FP16 Arithmetic to Speed up Mixed-Precision Iterative Refinement Solvers]] — SC 2018、Haidar・Tomov・Dongarra・Higham。V100 テンソルコアを HPC 密線形ソルバーに適用。FP16-TC の FP32 蓄積で数値安定性を確保しつつ FP64 比最大 4× 高速化