LoginSignup
1
0

More than 3 years have passed since last update.

ROCm 3.x から RCCL が普通に動き始め, 複数 GPU 間通信ができるようになってきました

Last updated at Posted at 2019-06-13

ROCm 2.5 から, GPU 間の corrective 通信 RCCL(NCCL の ROCm バージョン)が動き始めました.

ROCm 3.x あたりから, API は NCCL そのままになりました(ややこしいが, NVIDIA の NCCL そのままのインターフェイスで, 実装だけ ROCm? で置き換えたもの)

RCCL により, GPU 間でのデータ転送や集約が高速に行える... はず.
たとえば StyleGAN https://github.com/NVlabs/stylegan では複数 GPU での training に NCCL を利用していますが, RCCL により StyleGAN の AMD GPU での複数 GPU 学習が可能になる気配があります.

4 x VEGAs で動作確認しました.

利用方法

ROCm 2.10 あたりから, rccl も apt パッケージで提供されるようになりました.

自前でビルドしたい場合, ROCm のバージョンに合わせた brach を引き(master-rocm-2.5 など), README にしたがってビルドします.

test を走らせたい場合, ベンチマークにも使える rccl-tests があります.

こちらは OpenMP を使っていませんので問題なくビルドできます.

x299 + 4 x VEGAs で all_gather をためしたところ, 1.97 GB/s くらいでした.

$ LD_LIBRARY_PATH=/opt/rocm/rccl/lib ./all_gather_perf -g 4
# nThread 1 nGpus 4 minBytes 33554432 maxBytes 33554432 step: 1048576(bytes) warmup iters: 5 iters: 20 validation: 1 
#
# Using devices
#   Rank  0 Pid  23147 on        wwk device  0 [0x0c] Vega 10 XT [Radeon RX Vega 64]
#   Rank  1 Pid  23147 on        wwk device  1 [0x19] Vega 10 XT [Radeon RX Vega 64]
#   Rank  2 Pid  23147 on        wwk device  2 [0x67] Vega 10 XT [Radeon RX Vega 64]
#   Rank  3 Pid  23147 on        wwk device  3 [0x6a] Vega 10 XT [Radeon RX Vega 64]
#
#                                             out-of-place                       in-place          
#       size         count    type     time   algbw   busbw  error     time   algbw   busbw  error
#        (B)    (elements)             (us)  (GB/s)  (GB/s)            (us)  (GB/s)  (GB/s)       
    33554432       2097152   float    13115    1.92    1.92  0e+00    12802    1.97    1.97  0e+00
# Out of bounds values : 0 OK
# Avg bus bandwidth    : 1.94233 

少なくとも PCIe Gen3 x4 では接続されているはずなので 3.94 GB/s くらいは理論上出るはずですが(https://en.wikipedia.org/wiki/PCI_Express), 半分の性能になっています. はて?

問題点

rccl の repo に昔あったサンプルコード

を最新 RCCL でビルドして動かすと

あたりでとまります. API 呼び出しかなにか変わったのかもしれません.
rccl 最新の unit test コードあたりなどを参考にして, RCCL 利用プログラムを作成するのがよさそうです.

Debug

NCCL_DEBUG=INFO と環境変数を指定します.

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0