コンテンツにスキップ

SHARPの利用

ABCIの計算ノード(A)ではScalable Hierarchical Aggregation and Reduction Protocol (SHARP)™が利用可能です。 SHARPの利用により、集団演算をCPUやGPUからネットワークにオフロードし、エンドポイント間でのデータ転送が削減されるため、MPIや機械学習における集団演算のパフォーマンス向上が期待できます。

NVIDIA NCCLでSHARPを利用する

NVIDIA NCCLでSHARPを利用するには、NCCL-SHARPプラグインを使用します。

ABCIでは計算ノード(A)向けにNCCL-SHARPプラグインをモジュールとして提供しています。 プラグインは、NCCLのバージョンごとに対応するモジュールが変更になります。プラグインとNCCLの対応は以下の表を参照してください。

Note

NCCL-SHARPプラグインは試験的に提供しており、性能および動作を保証しているものではありません。

NCCL SHARPプラグインモジュール NCCLバージョン
nccl-rdma-sharp-plugins/v2.1.x-5f238fb 2.8、2.11
nccl-rdma-sharp-plugins/v2.2.x-5e6ed3e 2.12
nccl-rdma-sharp-plugins/v2.5.x-4ccb98a 2.12、2.13、2.14、2.15、2.16、2.17、2.18、2.19

NCCLでSHARPを使用するには、CUDA、NCCL、およびNCCL SHARPプラグインモジュールをロードし、次の環境変数を設定します。

[username@es-a1 ~] module load cuda/11.2 nccl/2.8 nccl-rdma-sharp-plugins/v2.1.x-5f238fb
  • NCCL_COLLNET_ENABLE=1
  • SHARP_COLL_LOCK_ON_COMM_INIT=1
  • SHARP_COLL_NUM_COLL_GROUP_RESOURCE_ALLOC_THRESHOLD=0
  • (任意) SHARP_COLL_LOG_LEVEL=3

nccl-testsを使用した例

nccl-testsを使い、NCCLでSHARPを有効にする例を以下に示します。

Warning

nccl-rdma-sharp-plugins/v2.5.x-4ccb98aにおいて、NCCL 2.12 ~ 2.16ではnccl-testsが動作しない問題を確認しています。

まず、nccl-testsをダウンロードし、MPIサポートを有効にした上でビルドします。

[username@es-a1 ~] module load hpcx/2.12 cuda/11.2 nccl/2.8
[username@es-a1 ~] git clone https://github.com/NVIDIA/nccl-tests.git -b v2.11.0
[username@es-a1 ~] cd nccl-tests
[username@es-a1 ~] make MPI=1 MPI_HOME=${OMPI_HOME} CUDA_HOME=${CUDA_HOME} NCCL_HOME=${NCCL_HOME}

ビルド後、buildディレクトリ下にバイナリが生成されますので、mpirunを使用してバイナリを実行します。

[username@es-a1 ~] qrsh -g group -l rt_AF=2 -l h_rt=01:00:00
[username@a0000 ~] module load hpcx/2.12 cuda/11.2 nccl/2.8 nccl-rdma-sharp-plugins/v2.1.x-5f238fb
[username@a0000 ~] cd nccl-tests
[username@a0000 ~] mpirun -np 16 -map-by ppr:8:node \
-hostfile ${SGE_JOB_HOSTLIST} \
-x UCX_TLS=dc,shm,self \
-x LD_LIBRARY_PATH=${LD_LIBRARY_PATH} \
-x NCCL_COLLNET_ENABLE=1 \
-x SHARP_COLL_LOCK_ON_COMM_INIT=1 \
-x SHARP_COLL_NUM_COLL_GROUP_RESOURCE_ALLOC_THRESHOLD=0 \
-x SHARP_COLL_LOG_LEVEL=3 \
./build/all_reduce_perf -b 8 -e 2G -f 2 -g 1 -w 50 -n 50

# nThread 1 nGpus 1 minBytes 8 maxBytes 2147483648 step: 2(factor) warmup iters: 50 iters: 50 validation: 1 
#
# Using devices
#   Rank  0 Pid 2916721 on      a0000 device  0 [0x27] NVIDIA A100-SXM4-40GB
#   Rank  1 Pid 2916722 on      a0000 device  1 [0x2a] NVIDIA A100-SXM4-40GB
#   Rank  2 Pid 2916723 on      a0000 device  2 [0x51] NVIDIA A100-SXM4-40GB
#   Rank  3 Pid 2916724 on      a0000 device  3 [0x57] NVIDIA A100-SXM4-40GB
#   Rank  4 Pid 2916725 on      a0000 device  4 [0x9e] NVIDIA A100-SXM4-40GB
#   Rank  5 Pid 2916726 on      a0000 device  5 [0xa4] NVIDIA A100-SXM4-40GB
#   Rank  6 Pid 2916727 on      a0000 device  6 [0xc7] NVIDIA A100-SXM4-40GB
#   Rank  7 Pid 2916728 on      a0000 device  7 [0xca] NVIDIA A100-SXM4-40GB
#   Rank  8 Pid 3868300 on      a0001 device  0 [0x27] NVIDIA A100-SXM4-40GB
#   Rank  9 Pid 3868301 on      a0001 device  1 [0x2a] NVIDIA A100-SXM4-40GB
#   Rank 10 Pid 3868302 on      a0001 device  2 [0x51] NVIDIA A100-SXM4-40GB
#   Rank 11 Pid 3868303 on      a0001 device  3 [0x57] NVIDIA A100-SXM4-40GB
#   Rank 12 Pid 3868304 on      a0001 device  4 [0x9e] NVIDIA A100-SXM4-40GB
#   Rank 13 Pid 3868305 on      a0001 device  5 [0xa4] NVIDIA A100-SXM4-40GB
#   Rank 14 Pid 3868306 on      a0001 device  6 [0xc7] NVIDIA A100-SXM4-40GB
#   Rank 15 Pid 3868307 on      a0001 device  7 [0xca] NVIDIA A100-SXM4-40GB
[a0000:0:2916721 - context.c:589] INFO job (ID: 2838387367436317) resource request quota: ( osts:0 user_data_per_ost:0 max_groups:0 max_qps:1 max_group_channels:1, num_trees:1)
[a0000:0:2916721 - context.c:759] INFO tree_info: type:LLT tree idx:0 treeID:0x0 caps:0x6 quota: ( osts:167 user_data_per_ost:1024 max_groups:167 max_qps:1 max_group_channels:1)
--(snip)--
#
#                                                       out-of-place                       in-place          
#       size         count      type   redop     time   algbw   busbw  error     time   algbw   busbw  error
#        (B)    (elements)                       (us)  (GB/s)  (GB/s)            (us)  (GB/s)  (GB/s)       
           8             2     float     sum    22.54    0.00    0.00  4e-07    24.94    0.00    0.00  4e-07
          16             4     float     sum    23.66    0.00    0.00  4e-07    24.72    0.00    0.00  1e-07
          32             8     float     sum    24.62    0.00    0.00  1e-07    23.51    0.00    0.00  1e-07
          64            16     float     sum    24.10    0.00    0.00  1e-07    23.54    0.00    0.01  1e-07
         128            32     float     sum    22.98    0.01    0.01  1e-07    22.58    0.01    0.01  1e-07
         256            64     float     sum    24.35    0.01    0.02  1e-07    24.08    0.01    0.02  1e-07
         512           128     float     sum    25.48    0.02    0.04  1e-07    25.99    0.02    0.04  1e-07
        1024           256     float     sum    34.96    0.03    0.05  4e-07    35.66    0.03    0.05  4e-07
        2048           512     float     sum    35.83    0.06    0.11  4e-07    34.95    0.06    0.11  4e-07
        4096          1024     float     sum    35.33    0.12    0.22  5e-07    34.38    0.12    0.22  5e-07
        8192          2048     float     sum    37.07    0.22    0.41  5e-07    35.50    0.23    0.43  5e-07
       16384          4096     float     sum    39.64    0.41    0.77  5e-07    39.44    0.42    0.78  5e-07
       32768          8192     float     sum    45.63    0.72    1.35  5e-07    44.35    0.74    1.39  5e-07
       65536         16384     float     sum    52.22    1.26    2.35  5e-07    50.17    1.31    2.45  5e-07
      131072         32768     float     sum    63.21    2.07    3.89  5e-07    59.93    2.19    4.10  5e-07
      262144         65536     float     sum    78.91    3.32    6.23  5e-07    77.77    3.37    6.32  5e-07
      524288        131072     float     sum    118.5    4.43    8.30  5e-07    117.8    4.45    8.34  5e-07
     1048576        262144     float     sum    177.0    5.93   11.11  5e-07    174.8    6.00   11.25  5e-07
     2097152        524288     float     sum    215.2    9.75   18.28  5e-07    215.7    9.72   18.23  5e-07
     4194304       1048576     float     sum    275.5   15.22   28.55  5e-07    275.3   15.24   28.57  5e-07
     8388608       2097152     float     sum    387.0   21.67   40.64  5e-07    382.6   21.92   41.11  5e-07
    16777216       4194304     float     sum    549.8   30.51   57.21  5e-07    548.9   30.56   57.30  5e-07
    33554432       8388608     float     sum    870.1   38.56   72.31  5e-07    866.8   38.71   72.58  5e-07
    67108864      16777216     float     sum   1491.4   45.00   84.37  5e-07   1487.8   45.11   84.58  5e-07
   134217728      33554432     float     sum   2587.4   51.87   97.26  5e-07   2581.4   51.99   97.49  5e-07
   268435456      67108864     float     sum   5207.5   51.55   96.65  5e-07   5194.4   51.68   96.90  5e-07
   536870912     134217728     float     sum   9979.3   53.80  100.87  5e-07   9930.5   54.06  101.37  5e-07
  1073741824     268435456     float     sum    19340   55.52  104.10  5e-07    19335   55.53  104.13  5e-07
  2147483648     536870912     float     sum    38180   56.25  105.46  5e-07    38163   56.27  105.51  5e-07
# Out of bounds values : 0 OK
# Avg bus bandwidth    : 29.0317 
#