LuAITools.com
提交工具
AI
FP16の速さとFP32の正確さを両立

混合精度訓練

混合精度訓練は、計算の大部分を半精度のFP16で行って速度と省メモリを両立し、精度が重要な部分だけFP32で補う手法。速く、メモリを節約でき、精度の低下もほぼありません。

混合精度訓練って何?

従来の訓練では、ネットワークの重みも計算もすべて32ビット浮動小数点(FP32)で行われます。正確ですが、遅くてメモリも食います。混合精度訓練の考え方は「精度が必要なところは正確に、それ以外は手を抜く」。計算の大部分を16ビット浮動小数点(FP16)に切り替えて速く・省メモリにし、精度が気になる少数の箇所だけFP32で補います。

なぜFP16は速いのか

計算が速い
最新のGPUでは、FP16の行列演算はFP32より数倍速く、半精度向けの演算器(Tensor Coreなど)がスループットを大きく引き上げます。
メモリと帯域を節約
ビット数が半分なので、重みも中間結果も小さくなり、より大きなモデルやバッチサイズを載せられます。

なぜ全部FP16にできないのか

精度が溢れたり消えたりする
FP16は表現できる範囲と精度が限られ、大きな数は無限大に溢れ、小さな勾配は0に丸められます。すると訓練が不安定になり、収束しません。
だから「混ぜる」
勾配更新や一部の和など、問題が起きやすい部分をFP32で行い、残りをFP16にすれば、速さと安定性を両立できます。

重要なテクニック

損失スケーリング
勾配が小さすぎてFP16で消えるなら、逆伝播の前に損失を何倍かにしておき、計算後に戻します。小さな勾配を守る工夫です。
マスター重みはFP32
重みはFP32で保存し、計算はFP16、更新はFP32に戻す。速さと精度の両取りです。

使う価値は?

今や混合精度訓練は大規模モデル訓練の「標準設定」といえます。速度は約2倍、メモリは半分、精度の損失は無視できるレベル。勾配チェックポイントなどと組み合わせれば、動かせなかったモデルが動くようにもなります。

まとめ:混合精度訓練は「大部分をFP16で速く、要所をFP32で正確に」。速くて省メモリ、しかも崩れない定番テクニックです。

コメント