混合精度演算とは、単一の演算で桁数の異なる数値を扱う浮動小数点演算の一種です。
混合精度演算の一般的な用途は、幅の小さい不正確な数値を操作し、それをより大きく正確な表現に拡張することです。たとえば、2 つの半精度またはbfloat16 (16 ビット) 浮動小数点数を乗算して、より正確な単精度(32 ビット) 浮動小数点数を得ることができます。[ 1 ]このように、混合精度演算は、可能な精度の数が少ないものの、任意精度演算を近似します。
反復アルゴリズム(勾配降下法など)は、混合精度演算に適した候補です。平方根のような反復アルゴリズムでは、粗い積分推定値を作成し、精度誤差が大きくなり、推定値への最小の加算または減算でも許容できる答えにならないほど粗くなるまで、何度も反復を繰り返して精度を洗練させていきます。このような場合、精度をより正確にすることで、近似に使用できる増分を小さくすることができます。
Summitのようなスーパーコンピュータは、メモリと処理時間、および消費電力に関してより効率的になるために、混合精度演算を利用しています。[ 1 ] [ 2 ] [ 3 ]
浮動小数点数は通常、符号ビット、指数部、仮数部(または仮数部)の順に、左から右へ1つのビット列にパックされます。例として、IEEE 754規格の32ビット浮動小数点数(「FP32」、「float32」、「binary32」)は、次のようにパックされます。
![]()
IEEE 754バイナリ浮動小数点数は次のとおりです。
混合精度演算は機械学習の分野で使用されています。勾配降下法アルゴリズムは、特定のタスクには粗くて効率的な半精度浮動小数点数を使用できますが、より高精度だが低速な単精度浮動小数点数を使用すると、より正確になります。Nvidia 、Intel、AMDのCPUやGPUなどの一部のプラットフォームは、この目的のために混合精度演算を提供しており、可能な場合は粗い浮動小数点数を使用し、必要に応じてより高い精度に拡張します。[ 1 ] [ 2 ] [ 4 ] [ 5 ]
PyTorch は自動混合精度 (AMP) を実装しており、自動キャスト、勾配スケーリング、損失スケーリングを実行します。[ 6 ] [ 7 ]
PyTorch AMPは、損失スケーリングのスケールファクターを自動的に調整するために指数バックオフを使用します。つまり、スケールファクターを定期的に増加させます。勾配にNaN(オーバーフローを示す)が含まれる場合は、重みの更新がスキップされ、スケールファクターが減少します。