ISC 2019において「InfiniBand in-Network Computing Technology and Roadmap」というセッションがあり、その中でMellanoxが集合通信を高速化する「SHARP(Scalable Hierarchical Aggregation and Reduction Protocol)」について発表を行った。SHARP自体は2017年に発表されており今回の発表が新規ではないが、ネットワークの高性能化という点では重要な技術である。

  • SHARP

    MellanoxのSHARPは、集合通信をCPUからオフロードして、性能を上げる (このレポートのすべての図は、ISC 2019でのMellanoxのSHARPの発表スライドを撮影したものである)

ノード間を接続するネットワークは、ノード間でデータを送受するのが一番の役目であるが、多数のノードで分散処理を行った場合は、全ノードの処理結果を集めて合計を取り、その結果を全ノードに配ってから、次の処理を始めるという使い方は良く行われる。マシンラーニングの分散学習などは、その例である。

一番基本的なやり方は、マスターのノードを決め、全ノードからマスターノードに自分の処理結果を送信し、マスターノードは全部のノードから処理結果を受け取ったら、そのデータに基づいて処理を行い、その結果を順番に全ノードに送っていくというやり方である。しかし、このやり方では、マスターノードは各ノードからの受信と処理結果の各ノードへの送信を行う必要があり、ノード数が多くなると非常に時間が掛る。

この時間を短縮するには、例えば結果の分配の場合は、マスターノードから何個かの子ノードにデータを送り、データを受け取った子ノードが何個かの孫ノードにデータを分配するというようにすれば、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が使える。

  • SHARP

    SHARPはツリールートから(複数段の)アグレゲーションノードを経由してツリーエンドノードに繋がる。SHARPでは、CPUを使わずネットワーク側で、このツリーを通して、バリア、リデュース、オールリデュース、ブロードキャストなどができる

次の図のグラフは128ノードのネットワークでのAllReduceの実行時間を示すもので、横軸はクラスタサイズで、右端が全ノードを1クラスタにした場合になる。左のグラフはデータサイズが8B(青)と128B(赤)のもので、右のグラフは1024B(青)と2048B(赤)のものである。そして、実線はSHARPのレーテンシ、破線はCPUを使ったソフトウェアでのAllReduceのレーテンシである。

CPUによるリデュースの場合は、データ量が大きくなるとレーテンシの増加が顕著であるが、SHARPを使うとレーテンシの増加は僅かで、レーテンシが75%減少すると書かれている。

  • SHARP

    実線がSHARPを使った場合、破線がソフトでAllReduceを行った場合のレーテンシ(μs)。SHARPの方がクラスタサイズが増加してもレーテンシの増加が少ない

次のグラフは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ができている。

  • SHARP

    SHRPを使ったAllReduceとソフトウェアのAllReduceのレーテンシの比較。左は1500ノード 1PPNの場合。右は1500ノードであるが、60K MPIランクで40PPNの場合

次の図はOak Ridge国立研究所のSummitスパコンでの測定結果で、全ノードではなく、512ノードでの測定結果である。左はMPIバリアのレーテンシ、右は4/8/16ByteのデータのAllReduceのレーテンシである。

MPIバリアの方はソフトウェアでは17~18μsであるのに対して、SHARPでは4μs程度と約4倍高速である。AllReduceの方もほぼ同じで、SHARPでは4μs程度、ソフトウェアでは16~17μsのレーテンシとなっている。

  • SHARP

    Summitスパコンの512ノードでのMPIバリアとAllReduceのレーテンシ。どちらも、SHARPを使った場合はレーテンシは4μs程度であるが、ソフトウェアでは16~18μsである

次の図はResNet-50での画像認識の性能で、左は8ノードで16GPUの構成、右は8ノードで22GPUの構成の結果である。AIソフトウェアはTensorFlowにHorovodを使って分散処理を行っている。

ソフトウェア処理の方はNVIDIAのGPU用にチューニングされたNCCL2ライブラリを使っているが、それでもSHARPを使うと左のグラフでは11%、右のグラフでは16%画像認識速度が向上している。

  • SHARP

    8ノード16GPU(左)と8ノード22GPU(右)の構成でNCCL2ライブラリを使った場合とSHARPを使った場合のResNet50の画像認識速度の比較。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倍の性能となっている。

  • SHARP

    短いメッセージを大量に送った場合のスループット。メッセージサイズは4B~256Bで、RoCE、InfiniBand、InfiniBand+SHARPの順に棒グラフが並んでいる。256Bのメッセージの場合、RoCEに比べてInfiniBand+SHARPは2.1倍のスループット

従来は、InfiniBandのネットワークインタフェースLSI(IB NIC)とCPUのハンドシェークを行ってMPI処理を実行していたのであるが、MellanoxのConnectX-6 IB NICでは、MPIを実行する機能を内蔵し、CPUに割り込みを掛けたりする必要が無くなったことや、CPUとIB NICの間のデータ転送が無くなったことで性能が上がっている。同時に、消費電力も減少していると思われる。