ISC 2019において「InfiniBand in-Network Computing Technology and Roadmap」というセッションがあり、その中でMellanoxが集合通信を高速化する「SHARP(Scalable Hierarchical Aggregation and Reduction Protocol)」について発表を行った。SHARP自体は2017年に発表されており今回の発表が新規ではないが、ネットワークの高性能化という点では重要な技術である。
ノード間を接続するネットワークは、ノード間でデータを送受するのが一番の役目であるが、多数のノードで分散処理を行った場合は、全ノードの処理結果を集めて合計を取り、その結果を全ノードに配ってから、次の処理を始めるという使い方は良く行われる。マシンラーニングの分散学習などは、その例である。
一番基本的なやり方は、マスターのノードを決め、全ノードからマスターノードに自分の処理結果を送信し、マスターノードは全部のノードから処理結果を受け取ったら、そのデータに基づいて処理を行い、その結果を順番に全ノードに送っていくというやり方である。しかし、このやり方では、マスターノードは各ノードからの受信と処理結果の各ノードへの送信を行う必要があり、ノード数が多くなると非常に時間が掛る。
この時間を短縮するには、例えば結果の分配の場合は、マスターノードから何個かの子ノードにデータを送り、データを受け取った子ノードが何個かの孫ノードにデータを分配するというようにすれば、O(N)ではなく、O(logN)の時間で全ノードへの分配ができる。
MellanoxのSHARPは、このような分配をCPUを使うことなく、ネットワーク側で実行することにより、CPUを使うより高い性能を実現するものである。
SHARPでは、次の図のようにSHARP Tree Nodeから何個かのTree Aggregation Nodeに繋がり、ノード数が多い場合には、何段かのTree Aggregation Nodeを経由してTree End Nodeに繋がるという風に、InfiniBandネットワークの中に論理的なツリーを作成する。この図ではツリーの数は1個であるが、複数のツリーを同時に動かすこともできる。
そして、SHARPでは、バリア、リデュース、オールリデュース、ブロードキャストなどをオフロードし、CPUを使うことなくネットワークインタフェースで実行することができる。扱えるデータは、16/32/64bitの整数と浮動小数点数で、リデュースの演算としては、和、最小、最大、最小位置、最大位置、OR、XOR、ANDが使える。
次の図のグラフは128ノードのネットワークでのAllReduceの実行時間を示すもので、横軸はクラスタサイズで、右端が全ノードを1クラスタにした場合になる。左のグラフはデータサイズが8B(青)と128B(赤)のもので、右のグラフは1024B(青)と2048B(赤)のものである。そして、実線はSHARPのレーテンシ、破線はCPUを使ったソフトウェアでのAllReduceのレーテンシである。
CPUによるリデュースの場合は、データ量が大きくなるとレーテンシの増加が顕著であるが、SHARPを使うとレーテンシの増加は僅かで、レーテンシが75%減少すると書かれている。
次のグラフは1500ノードで、60K MPIランクを持ち、Dragonfly+トポロジのネットワークでSHARPとソフトウェアでAllReduceを行った場合の処理時間を比較したものである。左の棒グラフは1PPN(Process Per Node)、右の棒グラフは60K MPI ランクで、40PPN(1ノードが40個のMPIプロセスを担当する)での測定結果である。
左のグラフでは2048Bのデータでは、ソフトウェアではAllReduceに60μs程度かかっているが、SHARPを使った場合は10us程度である。右のグラフではデータサイズは256B、512B、1024Bの3点である。ソフトウェアでは180~200μs掛かっているが、SHARPでは20~30μsでAllReduceができている。
次の図はOak Ridge国立研究所のSummitスパコンでの測定結果で、全ノードではなく、512ノードでの測定結果である。左はMPIバリアのレーテンシ、右は4/8/16ByteのデータのAllReduceのレーテンシである。
MPIバリアの方はソフトウェアでは17~18μsであるのに対して、SHARPでは4μs程度と約4倍高速である。AllReduceの方もほぼ同じで、SHARPでは4μs程度、ソフトウェアでは16~17μsのレーテンシとなっている。
次の図はResNet-50での画像認識の性能で、左は8ノードで16GPUの構成、右は8ノードで22GPUの構成の結果である。AIソフトウェアはTensorFlowにHorovodを使って分散処理を行っている。
ソフトウェア処理の方はNVIDIAのGPU用にチューニングされたNCCL2ライブラリを使っているが、それでもSHARPを使うと左のグラフでは11%、右のグラフでは16%画像認識速度が向上している。
次の図は32ノード1PPNで、小さなメッセージを大量に送った場合の性能で、RoCEとInfiniBand、InfiniBandでSHARP使用の3つの条件でのAllReduceのスループットを比較したものである。なお、RoCE(RDMA on Converged Ethernet)はEthernetの媒体を使ってRDMA(Remote DMA)で高速データ転送を行う方法である。
メッセージのサイズは4Bから256Bまで、2のべき乗で棒グラフが並んでいる。それぞれのメッセージサイズの中の3つの棒は、左から、RoCE、InfiniBand、IB+SHARPの順に並んでいる。
見た通りInfiniBandのSHARP使用が最もスループットが高く、256Bのメッセージの場合のスループットは約90MB/sで、RoCEに比べて2.1倍の性能となっている。
従来は、InfiniBandのネットワークインタフェースLSI(IB NIC)とCPUのハンドシェークを行ってMPI処理を実行していたのであるが、MellanoxのConnectX-6 IB NICでは、MPIを実行する機能を内蔵し、CPUに割り込みを掛けたりする必要が無くなったことや、CPUとIB NICの間のデータ転送が無くなったことで性能が上がっている。同時に、消費電力も減少していると思われる。