FP16とは
半精度浮動小数点 / half precision
16ビットで数値を表現する浮動小数点フォーマット。学習・推論の高速化とメモリ削減に使われる
ひとことで言うと
数値を16ビットで表す形式。AIの計算を速く、軽くするために使われる。
概要
FP16(半精度浮動小数点, half precision)とは、数値を16ビットで表現する浮動小数点フォーマット。 従来標準的に使われてきた32ビットのFP32と比べてメモリ使用量が半分で済み、対応するハードウェア上では演算も高速化できる。 表現できる数値の範囲や精度はFP32より狭まるが、深層学習の学習・推論の多くの場面では実用上十分な精度を保てることが分かっており、学習時にFP32とFP16を組み合わせる混合精度学習(Mixed Precision Training)や、推論時のモデル軽量化に広く使われている。 指数部と仮数部のビット配分をFP16と変えることで表現範囲をFP32に近づけたBF16(bfloat16)という派生形式もあり、学習の安定性を優先する場面ではBF16が選ばれることも多い。
背景
深層学習の計算は大量の行列演算を伴い、数値精度をFP32からFP16へ下げることで計算量とメモリ使用量を削減できれば、学習・推論の速度向上とコスト削減につながる。 GPUメーカー各社がFP16演算に特化した演算ユニット(Tensor Core等)を搭載するようになったことも、FP16の普及を後押しした。
アーキテクチャ
符号1ビット・指数部5ビット・仮数部10ビットで数値を表現する。 FP32と比べ表現できる数値の範囲や精度は狭いが、勾配等一部の値でのみFP32を併用する等の工夫(混合精度学習)により、学習の安定性を保ちながら高速化を図る手法が確立されている。
利点
- FP32と比べメモリ使用量が半分で済み、より大きなモデル・バッチサイズを扱いやすくなる
- 対応するGPU上では、演算速度を大きく向上できる
欠点
- 表現できる数値の範囲が狭く、極端に大きい・小さい値を扱う際にオーバーフローや精度低下を招きやすい
- 一部のモデル・タスクでは、FP16のみでの学習が不安定になる場合があり、追加の工夫を要する
比較
関連用語
よくある質問
FP16とBF16の違いは?
FP16は仮数部が10ビットで精度が高いが表現範囲が狭い。 BF16(bfloat16)はFP32と同じ8ビットの指数部を持ち表現範囲は広いが仮数部が7ビットとやや精度が低い。 学習の安定性を重視する場面ではBF16が好まれることも多い。
参考文献
- Research PaperMixed Precision Training