サブロウ丸

Sabrou-mal サブロウ丸

主にプログラミングと数学

CUDA-aware OpenMPIのビルド

OpenMPIはCUDA-awareをサポートしている。 すなわち、集団通信実行の際に、(ホストメモリでなく)CUDA上のメモリポインタを渡してもそのまま動作するというもの。

https://www.open-mpi.org/faq/?category=runcuda#mpi-cuda-aware-support のコードを実行することで、自身のOpenMPIがCUDA-awareをサポートしているかを確認できる。

OpenMPIのビルド

自身でCUDA-awareサポートのOpenMPIをビルドする場合は ./configure実行時に次のオプションを追加する。

  • --with-cuda (=/usr/local/cuda)
  • --with-cuda-libdir=/usr/local/cuda/lib64/stubs

二つ目のオプションはなんでstubs?となるが、こうしないとうまくMPIがCUDA-awareであると認識してもらえない。チェックコードを実行してThis MPI library does not have CUDA-aware support という結果になったり、ompi_info --parsable --all | grep mpi_built_with_cuda_support:valueの出力がfalseになったりする。

参考:

このstubsはリンク用のダミーであり、実行時には用いないこと。

UCXとUCCのビルド

UCXやUCCもCUDA対応させたい場合は、こちらもconfigureのオプションにcudaを追加する。

-- with-cuda (=/usr/local/cuda)

UCCでは

--with-nvcc-gencode

でビルドするNVIDIA GPUアーキテクチャを指定できる。例: --with-nvcc-gencode="-gencode=arch=compute_70,code=sm_70 -gencode=arch=compute_70,code=compute_70 -gencode=arch=compute_80,code=sm_80 -gencode=arch=compute_80,code=compute_80"

テスト

CUDA対応できているか次のプログラムでテストする。

出力のCOLL_SCORE_MAPに次のようにCuda メモリの欄があることを確認する。

       ucc_team.c:471  UCC  INFO  ===== COLL_SCORE_MAP (team_id 0, size 1) =====
ucc_coll_score_map.c:206  UCC  INFO  Allgather:
ucc_coll_score_map.c:206  UCC  INFO     Host: {0..inf}:TL_SELF:10 
ucc_coll_score_map.c:206  UCC  INFO     Cuda: {0..inf}:TL_SELF:10 
ucc_coll_score_map.c:206  UCC  INFO     CudaManaged: {0..inf}:TL_SELF:10 
ucc_coll_score_map.c:206  UCC  INFO     Rocm: {0..inf}:TL_SELF:10 
ucc_coll_score_map.c:206  UCC  INFO     RocmManaged: {0..inf}:TL_SELF:10 
ucc_coll_score_map.c:206  UCC  INFO  Allgatherv:
ucc_coll_score_map.c:206  UCC  INFO     Host: {0..inf}:TL_SELF:10 
ucc_coll_score_map.c:206  UCC  INFO     Cuda: {0..inf}:TL_SELF:10 
ucc_coll_score_map.c:206  UCC  INFO     CudaManaged: {0..inf}:TL_SELF:10 
ucc_coll_score_map.c:206  UCC  INFO     Rocm: {0..inf}:TL_SELF:10 
ucc_coll_score_map.c:206  UCC  INFO     RocmManaged: {0..inf}:TL_SELF:10 
...
...
       ucc_team.c:474  UCC  INFO  ================================================