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

このページでは、Slurm クラスタで NCCL テストを実行する方法について説明します。クラスタのヘルスチェック用の組み込み NCCL テストを含むマネージド Slurm 環境を使用するには、代わりに Cluster Directorをご覧ください。

マシンタイプのステップを選択します。

A4X Max、A4X、A4

次のテストでは、 Ramble を使用します。Ramble は、NCCL テストの実行を調整するために使用される、Python で記述された オープンソースのマルチプラットフォーム実験フレームワークです。Ramble とその依存関係は、A4X Max マシンと 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
    

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

  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 ディレクトリが作成されます。 このディレクトリには 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 ディレクトリが作成されます。 このディレクトリには 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    : ###.##
    #
    

次のステップ