Slurm クラスタで NCCL を実行する

このページでは、Slurm クラスタで NCCL テストを実行する方法について説明します。クラスタの健全性を検証するための組み込み NCCL テストを含むマネージド Slurm 環境を使用するには、Cluster Director をご覧ください。

マシンタイプの手順を選択します。

A4X と A4

次のテストでは、NCCL テストの実行を調整するために使用される、Python で記述されたオープンソースのマルチプラットフォーム実験フレームワークである Ramble を使用します。Ramble とその依存関係は、A4X マシンで使用される ARM64 アーキテクチャと互換性があります。

このテストで使用される実行スクリプトは、Slurm コントローラ ノードの /opt/apps/system_benchmarks にステージングされ、クラスタ内のすべてのノードで使用できます。このテストを実行すると、Ramble が /opt/apps/ramble ディレクトリにインストールされます。

  1. ${HOME} ディレクトリのログインノードから、次のコマンドを実行します。テストには約 10 分かかる場合があり、他のジョブがキューにある場合はさらに時間がかかるため、次のコマンドでは nohup を使用して stdout/err をログファイルにリダイレクトします。

    nohup bash /opt/apps/system_benchmarks/run-nccl-tests-via-ramble.sh >& nccl.log &

    このコマンドは、すべてのテスト結果を保存する nccl-tests_$(date +%s) というフォルダを作成します。日付タグを使用すると、現在のタイムスタンプに基づいて一意のフォルダが作成されます。

    たとえば、クラスタに 16 個のノードがある場合、NCCL テストは 2、4、8、16 個のノードで all-gatherall-reducereduce-scatter に対して実行されます。

  2. 結果を確認します。nccl.log には、テストの設定と実行のログが含まれます。これらのログを表示するには、次のコマンドを実行します。

    tail -f nccl.log

    また、Ctrl+C を使用して、いつでも出力の追跡を停止できます。nccl.log の最後に、次のような出力が表示されます。

    ...
    ---- SUMMARY for >1GB Message Sizes ----
    workload        n_nodes msg_size        busbw
    all-gather      2       1073741824      ###.##
    all-gather      2       2147483648      ###.##
    all-gather      2       4294967296      ###.##
    all-gather      2       8589934592      ###.##
    ...
    all-reduce      2       1073741824      ###.##
    ...
    reduce-scatter  2       1073741824      ###.##
    ...
    -------- Benchmarking Complete -------
    

    すべての Slurm ジョブ スクリプトと nccl-tests 出力ログは、nccl-tests_$(date +%s)/experiments ディレクトリに保存されます。NCCL テストのパフォーマンスの概要も nccl-tests_${date +%s)/summary.tsv ファイルに保存されます。

    nccl-tests_$(date +%s)/ ディレクトリを削除すると、これらのテスト中に生成されたすべてのファイルが削除されます。

A3 Ultra

  1. ログインノードの共有ディレクトリ(通常、このノードは ${HOME} にあります)から、次のコマンドを実行して NCCL テストのビルドに必要なスクリプトをダウンロードします。

    wget -np -nd https://raw.githubusercontent.com/GoogleCloudPlatform/cluster-toolkit/refs/heads/main/examples/machine-learning/a3-ultragpu-8g/nccl-tests/build-nccl-tests.sh
  2. スクリプトがダウンロードされたら、NVIDIA コンテナ レジストリから Pytorch イメージをインポートし、NCCL テストをビルドします。これを行うには、次のコマンドを実行します。

    sbatch build-nccl-tests.sh

    上記のスクリプトは、ノードのいずれかで実行されます。--container-mounts スイッチを使用して、現在のディレクトリ $PWD をコンテナ内の /nccl ディレクトリにマウントします。

  3. NCCL テストがビルドされていることを確認します。これを確認するには、次のコマンドを実行します。

    sacct -a

    正常に完了すると、出力は次のようになります。

    JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
    ------------ ---------- ---------- ---------- ---------- ---------- --------
    1            build-ncc+    a3ultra                   112  COMPLETED      0:0
    

    ビルドが成功すると、コマンドを実行したディレクトリに nvidia+pytorch+24.09-py3.sqsh という名前のファイルと nccl-tests という名前のディレクトリが作成されます。

  4. nccl-tests/build フォルダに、all_gather_perfall_reduce_perfreduce_scatter_perfalltoall_perf などの複数のバイナリが含まれていることを確認します。

  5. NCCL テスト スクリプトをダウンロードします。

    wget -np -nd https://raw.githubusercontent.com/GoogleCloudPlatform/cluster-toolkit/refs/heads/main/examples/machine-learning/a3-ultragpu-8g/nccl-tests/run-nccl-tests.sh

    A3 Ultra クラスタでジョブ実行を実行するには、RDMA で高性能ネットワーキングを有効にするために、いくつかの環境変数を設定する必要があります。この手順では enroot コンテナを使用してワークロードを起動するため、これらの変数はホスト環境ではなくコンテナ環境で設定する必要があります。これらの変数は、ダウンロードした run-nccl-tests.sh スクリプトで検査できます。

  6. NCCL テスト スクリプトを実行します。テストには 15 分以上かかることがあります。

    sbatch run-nccl-tests.sh
  7. 結果を確認します。このスクリプトは、nccl all_gather_perf ベンチマークの結果を含む slurm-XX.out ファイルを出力します。

    出力は次のようになります。

    #
    #                                                              out-of-place                       in-place
    #        size         count     type     redop   root     time   algbw   busbw #wrong     time   algbw   busbw #wrong
    #         (B)    (elements)                               (us)  (GB/s)  (GB/s)            (us)  (GB/s)  (GB/s)
        268435456       4194304     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
        536870912       8388608     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
       1073741824      16777216     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
       2147483648      33554432     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
       4294967296      67108864     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
       8589934592     134217728     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
    # Out of bounds values : 0 OK
    # Avg bus bandwidth    : ###.##
    #
    

A3 Mega

  1. ログインノードの共有ディレクトリ(通常、このノードは ${HOME} にあります)から、次のコマンドを実行して NCCL テストのビルドに必要なスクリプトをダウンロードします。

    wget -np -nd https://raw.githubusercontent.com/GoogleCloudPlatform/cluster-toolkit/refs/heads/main/examples/machine-learning/a3-megagpu-8g/nccl-tests/build-nccl-tests.sh
  2. スクリプトがダウンロードされたら、NVIDIA コンテナ レジストリから Pytorch イメージをインポートし、NCCL テストをビルドします。

    sbatch build-nccl-tests.sh

    上記のスクリプトは、ノードのいずれかで実行されます。--container-mounts スイッチを使用して、現在のディレクトリ $PWD をコンテナ内の /nccl ディレクトリにマウントします。

  3. NCCL テストがビルドされていることを確認します。

    sacct -a

    出力は次のようになります。

    JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
    ------------ ---------- ---------- ---------- ---------- ---------- --------
    1            build-ncc+    a3mega                   112  COMPLETED      0:0
    

    ビルドが完了すると、nccl-tests directory が作成されます。このディレクトリには nvidia+pytorch+24.09-py3.sqsh ファイルが含まれています。.sqsh ファイルは、AI ワークロードの標準コンテナ形式として機能する、圧縮された読み取り専用のファイル システム イメージです。

  4. nccl-tests/build フォルダに、all_gather_perfall_reduce_perfreduce_scatter_perfalltoall_perf などの複数のバイナリが含まれていることを確認します。

  5. NCCL テスト スクリプトをダウンロードします。

    wget -np -nd https://raw.githubusercontent.com/GoogleCloudPlatform/cluster-toolkit/refs/heads/main/examples/machine-learning/a3-megagpu-8g/nccl-tests/run-nccl-tests.sh

    A3 Mega クラスタでジョブ実行を実行するには、いくつかの環境変数を設定する必要があります。この設定により、GPUDirect-TCPXO プロトコルを使用した高性能ネットワーキングが有効になります。この手順では、enroot コンテナを使用してワークロードを起動するため、これらの変数はホスト環境ではなくコンテナ環境で設定する必要があります。これらの変数は、前のステップでダウンロードした run-nccl-tests.sh スクリプトで確認できます。

  6. NCCL テスト スクリプトを実行します。テストには 15 分以上かかることがあります。

    sbatch run-nccl-tests.sh
  7. 結果を確認します。このスクリプトは、nccl all_gather_perf ベンチマークの結果を含む slurm-XX.out ファイルを出力します。

    出力は次のようになります。

    #
    #                                                              out-of-place                       in-place
    #        size         count     type     redop   root     time   algbw   busbw #wrong     time   algbw   busbw #wrong
    #         (B)    (elements)                               (us)  (GB/s)  (GB/s)            (us)  (GB/s)  (GB/s)
        268435456       4194304     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
        536870912       8388608     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
       1073741824      16777216     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
       2147483648      33554432     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
       4294967296      67108864     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
       8589934592     134217728     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
    # Out of bounds values : 0 OK
    # Avg bus bandwidth    : ###.##
    #
    

A3 High

  1. ログインノードの共有ディレクトリ(通常、このノードは ${HOME} にあります)から、次のコマンドを実行して NCCL テストのビルドに必要なスクリプトをダウンロードします。

    wget -np -nd https://raw.githubusercontent.com/GoogleCloudPlatform/cluster-toolkit/refs/heads/main/examples/machine-learning/a3-highgpu-8g/nccl-tests/build-nccl-tests.sh
  2. スクリプトがダウンロードされたら、NVIDIA コンテナ レジストリから Pytorch イメージをインポートし、NCCL テストをビルドします。これを行うには、次のコマンドを実行します。

    sbatch build-nccl-tests.sh

    上記のスクリプトは、ノードのいずれかで実行されます。--container-mounts スイッチを使用して、現在のディレクトリ $PWD をコンテナ内の /nccl ディレクトリにマウントします。

  3. NCCL テストがビルドされていることを確認します。

    sacct -a

    出力は次のようになります。

    JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
    ------------ ---------- ---------- ---------- ---------- ---------- --------
    1            build-ncc+    a3high                   112  COMPLETED      0:0
    

    ビルドが成功すると、nccl-tests directory が作成されます。このディレクトリには nvidia+pytorch+24.09-py3.sqsh ファイルが含まれています。.sqsh ファイルは、AI ワークロードの標準コンテナ形式として機能する、圧縮された読み取り専用のファイル システム イメージです。

  4. nccl-tests/build フォルダに、all_gather_perfall_reduce_perfreduce_scatter_perfalltoall_perf などの複数のバイナリが含まれていることを確認します。

  5. NCCL テスト スクリプトをダウンロードします。

    wget -np -nd https://raw.githubusercontent.com/GoogleCloudPlatform/cluster-toolkit/refs/heads/main/examples/machine-learning/a3-highgpu-8g/nccl-tests/run-nccl-tests.sh

    A3 High クラスタでジョブを実行するには、GPUDirect-TCPX で高性能ネットワーキングを有効にするために、いくつかの環境変数を設定する必要があります。この手順では enroot コンテナを使用してワークロードを起動するため、これらの変数はホスト環境ではなくコンテナ環境で設定する必要があります。これらの変数は、ダウンロードした run-nccl-tests.sh スクリプトで確認できます。

  6. NCCL テスト スクリプトを実行します。テストには 15 分以上かかることがあります。

    sbatch run-nccl-tests.sh
  7. 結果を確認します。このスクリプトは、nccl all_gather_perf ベンチマークの結果を含む slurm-XX.out ファイルを出力します。

    出力は次のようになります。

    #
    #                                                              out-of-place                       in-place
    #        size         count     type     redop   root     time   algbw   busbw #wrong     time   algbw   busbw #wrong
    #         (B)    (elements)                               (us)  (GB/s)  (GB/s)            (us)  (GB/s)  (GB/s)
        268435456       4194304     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
        536870912       8388608     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
       1073741824      16777216     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
       2147483648      33554432     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
       4294967296      67108864     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
       8589934592     134217728     float    none      -1    #####  ###.##  ###.##    N/A   ######  ###.##  ###.##      0
    # Out of bounds values : 0 OK
    # Avg bus bandwidth    : ###.##
    #
    

次のステップ