性能検証
NVIDIA DGX™ A100徹底検証! Vol.1
2020.10.05

NTTPC GPUエンジニア

はじめに
このたび、NVIDIA社から新たにリリースされたGPUアプライアンス「NVIDIA DGX™ A100」を、Innovation LAB設備として国内最速で導入しました。
本マシンは、単に前世代のV100 GPUから性能が向上したことに加え、MIG(Multi Instance GPU)という新機能が追加になりました。MIGの詳しい機能はNVIDIA社のWebサイトをご覧ください。1枚の A100カードを最大7つのインスタンスとして分離し、それぞれにメモリを割り当て、独立した用途で活用できる画期的な機能です。
今回は、DGX A100の性能や機能について検証を行いました。本記事ではその検証結果を報告しますので、今後の導入を検討されている方の参考になれば幸いです。
なお、検証結果の概要については、NVIDIA社のオンラインイベント「GTC DIGITAL JAPAN 2020」でも発表しました。
検証環境
今回はNTTPCデータセンターにて検証を行います。DGX A100の最大消費電力は6,500Wなので、余裕をもって運用できるよう8kVAラックに搭載しています。



DGX A100にインストールしたソフトウェア類のバージョン情報は次の通りです。
OS | Ubuntu18.04.5 LTS |
---|---|
Driver | 450.51.06 |
NVIDIAContainerToolkit | 1.0.6-1 |
Docker | 19.03.8 |
Singularity | 3.5.2 |
検証項目
本記事では、下記2点を検証した結果を公開します。
① ベンチマークソフト実行結果
② DGX A100をフルパワーで回した場合の消費電力
Vol.2記事では下記にトライしています。あわせてご覧ください。
③ MIG を利用したGPU分割の手順
④ MIGをDockerコンテナ上で利用してみる
⑤ MIGをSingularityコンテナ上で利用してみる
⑥ DGX A100のCUDAバージョン互換性確認
1. ベンチマークソフト実行結果
GPUのベンチマークソフトはいろいろありますが、今回はtf_cnn_benchmarksを使用して検証しました。RTX2080tiとNVIDIA V100 GPUと比較したいと思います。
ベンチマーク実行時のパラメーターは下記の通りです。
ResNet-50 ResNet-152 batch_size=32,64 FP16,FP32 Optimizer sgd variable_update: parameter_server InceptionV3 batch_size=32,64 FP16,FP32 Optimizer sgd variable_update: parameter_server VGG16 batch_size=32,64 FP16,FP32 Optimizer sgd variable_update: replicated AlexNet batch_size=32,64 FP16,FP32 Optimizer sgd variable_update: replicated
ベンチマーク取得時のソフトウェアバージョンは以下の通りです。他GPUと環境を合わせるため、CUDAは(検証実施時点での)1世代前のバージョンである10.1系を採用しています。
CUDA | 10.1 |
---|---|
TensorFlow | 2.2.0 |
Python | 3.6.9 |
結果は次のグラフのようになりました。(単位:total images/sec)

図1 CUDA10.1でのベンチマーク結果グラフ
ベンチマークソフトによってやや異なるものの、前世代のGPUと比べると1.5~2倍の性能を発揮できていることがわかります。
次に、CUDA10系と11系のベンチマーク結果も比較しました。いずれも、CUDA11のほうが高いパフォーマンスとなっています。利用するソフトウェアとの互換性の問題などがなければ、より新しいバージョンのCUDAを利用したほうが良いでしょう。

図2 cuda11ベンチマーク結果グラフ
2. DGX A100をフルパワーで回した場合の消費電力
次は、DGX A100を動作させた際の消費電力を計測しました。サーバーあたりの搭載GPU枚数や使用率によって変動しますが、一般にGPUはかなりの電力を必要とします。データセンターの電力設計のために、GPUサーバーの消費電力を把握しておくことは非常に重要となります。
メーカースペックは最大6,500Wとなっていますが、実際のところどのくらいの消費電力になるのでしょうか?また、電源ユニット(PSU)は計6つ搭載されていますが、万が一いくつか故障してしまっても電源供給は可能なのでしょうか?
今回は、DGX A100に搭載されているA100 GPU×8枚が、すべて使用率100%になるよう負荷をかけながら、PSUの数を一つずつ減らしていき、各パターンの消費電力をモニタリングしました。
結果は下記の通りです。
表1 消費電力の推移
単位[W]
PSU数 | PSU0 | PSU1 | PSU2 | PSU3 | PSU4 | PSU5 | 合計 |
---|---|---|---|---|---|---|---|
PSU×6つ全て利用 | 481 | 585 | 377 | 403 | 195 | 390 | 2431 |
PSU×5つ利用 | 429 | 494 | 455 | 429 | 585 | - | 2392 |
PSU×4つ利用 | 585 | 598 | 598 | 572 | - | - | 2353 |
PSU×3つ利用 | - | 663 | 741 | 715 | - | - | 2119 |

図1 消費電力の推移
PSU×6~PSU×4までは、PSU一つあたり200-600W前後の消費電力がかかっており、合計値は2,400Wほどです。弊社検証環境での実測値ですが、カタログスペックである最大6,500Wには届きませんでした。
PSU×3の場合は、PSU一つあたり700W前後まで消費電力が上昇し、合計値は約2,100Wになりました。ただし、この場合はGPU3枚の使用率が0%となってしまいました。
よって、さすがにPSUが3枚故障するとMAXのパフォーマンスは発揮できないものの、PSUが1~2枚故障した場合でもGPUカードを動作させることができるということがわかりました。冗長性が求められるミッションクリティカルなシステムでも安心して利用できますね。
Vol.1はここまでとします。Vol.2では、マルチインスタンスGPU(MIG)を検証してみたいと思います。