Re Reference AI

技術

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のみでの学習が不安定になる場合があり、追加の工夫を要する

比較

  • INT8FP16は浮動小数点形式であり、INT8はより単純な整数形式でさらに軽量だが精度の低下が大きくなりやすい
  • 量子化FP16への変換は、量子化の中でも比較的精度低下が小さい代表的な手法の1つ
  • TensorRTTensorRT等の推論エンジンは、FP16への変換を最適化手法の1つとして組み込んでいる

関連用語

INT8INT4量子化TensorRT

よくある質問

FP16とBF16の違いは?

FP16は仮数部が10ビットで精度が高いが表現範囲が狭い。 BF16(bfloat16)はFP32と同じ8ビットの指数部を持ち表現範囲は広いが仮数部が7ビットとやや精度が低い。 学習の安定性を重視する場面ではBF16が好まれることも多い。

参考文献

関連Zenn記事