このページでは、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 ディレクトリにインストールされます。
${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-gather、all-reduce、reduce-scatterに対して実行されます。検証結果を確認します。
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
ログインノードの共有ディレクトリ(通常、このノードは
${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
スクリプトがダウンロードされたら、 NVIDIA コンテナ レジストリ から Pytorch イメージをインポートし、NCCL テストをビルドします。これを行うには、次のコマンドを実行します。
sbatch build-nccl-tests.sh
上記のスクリプトは、いずれかのノードで実行されます。
--container-mountsスイッチを使用して、現在のディレクトリ$PWDをコンテナ内の/ncclディレクトリにマウントします。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という名前のファイルも作成されます。nccl-tests/buildフォルダに、all_gather_perf、all_reduce_perf、reduce_scatter_perf、alltoall_perfなど、複数のバイナリが含まれていることを確認します。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スクリプトで確認できます。NCCL テスト スクリプトを実行します。テストには約 15 分かかります。さらに時間がかかることもあります。
sbatch run-nccl-tests.sh
検証結果を確認します。スクリプトは、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
ログインノードの共有ディレクトリ(通常、このノードは
${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
スクリプトがダウンロードされたら、 NVIDIA コンテナ レジストリ から Pytorch イメージをインポートし、NCCL テストをビルドします。
sbatch build-nccl-tests.sh
上記のスクリプトは、いずれかのノードで実行されます。
--container-mountsスイッチを使用して、現在のディレクトリ$PWDをコンテナ内の/ncclディレクトリにマウントします。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 ワークロードの標準コンテナ形式として機能する、読み取り専用の圧縮ファイル システム イメージです。nccl-tests/buildフォルダに、all_gather_perf、all_reduce_perf、reduce_scatter_perf、alltoall_perfなど、複数のバイナリが含まれていることを確認します。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スクリプトで確認できます。NCCL テスト スクリプトを実行します。テストには約 15 分かかります。さらに時間がかかることもあります。
sbatch run-nccl-tests.sh
検証結果を確認します。スクリプトは、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
ログインノードの共有ディレクトリ(通常、このノードは
${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
スクリプトがダウンロードされたら、 NVIDIA コンテナ レジストリ から Pytorch イメージをインポートし、NCCL テストをビルドします。これを行うには、次のコマンドを実行します。
sbatch build-nccl-tests.sh
上記のスクリプトは、いずれかのノードで実行されます。
--container-mountsスイッチを使用して、現在のディレクトリ$PWDをコンテナ内の/ncclディレクトリにマウントします。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 ワークロードの標準コンテナ形式として機能する、読み取り専用の圧縮ファイル システム イメージです。nccl-tests/buildフォルダに、all_gather_perf、all_reduce_perf、reduce_scatter_perf、alltoall_perfなど、複数のバイナリが含まれていることを確認します。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スクリプトで確認できます。NCCL テスト スクリプトを実行します。テストには約 15 分かかります。さらに時間がかかることもあります。
sbatch run-nccl-tests.sh
検証結果を確認します。スクリプトは、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 : ###.## #
次のステップ
- トラブルシューティングのために NCCL ログを収集して理解し、テストの出力を理解して問題をトラブルシューティングする。
- Compute Engine インスタンスと Slurm クラスタをモニタリングする。
- パフォーマンス低下のトラブルシューティングについて学習する。