Auf dieser Seite wird beschrieben, wie Sie NCCL-Tests in einem Slurm-Cluster ausführen. Wenn Sie eine verwaltete Slurm-Umgebung verwenden möchten, die integrierte NCCL-Tests zur Überprüfung des Clusterstatus enthält, lesen Sie stattdessen Cluster Director.
Wählen Sie die Schritte für Ihren Maschinentyp aus:
A4X und A4
Im folgenden Test wird Ramble verwendet. Das ist ein Open-Source-Framework für plattformübergreifende Tests, das in Python geschrieben wurde und zum Koordinieren der Ausführung von NCCL-Tests verwendet wird. Ramble und seine Abhängigkeiten sind mit der ARM64-Architektur kompatibel, die von A4X-Maschinen verwendet wird.
Die für diesen Test verwendeten Ausführungsskripts werden auf dem Slurm-Controllerknoten in /opt/apps/system_benchmarks bereitgestellt und sind für alle Knoten im Cluster verfügbar. Bei diesem Test wird Ramble im Verzeichnis /opt/apps/ramble installiert.
Führen Sie auf dem Anmeldeknoten im Verzeichnis ${HOME} den folgenden Befehl aus. Da der Test etwa 10 Minuten dauern kann (oder länger, wenn andere Jobs in der Warteschlange sind), wird im folgenden Befehl
nohupverwendet undstdout/errin eine Logdatei umgeleitet .nohup bash /opt/apps/system_benchmarks/run-nccl-tests-via-ramble.sh >& nccl.log &
Mit diesem Befehl wird ein Ordner namens
nccl-tests_$(date +%s)erstellt, in dem alle Testergebnisse gespeichert werden. Das Datums-Tag sorgt dafür, dass für jeden aktuellen Zeitstempel ein eindeutiger Ordner erstellt wird.Wenn Ihr Cluster beispielsweise 16 Knoten hat, werden NCCL-Tests für
all-gather,all-reduceundreduce-scatterauf 2, 4, 8 und 16 Knoten ausgeführt.Überprüfen Sie die Ergebnisse. Die
nccl.logenthält die Protokolle für das Einrichten und Ausführen des Tests. Führen Sie den folgenden Befehl aus, um diese Logs aufzurufen:tail -f nccl.log
Sie können auch
Ctrl+Cverwenden, um die Ausgabe jederzeit zu beenden. Am Ende desnccl.logsollte Ihre Ausgabe in etwa so aussehen:... ---- 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 -------
Alle Slurm-Jobskripts und Ausgabelogs der NCCL-Tests werden im Verzeichnis
nccl-tests_$(date +%s)/experimentsgespeichert. Eine Zusammenfassung der NCCL-Testleistung wird auch in der Dateinccl-tests_${date +%s)/summary.tsvgespeichert.Wenn Sie das Verzeichnis
nccl-tests_$(date +%s)/entfernen, werden alle Dateien gelöscht, die während dieser Tests generiert wurden.
A3 Ultra
Laden Sie aus dem freigegebenen Verzeichnis des Anmeldeknotens (dieser Knoten befindet sich normalerweise unter
${HOME}) das Skript herunter, das zum Erstellen des NCCL-Tests erforderlich ist, indem Sie den folgenden Befehl ausführen: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
Nachdem das Script heruntergeladen wurde, importieren Sie ein PyTorch-Image aus der NVIDIA-Container Registry und erstellen Sie die NCCL-Tests. Führen Sie hierzu den folgenden Befehl aus:
sbatch build-nccl-tests.sh
Das oben genannte Skript wird auf einem Ihrer Knoten ausgeführt. Dabei wird der Schalter
--container-mountsverwendet, um das aktuelle Verzeichnis$PWDim Verzeichnis/ncclinnerhalb des Containers bereitzustellen.Prüfen Sie, ob der NCCL-Test erstellt wurde. Um dies zu überprüfen, führen Sie den folgenden Befehl aus:
sacct -a
Wenn der Vorgang erfolgreich abgeschlossen wurde, sieht die Ausgabe in etwa so aus:
JobID JobName Partition Account AllocCPUS State ExitCode ------------ ---------- ---------- ---------- ---------- ---------- -------- 1 build-ncc+ a3ultra 112 COMPLETED 0:0
Wenn der Build erfolgreich ist, sollte sich im Verzeichnis, in dem Sie den Befehl ausgeführt haben, auch eine Datei mit dem Namen
nvidia+pytorch+24.09-py3.sqshund ein Verzeichnis mit dem Namennccl-testsbefinden.Prüfen Sie, ob der Ordner
nccl-tests/buildmehrere Binärdateien enthält, darunterall_gather_perf,all_reduce_perf,reduce_scatter_perfundalltoall_perf.Laden Sie das NCCL-Testskript herunter.
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
Damit ein Joblauf in einem A3 Ultra-Cluster ausgeführt werden kann, müssen mehrere Umgebungsvariablen festgelegt werden, um eine leistungsstarke Netzwerkverbindung mit RDMA zu ermöglichen. Da Sie in diesem Verfahren Enroot-Container zum Starten von Arbeitslasten verwenden, müssen diese Variablen in der Containerumgebung und nicht in der Hostumgebung festgelegt werden. Diese Variablen können im
run-nccl-tests.sh-Script, das Sie gerade heruntergeladen haben, geprüft werden.Führen Sie das NCCL-Testskript aus. Der Test kann etwa 15 Minuten oder länger dauern.
sbatch run-nccl-tests.sh
Überprüfen Sie die Ergebnisse. Das Skript gibt eine Datei
slurm-XX.outaus, die das Ergebnis des NCCL-Benchmarksall_gather_perfenthält.Die Ausgabe sieht etwa so aus:
# # 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
Laden Sie aus dem freigegebenen Verzeichnis des Anmeldeknotens (dieser Knoten befindet sich normalerweise unter
${HOME}) das Skript herunter, das zum Erstellen des NCCL-Tests erforderlich ist, indem Sie den folgenden Befehl ausführen: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
Nachdem das Script heruntergeladen wurde, importieren Sie ein PyTorch-Image aus der NVIDIA-Container Registry und erstellen Sie die NCCL-Tests.
sbatch build-nccl-tests.sh
Das oben genannte Skript wird auf einem Ihrer Knoten ausgeführt. Dabei wird der Schalter
--container-mountsverwendet, um das aktuelle Verzeichnis$PWDim Verzeichnis/ncclinnerhalb des Containers bereitzustellen.Prüfen Sie, ob der NCCL-Test erstellt wurde:
sacct -a
Die Ausgabe sieht etwa so aus:
JobID JobName Partition Account AllocCPUS State ExitCode ------------ ---------- ---------- ---------- ---------- ---------- -------- 1 build-ncc+ a3mega 112 COMPLETED 0:0
Nachdem der Build abgeschlossen ist, wird
nccl-tests directoryerstellt. Dieses Verzeichnis enthält die Dateinvidia+pytorch+24.09-py3.sqsh. Eine.sqsh-Datei ist ein komprimiertes, schreibgeschütztes Dateisystem-Image, das als Standardcontainerformat für KI-Arbeitslasten dient.Prüfen Sie, ob der Ordner
nccl-tests/buildmehrere Binärdateien enthält, darunterall_gather_perf,all_reduce_perf,reduce_scatter_perfundalltoall_perf.Laden Sie das NCCL-Testskript herunter:
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
Damit Sie einen Joblauf in einem A3 Mega-Cluster ausführen können, müssen Sie eine Reihe von Umgebungsvariablen festlegen. Diese Einstellung ermöglicht Hochleistungsnetzwerke mit dem GPUDirect-TCPXO-Protokoll. Da Sie in diesem Verfahren Enroot-Container zum Starten von Arbeitslasten verwenden, müssen diese Variablen in der Containerumgebung und nicht in der Hostumgebung festgelegt werden. Sie können diese Variablen im
run-nccl-tests.sh-Script prüfen, das Sie im vorherigen Schritt heruntergeladen haben.Führen Sie das NCCL-Testskript aus. Der Test kann etwa 15 Minuten oder länger dauern.
sbatch run-nccl-tests.sh
Überprüfen Sie die Ergebnisse. Das Skript gibt eine Datei
slurm-XX.outaus, die das Ergebnis des NCCL-Benchmarksall_gather_perfenthält.Die Ausgabe sieht etwa so aus:
# # 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
Laden Sie aus dem freigegebenen Verzeichnis des Anmeldeknotens (dieser Knoten befindet sich normalerweise unter
${HOME}) das Skript herunter, das zum Erstellen des NCCL-Tests erforderlich ist, indem Sie den folgenden Befehl ausführen: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
Nachdem das Script heruntergeladen wurde, importieren Sie ein PyTorch-Image aus der NVIDIA-Container Registry und erstellen Sie die NCCL-Tests. Dazu führen Sie den folgenden Befehl aus:
sbatch build-nccl-tests.sh
Das oben genannte Skript wird auf einem Ihrer Knoten ausgeführt. Dabei wird der Schalter
--container-mountsverwendet, um das aktuelle Verzeichnis$PWDim Verzeichnis/ncclinnerhalb des Containers bereitzustellen.Prüfen Sie, ob der NCCL-Test erstellt wurde:
sacct -a
Die Ausgabe sieht etwa so aus:
JobID JobName Partition Account AllocCPUS State ExitCode ------------ ---------- ---------- ---------- ---------- ---------- -------- 1 build-ncc+ a3high 112 COMPLETED 0:0
Wenn der Build erfolgreich ist, wird die
nccl-tests directoryerstellt. Dieses Verzeichnis enthält die Dateinvidia+pytorch+24.09-py3.sqsh. Eine.sqsh-Datei ist ein komprimiertes, schreibgeschütztes Dateisystem-Image, das als Standardcontainerformat für KI-Arbeitslasten dient.Prüfen Sie, ob der Ordner
nccl-tests/buildmehrere Binärdateien enthält, darunterall_gather_perf,all_reduce_perf,reduce_scatter_perfundalltoall_perf.Laden Sie das NCCL-Testskript herunter:
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
Damit ein Joblauf in einem A3 High-Cluster ausgeführt werden kann, müssen mehrere Umgebungsvariablen festgelegt werden, um Hochleistungsnetzwerke mit GPUDirect-TCPX zu ermöglichen. Da Sie in diesem Verfahren Enroot-Container zum Starten von Arbeitslasten verwenden, müssen diese Variablen in der Containerumgebung und nicht in der Hostumgebung festgelegt werden. Sie können diese Variablen im
run-nccl-tests.sh-Skript prüfen, das Sie gerade heruntergeladen haben.Führen Sie das NCCL-Testskript aus. Der Test kann etwa 15 Minuten oder länger dauern.
sbatch run-nccl-tests.sh
Überprüfen Sie die Ergebnisse. Das Skript gibt eine Datei
slurm-XX.outaus, die das Ergebnis des NCCL-Benchmarksall_gather_perfenthält.Die Ausgabe sieht etwa so aus:
# # 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 : ###.## #
Nächste Schritte
- NCCL-Logs zur Fehlerbehebung erfassen und verstehen, um die Testergebnisse zu verstehen und Probleme zu beheben.
- Compute Engine-Instanzen und Slurm-Cluster überwachen
- Informationen zur Fehlerbehebung bei langsamer Leistung