後藤弘茂のWeekly海外ニュース
NVIDIAのマルチGPU戦略とインターコネクト帯域
2018年5月18日 11:00
コンピューティング向けに特化したGPUだからできたNVLink
NVIDIAはマルチGPU化を急激に進めている。現在、NVIDIAのGPU開発の焦点の1つは、マルチGPU構成での性能を向上させることにある。これは、NVIDIA GPUのインターコネクト帯域の変遷を見れば一目瞭然だ。NVIDIA GPUは、メモリ帯域の拡張以上に、チップ間インターコネクトの帯域を急速に引き上げている。つまり、GPUのシリコンやIOピンのバジェットを、インターコネクトに割いている。
具体的には、PCI Express時代の「Kepler」GPUのメモリ帯域とインターコネクト帯域の比率は9対1だった。それが、現在の「Volta」世代では、3対1となった。GPU同士またはGPUとCPUの接続帯域が、2世代で一気に10倍となり、マルチGPUでのデータ交換の性能が大幅に改善された。
これは、NVIDIA GPUのワークロードの変化に対応したものだ。実際には、これまでもHPC(High Performance Computing)の世界ではGPUに広帯域のインターコネクトが求められていた。加えて、ディープラーニング(深層学習)でも、モデルの拡大と複雑化が進んだことで、マルチGPUのボトルネックを軽減することが求められるようになった。そうした流れに、NVIDIAは応えつつある。
NVIDIAのマルチGPU戦略は、NVIDIAのGPU製品の分化と密接に関係している。NVIDIAは、コンピューティング向けGPUとグラフィックス向けGPUの2系統に製品を分化させつつある。Keplerまでは両系統のGPUを1つにまとめていた。
しかし、Keplerの後に、グラフィックスに最適化した「Maxwell」を投入した後は、2系列に分化させている。GPUコンピューティング向けでは、ダイ当たりの演算性能を引き上げるだけでなく、HBMメモリ導入によるメモリ帯域の拡張とNVLink導入によるインターコネクト帯域の拡張に向かった。
逆を言えば、製品を2系統に分化させることで、NVIDIAはこうしたGPUコンピューティングに最適化した拡張を行なうことができるようになった。
インターコネクト帯域が急激に伸びるNVIDIA GPU
巨大な並列プロセッサであるGPUは、メモリ帯域イーターだ。そして、GPU同士を連携させようとすると、互いのメモリにアクセスするための膨大なインターコネクト帯域が必要となる。そのため、NVIDIAは過去3世代のコンピューティング向けGPUメジャーアーキテクチャで、インターコネクトの拡張に集中してきた。
従来のGPUは、PCI Expressの呪縛に縛られていた。従来のGPUは、一部のケースを除けば、PCI Expressだけをチップ間インターコネクトとしていた。ホストCPUとの接続も、ほかのGPUとの接続も全てPCI Expressに頼っていた。しかし、PCI Expressは、スローペースでしか進化しない。そのため、インターコネクト帯域は、GPUのコンピューティング性能とメモリ帯域の向上に追いついていなかった。それが、マルチGPU構成のボトルネックとなっており、CPUとGPUを混載したコンピュートノードの設計の頭痛のタネとなっていた。
たとえば、2世代前のKepler世代のNVIDIA GPUは、「Tesla K40(GK110/180)」ならメモリ帯域がGDDR5で288GB/s、それに対してインターコネクトはPCI Express Gen3で物理層で32GB/sだった。メモリ帯域の方がインターコネクトより9倍も帯域が広く、PCI Expressがボトルネックとなっていた。FP32で4.2TFLOPSの演算性能が、わずか32GB/sのI/Oで繋がれていた。GPUボードの中では速いが、GPUから外に出ると、途端に遅くなる。そのため、GPUをまたがるワークロードには制約があった。
前世代のPascalの「Tesla P100(GP100)」になると、メモリは積層のHBM2となり帯域が732GB/sに跳ね上がった。演算性能もFP32で10.6TFLOPSとなった。そして、NVIDIAは、この世代から、同社のチップ間インターコネクトNVLinkを導入した。NVLink 1.0で、インターコネクト帯域は、一気に拡張された。
NVLinkによって、GP100は160GB/sのインターコネクト帯域となった。GP100もPCI Express gen3を搭載するが、GPU同士の接続やPower系CPUとの接続にはNVLinkが使われる。GP100のNVLinkは第1世代で、転送レートは1ペアあたり片方向で20Gbps。NVLinkは、各ポートにつき、片方向が8ペア、双方向で16ペアで構成される。そのため、NVLink 1.0での1ポートあたりの転送レートは物理層レベルでは40GB/sとなる。GP100は、NVLink 1.0を4ポート備えるため、NVLinkの帯域は合計で160GB/s。メモリ帯域に対するNVLink帯域の比率は4.6対1で約22%。
現在のVoltaアーキテクチャの「Tesla V100(GV100)」では、メモリ帯域は900GB/sに上がった。しかし、インターコネクト帯域はそれ以上に跳ね上がった。GV100は、6ポートのNVLinkを実装しており、NVLinkの転送レートも25Gbpsへと上がった。そのため、1ポートの帯域は50GB/sとなり、GPUチップトータルの帯域は6ポート×50GB/sで、ピーク300GB/sとなった。
メモリ帯域とインターコネクト帯域の比率では3対1で、メモリ帯域の33%のインターコネクト帯域となる。それでも3分の1と思うかも知れないが、これはHBM2のメモリ帯域が広いためで、300GB/sのインターコネクト帯域は、商用プロセッサとしては異常な広帯域だ。広帯域メモリの帯域だ。PCI Expressは、GV100でも依然として32GB/sなので、10倍の帯域となる。NVLinkとPCI Expressを合わせると物理帯域で332GB/sに達する。
KeplerからVoltaまでの3世代で、NVIDIA GPUのメモリ帯域は3倍、演算性能はFP32で3.7倍になったが、インターコネクト帯域は10倍以上となった。この比率を見ると、NVIDIAがGPU開発において、どこにフォーカスしているのかが明瞭にわかる。
Power8/9とはNVLinkで直接続
NVLinkの大きな利点は、GPU同士を直接直結できること。これまでもPCI Expressスイッチを使えばGPU同士を接続できたが、通常はCPUを介してPCI Expressで接続していた。GPU間のデータ転送については、NVLinkでCPUを介さず直結することで、余計なステップを踏まずに低レイテンシで実行できるようになった。
また、NVLinkをサポートするCPUとは、GPUを広帯域に接続できるようになった。ただし、NVLinkをサポートするのは、IBMのPower8とPower9だ。Power8はNVLink 1.0、Power9はNVLink 2.0をサポートする。Volta GV100とPower9の組み合わせでは、Power9と2個のGV100がそれぞれ3ポートのNVLinkで接続され、GV100同士も3ポートのNVLinkで接続される。それぞれの帯域は150GB/sとなる。
この構成を使ったIBMのPower System AC922では、2個のPower9と4個のVolta GV100の構成となっている。さらに、CPUあたり3個のGV100を接続した6 GPU構成のバージョンも用意する。こちらは、それぞれのチップ間接続が2ポートで100GB/s帯域となる。また、NVLinkを介した接続の場合は、CPUとGPUでキャッシュコヒーレントを取ることができる。大枠で見ると、NVLinkは、今後のアクセラレータポートの時代の流れに乗っていると考えることもできる。IBMはNVLinkとOpenCAPIで共通のPHYを使っている。
x86 CPUとはPCI Express接続
NVLinkを持たないx86 CPUシステムについては、NVLinkはGPU同士の接続にだけ使われる。x86 CPUとの接続はPCI Expressとなる。NVIDIAが2016年に発表したGPUコンピューティングシステム「DGX-1」は、2CPUと8GPUのシステム。CPUとGPUは、PCI Expressを介して接続されている。この時点では、Pascal GP100ベースだったので、GPU同士は1ポートのNVLink 1.0で40GB/sで接続されていた。また、GPU同士がNVLinkで直結されていない組み合わせもあった。
ちなみに、東京工業大学のTSUBAME3.0も、Pascalベースで4 GPUをNVLinkで接続し、CPUとはPCI Expressで接続している。ただし、TSUBAME3.0は、ノード間をPCI Expressスイッチを経由したOmni-Path 4ポートで接続するという構成となっており、ノード間も強化している。
昨年(2017年)のVolta発表と同時に発表されたGV100ベースの「DGX-1V」では、GPUあたりのNVLinkポート数が6ポートになったことで構成が拡張された。NVLink 2.0で1ポートが50GB/sになり、GPU同士の接続が2ポートになった組み合わせもできた。しかし、依然として1ホップでNVLink接続されていないGPUの組み合わせも残った。さらに、8個を越えるGPUの構成にしようとすると、DGX-1V同士をInfinibandで接続することになり、ボトルネックが生じる。
GPU間をフル帯域で接続するためにNVSwitchを導入
NVIDIAは、NVLinkの導入以降、4GPU、8GPUと、マルチGPU構成を拡張して来た。そして、DGX-1Vまでの構成で見えているのは、NVIDIAが理想とする帯域で接続するには、NVLinkのポート数が不足していることだ。しかし、6ポートでも、GPUにはかなりの負担となる。そこでNVIDIAが開発したのが、NVLinkのスイッチである「NVSwitch」だった。
NVSwitchの目的は野心的で、16個のGPUをスイッチを介して接続するだけでなく、GPUのNVLinkのフル帯域の300GB/sで接続するというものだ。これを可能にするためには、GPUのポートを全てフル接続のクロスバスイッチに接続しなければならない。そのためには、NVLinkで108ポートの108x108のスイッチを作らなければならなくなる。しかし、これは技術的に不可能だ。
通常なら、そこで妥協して、例えば、4ポートのNVLinkで4個のGPU同士を直接続して、残りの2ポートでGPUノード間をスイッチ群で接続するような構成を考える。ところが、NVIDIAはあくまでもGP100のNVLinkフル帯域での接続にこだわった。その結果できたのが、18ポートのNVLinkのNVSwitchを6個使った、16GPUのフル帯域接続だったというわけだ。
6個×2セットのNVSwitchを使うDGX-2
NVIDIAは、DGX-2では1ボードに6個のNVSwitch、システム全体で12個のNVSwitchを使うことで、16個のGPU同士のフル帯域接続を可能としている。GPUが同じベースボード上の別なGPUにアクセスする場合は、下の図の上のように6個のスイッチを経由して300GB/sのフル帯域でアクセスができる。
GPUがもう1つのベースボード上のGPUにアクセスする場合も、GPUは6つのNVLinkポートで6個のNVSwitchにアクセス。6個のNVSwitchチップから、もう片方のベースボード上の6個のNVSwitchチップにスイッチされ、6個のNVSwitchチップからGPUへと6ポートでアクセスする。
両GPUの6つのNVLinkポートをフルに使って、ピーク理論値で300GB/sのアクセスが可能だ。2組のGPUの間でデータ転送を行なっても、ノンブロッキングのスイッチなので、どちらもフル帯域アクセスが可能だ。
こうして見ると、DGX-2の6個x2セットのNVSwitchは一続きのファブリックとして働くことがわかる。概念的に見ると、下のような構成となる。単一のスイッチチップで、GP100のNVLink同士をフル接続することが技術的に不可能なので、スイッチチップを分割したという見方もできる。
非常に特殊なのは、NVSwitchが、GPUノード内での広帯域接続を目的として作られたと見られる点だ。GPUのNVLink帯域をフルに活かしてGPU同士を接続するという点にこだわっている。今後、ノード間接続にまで広げていくのかはわからないが、現状ではノード内のチップ間超広帯域接続のためのスイッチとなっている。このあたりは、IntelのOmni-Pathとは発想が異なっている。
ちなみに、DGX-2では、16個のGPUを接続するために合計12個のNVSwitchを使っているが、NVSwitchのポート構成だけを見れば、これは6個のNVSwitchチップで実現できる。NVIDIAは、DGX-2のwebセミナや日本で開催した「NVIDIA Deep Learning Seminar 2018」などで、12個のNVSwitchの構成にした理由を説明している。
現在のDGX-2は、8個のGV100 GPUと6個のNVSwitchで1ボードを構成して、2枚のボードをNVLinkで接続することで16 GPU構成を実現している。16個のGPUと6個のNVSwitchをワンボードに載せた場合は、ボード設計上、信号品質を保つことが難しくなる。また、システムの冷却などもボードを分割したほうが容易になるという。もっとも、そのために、電力消費の多いNVSwitchチップの個数を2倍にしている。
コスト的に考えると、DGX-2の構成はじつに贅沢だ。ワンショットぎりぎりの巨大GPUが16個に、加えて20億トランジスタの強力なスイッチチップを12個載せている。NVIDIA GPUがそれだけ高く売れていることを背景にした、ブルートフォースなGPUサーバーだ。勢いに乗っているNVIDIAの余裕が産み出したソリューションとも言えそうだ。