後藤弘茂のWeekly海外ニュース

NVIDIAのマルチGPUの切り札「NVSwitch」と16 GPUシステム「DGX-2」

1システムで16 GPU、2PFLOPSのNVIDIA DGX-2

 昨年(2017年)、NVIDIAは「NVLinkのスイッチを作るのか」という質問に対して、明確な否定はしなかった。今年(2018年)、NVIDIAはその回答を出してきた。NVLinkのスイッチチップ「NVSwitch」として。

 NVIDIAは、同社の新しいGPUサーバー「NVIDIA DGX-2」において、NVSwitchを、ちょっと変わった接続方法で使っている。DGX-2とNVSwitchは、NVIDIAが米サンノゼで開催したGPUコンピューティングのカンファレンス「GTC(GPU Technology Conference)」でお披露目された。DGX-2は、16個のハイエンドGPUをNVLinkで相互接続したモンスターマシンだ。NVIDIAのJen-Hsun Huang(ジェンセン・フアン)氏(Founder and CEO, NVIDIA)は、DGX-2を「世界最大のGPU」と呼んでいる。

NVIDIAのDGX-2
DGX-1とDGX-2の性能比較
DGX-2のシステム全体の構成

 DGX-2の、16個のVoltaによる演算性能は2PFLOPS。これは、テンサーコアを使うFP16での性能なので、FP32やFP64の性能とは単純比較はできない。しかし、DGX-2のターゲットはディープラーニングなので、妥当な比較とも言える。メモリは各GPUのHBM2が32GBになったために、合計512GB。電力は10kWだが、2PFLOPSと考えるなら、性能電力比は極めて高い。

 NVIDIAのGPUコンピューティング向けGPUは、ノードあたりのマルチGPUの数を増やしてきたが、今回のDGX-2ではついに16 GPUまで引き上げた。DGX-2に搭載されるのは、「Volta」アーキテクチャベースの「Tesla V100(GV100)」。Tesla V100自体は昨年から出荷されているが、今回は32GBに搭載HBMメモリを増量した第2世代版となる。Tesla V100自体のアーキテクチャは変わっていないが、搭載するHBM2メモリが第2世代となりDRAMのスタック数を増やすことが可能になった。

 DGX-2は、NVLinkとそのスイッチチップを使うという点で、NVIDIAのマルチGPU戦略のある種のゴールに到達したシステムだ。2016年のNVIDIA DGX-1では、NVLinkのスイッチを使わずに、8個のGPU同士をNVLinkでダイレクト接続していた。DGX-1は、NVLinkが4ポートのGP100をベースに設計されており、GPU同士は3ポートまたは2ポートのNVLinkでワンホップ接続されていた。

 今回、NVIDIAはNVSwitchを導入することで、DGX-2において、16個のGPUを相互接続可能にした。それも、GPU同士は6ポートで接続されており、GPU間のインターコネクト帯域は300GB/sにも達する。つまり、NVIDIAはスイッチチップを使うことで、相互接続するGPU個数を2倍にしただけでなく、インターコネクトの帯域も飛躍させた。

GPU同士の広帯域低レイテンシ接続がマルチGPUのカギ

 従来のGPUは、PCI Expressでホストチップと接続されており、GPU同士をダイレクト接続するインターコネクトを持たなかった。PCI Expressの狭いデータ帯域と、CPUやスイッチ経由でのアクセスなどが、マルチGPU構成の弱点だった。GPUの演算性能がどれだけ上がっても、PCI Expressを経由したCPUやほかのGPUとのデータ転送で性能を食われてしまう。

 そこでNVIDIAは、GPU同士やGPUとCPUを、高速かつ低帯域で接続するために、独自の高速インターフェイスNVLinkを作った。NVLinkをサポートするIBMのPower CPUは、NVIDIAのGPUをNVLinkで広帯域に直結できる。また、現在のNVLink 2.0では、チップ間でのメモリのコヒーレンシを保つことも可能となった。

 NVLinkは、2本の信号線を使う差動信号(Differential Signaling)方式の狭インターフェイス設計だ。各ポートにつき、片方向が8ペア、双方向で16ペアで構成される。現在の世代のNVLinkの転送レートは1ペアあたり片方向で25Gbps。そのため、8ペアで構成される片方向リンクは25GB/sの帯域、1ポートは双方向で50GB/sの帯域となる。

NVLinkの1ポートの構成
PDF版はこちら

 Voltaアーキテクチャの「Tesla V100(GV100)」の場合、GPUに6ポートのNVLinkを実装している。そのため、GPUチップトータルのインターコネクト帯域は、6ポート×50GB/sで、単純なトータル帯域ではピーク300GB/sとなる。チップ間インターコネクトとしては、非常に広い帯域だ。GPUに実装されているもう1つのチップ間インターコネクトのPCI Express Gen3 x16と比べると約10倍の帯域となる。

 言い換えれば、Volta世代では、PCI Express時代のGPUに対して、チップ間のインターコネクト帯域が10倍になっている。NVIDIAはPascal(パスカル)アーキテクチャの「Tesla P100(GP100)」に4ポートのNVLinkを実装し、Pascalでポート数を増やして転送レートも上げた。NVIDIA GPUにおいては、メモリ帯域や演算性能の伸びよりも、じつはインターコネクト帯域の伸びの方がはるかに劇的だ。それだけNVIDIAが、チップ間のデータ転送とマルチGPU性能を重視していることがわかる。ダイ上の実装面積も少なくないはずで、NVIDIAはマルチGPUの強化にコストをかけている。

強力なクロスバースイッチチップNVSwitch

 NVIDIAが今回導入したNVSwitchは、NVLink専用のスイッチチップだ。NVSwitchには、合計で18ポートのNVLinkが実装されている。18ポートすべてに対してノンブロッキングのクロスバー接続を提供する。18ポートがそれぞれ双方向50GB/sなので、トータルで900GB/sのスイッチング能力となる。DGX-2では、NVSwitchを使うことで、トータルで16個のGV100 GPUをシステムに統合している。

 スイッチング帯域が膨大なために、NVSwitchはかなり大きなスイッチだ。トランジスタ数は2B(20億)、製造プロセス技術はTSMCのNVIDIA向け12nmプロセス「12FFN」。12nmのノード名となっているが、実際のフィーチャサイズは16nm相当で、プロセスのチューニングなどで改良したプロセスだ。

NVSwitchチップ

 NVIDIAによると、DGX-2では16個のGPUそれぞれが相互接続されており、どのGPUの間でも300GB/sのフル帯域が確保されるという。実際のDGX-2システムには、8個のGV100 GPUと6個のNVSwitchチップで構成されたベースボードが2つ搭載されている。合計で16個のGPU、12個のスイッチの構成となっている。ここで異例なのは、12個というスイッチの数の多さだ。なぜ、12個ものスイッチチップが必要なのか。それは、GPU同士をNVLinkのフル帯域で接続するためだ。これは、DGX-2のトポロジを見るとよくわかる。

 NVIDIAの説明では、DGX-2のファブリックの接続は次のようになっている。

・ベースボード上の8個のGPUは、ベースボード上の6個のNVSwitchチップそれぞれに、1つのNVLinkによって接続されている。
・NVSwitchチップのNVLinkポートのうち8リンクは、ほかのベースボードとの接続に使われる
・DGX-2のすべてのGPUは、ほかのどのGPUともフルの300GB/sの帯域で通信できる。
・同じベースボード上のGPU同士は、1個のNVSwitchを経由するだけで、300GB/sの帯域で通信できる。

 GPU側から見ると、NVLinkで接続される相手は、6個のNVSwitchチップとなる。GPU上の6個のNVLinkポートが、それぞれ1個のNVSwitchと接続される。NVSwitchの6個という数は、GV100側のNVLinkのポート数によって決定されていることがわかる。

DGX-2でのGPU側から見たNVLinkの接続。6ポートがそれぞれ異なるNVSwitchと接続されている
PDF版はこちら

 NVSwitch側から見ると、NVSwitchチップは、NVLinkによって8個のGPUと接続される。18個のNVLinkポートのうち8ポートが、それぞれボード上の1個のGPUと接続される。ここでポイントは、ベースボード上では、NVLinkはGPU同士やNVSwitch同士の接続には使われていないことだ。

NVSwitch側から見たNVLinkの接続。片側の8ポートを使って、8個のGPUと接続されている
PDF版はこちら

 NVSwitchの18ポートのNVLinkのうち、8ポートはベースボード上のGPUとの接続に使われる。そして、DGX-2ではNVSwitchは、それぞれ8ポートのNVLinkによってもう1つのベースボードと接続される。ここでのポイントは8ポートをボード間の接続に使う点だ。もう片方のベースボードにも6個のNVSwitchチップが配置されているのだから、NVSwitch同士をクロス接続するのなら6ポートになりそうだ。しかし、実際には8ポートをボード間の接続に使っている。この説明から導かれるトポロジはただ1つで下の構成となる。NVIDIAもDGX-2のセミナーでトポロジを公開した。

DGX-2でのGPUとNVSwitchの接続形態
PDF版はこちら
NVIDIAがDGX-2のWebセミナーで公開したDGX-2のトポロジ

 DGX-2では、ベースボード上のNVSwitchは、もう1つのベースボードの相対するNVSwitchと8つのNVLinkで接続されている。8ポートはすべて同じNVSwitchチップとの接続に使われる。つまり、DGX-2では、片方のベースボード上のNVSwitchチップは、もう片方のベースボード上のただ1個のNVSwitchとだけ接続される。

 奇妙に思われるかもしれないが、じつはこれは合理的だ。なぜなら、それぞれのNVSwitchチップは、ベースボード上の8個のGPUすべてに接続されているからだ。両ボードの相対するNVSwitch同士を結べば、16個のGPUすべてに3ホップ以内でアクセスができる。配線的にもシンプルになる。

ややこしいがじつは単純なDGX-2の接続

 DGX-2の接続構成は、図式化するとわかりやすい。まず、GPUが同じベースボード上の別なGPUに、300GB/sのフル帯域でアクセスする場合。下の図の上のように、GPUは6つのNVLinkポートで6個のNVSwitchにアクセス。各NVSwitchを経由して2ホップでオンベースボードの別なGPUにアクセスできる。両GPUの6つのNVLinkポートをフルに使うことで、ピーク理論値で300GB/sのアクセスが可能だ。レイテンシは、NVSwitch 1個のホップ分の増加で済む。

NVSwitchを使ったアクセス例。上が同じベースボード上のGPU同士のアクセス、下が異なるベースボード上のGPU同士のアクセス
PDF版はこちら
すべてのGPU間のインターコネクト帯域が300GB/s

 GPUがもう1つのベースボード上のGPUにアクセスする場合はどうなるのか。上の図の下の例のように、GPUは6つのNVLinkポートで6個のNVSwitchにアクセス。6個のNVSwitchチップから、もう片方のベースボード上の6個のNVSwitchチップにスイッチされ、6個のNVSwitchチップからGPUへと6ポートでアクセスする。レイテンシは長くなるが、両GPUの6つのNVLinkポートをフルに使って、ピーク理論値で300GB/sのアクセスが可能だ。

 なぜ、ボード間のNVSwitchのリンクに8ポートが必要なのか。それは、NVSwitchに対して、最大で8個のGPUから別なボードの8GPUへのアクセス要求が来たときのためだ。DGX-2の構成の場合は、こうしたケースでもノンブロッキングで両ボード間のGPUでデータ転送ができる。つまり、2つのボードにまたがる16個のGPUがそれぞれにアクセスしても対応が可能だ。

16個のGPU同士のアクセスのケース
PDF版はこちら

 ちなみに、各NVSwitchのポートのうち、2ポートはCPU接続またはブリッジチップとの接続のために残されていると見られる。IBMのPower9のように、NVLink接続ができるCPUとは、NVSwitchの空きポートを使って接続するケースが考えられる。x86系CPUの場合はNVLinkを持たないので、GPUのPCI Express Gen3を使って、PCI Expressスイッチ経由でCPUと接続すると推測される。