このページでは、Slurm クラスタで NCCL テストを実行する方法について説明します。クラスタの健全性を検証するための組み込み NCCL テストを含むマネージド Slurm 環境を使用するには、Cluster Director をご覧ください。
マシンタイプの手順を選択します。
A4X と A4
次のテストでは、NCCL テストの実行を調整するために使用される、Python で記述されたオープンソースのマルチプラットフォーム実験フレームワークである Ramble を使用します。Ramble とその依存関係は、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
ビルドが成功すると、コマンドを実行したディレクトリに
nvidia+pytorch+24.09-py3.sqshという名前のファイルとnccl-testsという名前のディレクトリが作成されます。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 directoryが作成されます。このディレクトリには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 directoryが作成されます。このディレクトリには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 クラスタをモニタリングする。
- パフォーマンスの低下のトラブルシューティングについて学習する。