単精度、倍精度、多精度、混合精度コンピューティングの違いとは?

投稿者: Geetika Gupta

パイについての考え方はいくつかあり、アップルパイ、パンプキンパイ、キーライムパイなどさまざまです。それと同様に、数学定数である円周率 ℼ の表現方法もさまざまで、3.14159 と表したり、0 と 1 が延々と続く 2 進数で表したりもできます。

無理数である円周率は、繰り返すことなく永遠に続く 10 進数です。そのため円周率を使って計算を行う場合、人間かコンピューターが数値を切り捨てたり四捨五入したりする前に、小数点以下の桁数を指定する必要があります。

小学校では 3.14 として手計算しますが、高校の関数電卓では桁数が10 桁になることもあります。これは、同じ数値をより高い詳細度で表しています。コンピューター サイエンスではこれを精度と呼び、通常は 10 進数ではなくビット、つまり 2 進数を単位とします。

複雑な科学的シミュレーションの場合、開発者は長年、ビッグバンのような出来事を理解したり、何百万個もの原子の相互作用を予測したりするために高精度の演算を利用してきました。

各数を表すビット数または小数位を増やすことにより、計算の過程で小数点以上と小数点以下の桁数を変動させる余裕が生まれ、より広範囲の値を表現する柔軟性が得られます。この範囲により、最大規模の銀河から最小規模の微粒子に至るまで正確な計算を実行することができます。

しかし、マシンが使用する精度が高ければ高いほど、より多くの計算リソース、データ転送、メモリ ストレージが必要になり、それに伴って必要なコストも消費電力も増えます。

すべてのワークロードで高精度が要求されるわけではないため、AI や HPC の研究者は異なる精度を組み合わせることでメリットを得ることができます。NVIDIA Tensor コア GPU は、多精度および混合精度手法をサポートしているため、開発者は計算リソースを最適化し、AI アプリケーションのトレーニングおよび推論機能を高速化することができます。

単精度、倍精度、および半精度浮動小数点形式の違い

IEEE 浮動小数点演算規格は、コンピューター上で数値を 2 進数で表現するための一般的な規則です。各数値が使用するビット数は、倍精度形式では 64 ビット、単精度形式では 32 ビット、半精度形式ではわずか 16 ビットです。

先ほど触れた円周率を使ってこの仕組みを見てみましょう。従来の科学的記数法では、円周率は 3.14 x 100 として表されます。しかし、コンピューターは、その情報を 2 進数で浮動小数点として格納します。浮動小数点は、数値とそれに対応する指数部を表す一連の 0 と 1 の数列です (この場合は x 21)。

32 ビットの単精度形式では、1 ビットを使ってその数が正か負かを表します。8 ビットは指数部に使われて (2 進数のため) 2 の何乗かを表します。残りの 23 ビットは仮数部と呼ばれ、その数を構成する桁を表すのに使用されます。

それに対し、倍精度は 11 ビットが指数部、52 ビットが仮数部として使われ、表現可能な数の範囲および大きさが劇的に広がります。一方、半精度はパイの一切れがさらに小さく、指数部は 5 ビット、仮数部は 10 ビットにすぎません。

円周率を各精度で表すと次のようになります。

多精度コンピューティングと混合精度コンピューティングの違い

多精度コンピューティングとは、異なる精度で計算する能力を備えたプロセッサを使用することを意味します。つまり、必要に応じて倍精度を使用し、その他の部分には半精度または単精度演算を使用するということです。

それに対し、混合精度 (変動精度とも呼ばれる) コンピューティングでは、1 つの演算内で異なる精度を使用して、精度を損なうことなく計算効率を高めます。

混合精度の場合、計算は高速な行列演算のために半精度の値から始まりますが、それより高い精度で演算結果を格納します。例えば、2 つの 16 ビットの行列を掛け合わせると、答えは 32 ビットの大きさになります。

この方法では、アプリケーションが計算の終わり到達するまでに累積された答えは、全体を倍精度演算で実行した場合の精度に匹敵します。

この手法により、従来の倍精度アプリケーションを最大25倍高速化すると同時に、その実行に必要なメモリ、実行時間、消費電力を削減することが可能で、AI やシミュレーション HPC ワークロードに利用できます。

最新のスーパーコンピューティング アプリケーションにおいて混合精度演算の人気が高まる中、HPC 分野の第一人者であるジャック ドンガラ (Jack Dongarra) 氏は、スーパーコンピューターの混合精度演算性能を評価するための新しいベンチマーク「HPL-ML」の概要を説明しました。NVIDIA が世界最速のスーパーコンピューター「Summit」で HPL-ML 計算をテスト実行したところ、約 445 PFLOPSというかつてないレベルのパフォーマンスを達成しました。これは、スーパーコンピューター TOP500 ランキングの公式のパフォーマンスの約 3 倍に相当します。

混合精度コンピューティングの始め方

NVIDIA Volta および Turing GPU は、多精度および混合精度コンピューティングの簡素化と高速化のために開発されたTensor コアを搭載しています。ほんの数行のコードを加えるだけで、TensorFlow、PyTorch、および MXNet ディープラーニング フレームワークで自動混合精度機能を有効にすることができ、それによって AI のトレーニングを最大 3 倍高速化することができます。

GPU アクセラレーション対応ソフトウェアの NGC カタログには、HPC 向けの混合精度アプリケーションの展開を容易にする反復改良ソルバーや cuTensor ライブラリーが含まれています。

詳細は混合精度によるトレーニングに関する開発者リソースを参照してください。

混合精度の用途

NVIDIA GPU の混合精度機能は科学的シミュレーション、AI、および自然言語処理ワークロードに利用されています。以下にいくつかの例を示します。

地球科学

  • 東京大学、米国オークリッジ国立研究所、およびスイス国立スーパーコンピューティング センターの研究者たちは、地震シミュレーションに AI および混合精度手法を利用し、東京都の 3D シミュレーションを使って地震波が硬質地盤、軟質地盤、地上の建物、地下街、地下鉄網に与える影響をモデリングしました。倍精度、単精度、および半精度演算を組み合わせて Summit スーパーコンピューター上で実行した結果、新しいモデルで 25 倍の高速化を達成しました。
  • 米国ローレンス バークレー国立研究所のゴードン ベル賞受賞チームは、高解像度気候シミュレーションから AI を利用して異常気象パターンを特定することにより、異常気象の将来変化の分析に役立てています。彼らは、Summit 上で NVIDIA V100 Tensor コア GPU の混合精度機能を使用することにより、1.13 エクサフロップスの性能を達成しました。

医学研究とヘルスケア

  • NVIDIA Inception 仮想アクセラレーター プログラムのメンバーである Fathom 社 (本社:米国サンフランシスコ) は、NVIDIA V100 Tensor コア GPU の混合精度コンピューティングを利用して、医療事務を自動化するディープラーニング アルゴリズムのトレーニングを高速化しています。このスタートアップ企業は、米国の医療事務大手の多くと協力して、医師が入力した記録を、保険者および患者への請求対象となるすべての診断および治療を表す英数字コードに変換しています。
  • オークリッジ国立研究所の研究者は、オピオイド依存に関する画期的研究でゴードン ベル賞を受賞しました。この研究では、混合精度手法を利用して 2.31 エクサフロップスのピーク性能を達成しながら、集団内の遺伝的変異を分析し、複雑な形質に寄与する遺伝子パターンを特定しました。

核エネルギー

  • 核融合反応は非常に不安定で、数秒以上維持することは困難です。オークリッジ国立研究所の別のチームは、核融合反応をシミュレートすることにより、原子炉内で作用する変動要因に関するより詳細な情報を物理学者に提供します。チームは、Tensor コア GPU の混合精度機能を使ってシミュレーションを 3.5 倍高速化することに成功しました。