nVidia 新GPU A100についての情報まとめ
nVidiaの新データセンター用GPU、A100がリリースされました。
このチップをベースとしてコンシューマー用GPU(RTX3xxx)もリリースされるのでしょう。
備忘録的にどのような新機能があるのかまとめてみました。 筆者の使用用途上AI性能にフォーカスしたものになります。またGPUは専門じゃないので間違いが合ってもあしからず。
ソース: NVIDIA Ampere Architecture In-Depth
GPUアーキテクチャについてはスタンフォード講義のCS348がわかりやすいです。
またCMUのパラレルコンピューティングの授業もGPUについてわかりやすく説明しています。
TL;DR
7nm世代に移行することでベース性能、キャッシュ性能が大幅Up
TensorCoreの改良と新データ構造TF32の導入、スパース演算機能によりV100に対し最大20x高速化
GPUのバーチャルインスタンス化機能を実現し、ユーザ間で単一GPUを効果的にシェアできるように。
A100はV100と同等のバーチャルGPUを7ユーザに同時に提供できると書いてある(気がする)。本当だとしたらかなり凄く、一番のキーフィーチャなんじゃないか。しかし私はクラウド人材じゃないのでよくわかりましぇん。
ハードウェア面
世界最大の7nmチップ
[P100, V100, A100]
まずはハードウェアの進化から見てましょう。
V100は12nmだったのが7nm世代に移行しました。 集積度もアップしており、GPUコア(SM)が20%ほど増加してます。
L2がV100の6MBから40MBに増えてるけどこれマジ?本当だとするとカーネルによっては演算が相当早くなりそうです。
一方でV100に対し最大クロックが下がっているあたりに設計者の苦労を感じます。
SMアーキテクチャ的には大きな変更はない。ただTensorCore(AI演算用専用回路)に大幅な機能追加が行われていて
7nmの設計経験はないんですが、この規模のチップを作ると歩留まりはかなり低いんじゃないか(毎回DS GPUみて思うけど)。多少歩留まりが悪くても圧倒的価格と性能(付加価値)でカバーできるのがNvidiaの強みであり他社が追従できない理由ですね。。
SM自体の仕様にはあまり変化ないですね。
TensorCoreの進化
nVidiaもオレオレFloating PointであるTensorFloat32という形式を提案してきました。 略してTF32と紛らわしい名前です。
このようなオレオレFloatingPoint導入のメリットは少ないbit表現でDL学習を実現できることです。
例えばSingleFloatの半分のbit数で同じモデルを学習すると
- メモリ使用量を半分に
- メモリ通信時間を半分以下に
- 演算も大幅に高速化
することができます。特にHPCではメモリ通信時間を減らすのが難しく、このようなデータ表現変更で2倍以上の高速化が達成できるのは画期的です。(HBM2の速度はここ数年全然変わっておらず次規格もまだ採用されていないですね)
TF32の仕様を見てみましょう。
FP16形式よりもexponentが3bit多く、ほぼ表現レンジは通常のFP32と同等なのが特徴です。FP16にそのまま3bit付け足した19bitの実装になっており、中途半端感は強いです。
Googleも同様のオレオレFloatingPointをTPUに実装していました(BrainFloat16)。 BF16はExponentを拡張する代わりにMantissaを削っていたのと対象的に、NvidiaはMantissaを重要視していますね。学習ではほぼExponentが効いている印象だったのでこのような実装にしたのは不思議です。
このようなオレオレFloatingPoint導入のデメリットは専用のカーネル(CuDNN的な)を書く必要があり、その最適化がかなり大変なことです。
ベンチマーク
TensorCore自体の演算性能が向上しているのでBERT学習が高速化しています。ベンチマークがBERTな辺りNLPの勢いを感じる。。
FP32で学習するのに対し、TF32で学習することでTensorCore+メモリ通信量を削減することができV100に対し7xの速度向上を達成しています。すげえ。
Sparcity
To be continued..