DGX A100 はじめました

こんにちは,先進技術部の松林です。

大学院では天体力学のN体計算を中心に、スパコンを利用した数値計算による研究を進め、銀河中心の巨大ブラックホール形成過程のシミュレーションを行ってきました。 大学院卒業後は大手通信会社の研究所に勤め、GPUなどを用いた大規模データの情報処理の研究を進めてきました。大規模グラフデータの可視化や、因子分解によるスパーステンソルデータの分析など、実装の高速化にも取り組んできましたが、2020年10月よりALBERTに新設された先進技術部∗1に参画しました。
先進技術部では、これまでもComputer Vision 系を中心に様々な案件対応や事業強化の取り組みを進めてきました ∗2が、最近では特に動画分析 ∗3や3次元データ分析 ∗4, ∗5, ∗6に力を入れ、実験環境や計算機環境の整備を進めています。 GPUサーバの計算機環境では、クラウドサービス以外にも案件ごとにスタンドアローンで切り離されたGPU搭載のワークステーションを複数台稼働させ、また先進技術部ではV100を4台搭載したDELL Power-edge C4140 を導入し、最新鋭のマルチGPUサーバの導入も積極的に進めてきました。

そしてこの度、NVIDIAのA100 GPUの発売と同時にDGX A100 の導入を進め、環境設定を終わらせ本格稼働させました。

A100 GPU†1とDGX A100サーバ†2の詳細な紹介はNVIDIAのホームページを参照していただくとして、いくつか特徴を紹介したいと思います。

Ampere アーキテクチャは、Volta世代と比べて半導体製造工程でも微細化が進み7nmのチップで省電力化がさらに進んだことによって、トランジスタもVoltaの倍以上(A100とV100の比較)を積んでいて、様々な機能が追加されています。

A100はV100に対し、直接的な演算能力としては、GPUあたりのFP32のコア数は約1.4倍で 、 クロックはV100より下げているため大幅な増強とはなってはいないのですが、FP16は倍以上の性能を有し、Tensor Coreを使った演算能力は大幅に向上させています。さらにAmpereアーキテクチャから混合精度行列積の計算方法がいくつかアップデートされており、特にStructural sparsityでは疎行列の演算をより高速に行う仕組みを導入しています。

また、DGX-A100はPCI Ex 4.0 により、CPU ⇔ GPUの転送速度も向上しつつ、加えてGPU間はNVLink接続されていることからマルチGPUに最適なGPUサーバとなっています。

表.A100(SXM4)とV100(SXM2)の性能比較
DGXは専用OS(DGX OS)が用意されているため、DGX A100にはUbuntu 20.04 LTSをベースとしたDGX OS Server 5.0 をインストールし、CUDA 11.0 を利用して少しベンチマークを取得しました。実は個人的にDGXシリーズの計算機管理をするのは初めてで、このDGX OSを理解せずにリポジトリを上書きしてドライバやソフトを更新してしまい、デバイス認識ができないなど苦労しました。

しかしながらDGXは主にデータセンター向けのサーバであり、加えて世の中の流れとしてはDockerを使った利用が主流になってきており、サーバ側のソフトは必要最低限のものでメンテナンス重視になるのもわかる気がします。実際NVIDIAが公開しているTensor Core を利用したサンプルコードはほぼすべてDocker を前提としています†3

簡単にCUDAのサンプルコードから matrixMulCUBLAS を走らせ、行列積の計算をさせてみます。対比には弊部署で所有するPower edgeサーバのV100(Tesla V100-PCIE-32GB) を利用します。matrixMulCUBLAS は行列A(640×480) と行列B(480×320) の行列積を求める計算で、比較的高速にチューニングされたサンプルコードです。V100の方はCUDA 10.1 を利用しているため精密な比較はできないものの、おおよその速度は大して変わりません。

V100の実行結果は、
   GPU Device 0: "Tesla V100-PCIE-32GB" with compute capability 7.0
   Performance= 6889.95 GFlop/s, Time= 0.029 msec, Size= 196608000 Ops
と、行列サイズが小さいものの6.9Tflops出ています。これはfloatで計算しているのでFP32での計算結果になります。

対してA100は
   GPU Device 0: "A100-SXM4-40GB" with compute capability 8.0
   Performance= 8754.63 GFlop/s, Time= 0.022 msec, Size= 196608000 Ops
と、8.8TFlops出ています。とはいえそれほど変わらないですね。

次にTensor Coreを使った cudaTensorCoreGemm を試してみます。こちらも同様に行列積演算なのですが、混合演算(Mixed precision)と呼ばれる手法を用いて計算を効率化させています。

行列サイズは4096×4096の行列同士の積を求めていて、V100では、
   GPU Device 0: "Tesla V100-PCIE-32GB" with compute capability 7.0
   Time: 3.139616 ms
   TFLOPS: 43.78

一方でA100では、
   GPU Device 0: "Ampere" with compute capability 8.0
   Time: 1.406624 ms
   TFLOPS: 97.71
と、倍以上の性能を出しています。

これらのサンプルコードは、CUDAの書き方をマスターするために提供されているため、性能を引き出すようなチューニングはされていないのですが、それでも100Tflops近い性能を出せることが分かります。ちなみにcuDNNなどの、NVIDIAからバイナリ提供されているライブラリはかなりチューニングされているようです。


その他、深層学習の大規模なネットワークのベンチマークはNVIDIAが既に公開†3しています。早速、弊部署の山内君がResNet-50の学習のベンチマークを計ってくれたのですが、PyTorchでバッチサイズ512での計測ですが、
   1GPU: 1,300 img/s8GPU:10,200 img/s
という速度が出ており、ほぼスケールしているので性能を十分引き出しています。これはTensor Core を使った性能を活かしており、非常に高速なのが分かります。
ILSVRC2012のような巨大なデータセットでも、100エポックの学習計算も3時間強で終わることになります。また、BERT-Largeのような巨大なモデルの学習も、DGX A100の1台でも3日ほどで計算を終わらせることができ†1, †2、GPU環境が不十分で研究が進まない、という事は解消されます。


今後もDX(デジタルトランスフォーメーション)が進み、人や空間のデジタル化などの技術革新が求められ、我々は巨大なデータセットの分析を行う必要性が出てくると考えています。
例えば自動運転やロボティクスの世界では、点群データなどによる3次元構造データを扱い、動画分析技術では時系列的に変化する画像を扱う必要があります。深層学習において、大量のデータを扱うデータ分析にはデータパラレルという方法を用いた並列分散処理技術が必要になりますが、これからは巨大なデータを大量に扱うために、モデルパラレルとデータパラレルの両面を考える必要があります。

今回導入したDGX A100の性能を使いきるためには8個のGPUをバラバラに使うのではなく、まとめて一つのGPUのように扱う技術が重要です。今回NVIDIA社の最上位機種であるDGX A100を導入し、先進技術部ではそのような技術をさらに磨いていきます。


またALBERTでは、GPUサーバなどの計算機環境を拡充させていくと共に、ドローンや自律走行ロボなどのロボティクス研究環境、VR/ARによるHMI(Human Machine Interface)の研究など、チャレンジングな研究にも取り組むために、引き続き研究環境の整備に投資していく予定です。
先進技術部では我々とともに面白い研究を進めていく研究メンバーを積極的に募集しているので、ご興味のある方はこちらをご覧ください!
 
左から筒井部長,山内,田中,中嶋,松林.

【参考】