NCCL in Slurm-Clustern ausführen

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 Max, A4X und A4

Im folgenden Test wird Ramble verwendet. Das ist ein Open-Source-Framework für plattformübergreifende Experimente, 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 Max- und A4X-Maschinen verwendet wird.

Die für diesen Test verwendeten Ausführungsskripts werden im /opt/apps/system_benchmarks auf dem Slurm-Controllerknoten bereitgestellt und sind für alle Knoten im Cluster verfügbar. Bei diesem Test wird Ramble im Verzeichnis /opt/apps/ramble installiert.

  1. 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 nohup verwendet und die stdout/err wird in 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-reduce und reduce-scatter auf 2, 4, 8 und 16 Knoten ausgeführt.

  2. Überprüfen Sie die Ergebnisse. nccl.log enthält die Logs vom 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+C verwenden, um die Ausgabe jederzeit zu beenden. Am Ende des nccl.log sollte 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 von nccl-tests werden im Verzeichnis nccl-tests_$(date +%s)/experiments gespeichert. Eine Zusammenfassung der NCCL-Testleistung wird auch in der Datei nccl-tests_${date +%s)/summary.tsv gespeichert.

    Wenn Sie das Verzeichnis nccl-tests_$(date +%s)/ entfernen, werden alle Dateien gelöscht, die während dieser Tests generiert wurden.

A3 Ultra

  1. 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
  2. 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 vorherige Skript wird auf einem Ihrer Knoten ausgeführt. Dabei wird der Schalter --container-mounts verwendet, um das aktuelle Verzeichnis $PWD im Verzeichnis /nccl innerhalb des Containers bereitzustellen.

  3. 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.sqsh und ein Verzeichnis mit dem Namen nccl-tests befinden.

  4. Prüfen Sie, ob der Ordner nccl-tests/build mehrere Binärdateien enthält, darunter all_gather_perf, all_reduce_perf, reduce_scatter_perf und alltoall_perf.

  5. 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 Hochleistungsnetzwerke 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.

  6. Führen Sie das NCCL-Testskript aus. Der Test kann etwa 15 Minuten oder länger dauern.

    sbatch run-nccl-tests.sh
  7. Überprüfen Sie die Ergebnisse. Das Skript gibt eine Datei slurm-XX.out aus, die das Ergebnis des NCCL-Benchmarks all_gather_perf enthä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

  1. 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
  2. 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 vorherige Skript wird auf einem Ihrer Knoten ausgeführt. Dabei wird der Schalter --container-mounts verwendet, um das aktuelle Verzeichnis $PWD im Verzeichnis /nccl innerhalb des Containers bereitzustellen.

  3. 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 directory erstellt. Dieses Verzeichnis enthält die Datei nvidia+pytorch+24.09-py3.sqsh. Eine .sqsh-Datei ist ein komprimiertes, schreibgeschütztes Dateisystem-Image, das als Standardcontainerformat für KI-Arbeitslasten dient.

  4. Prüfen Sie, ob der Ordner nccl-tests/build mehrere Binärdateien enthält, darunter all_gather_perf, all_reduce_perf, reduce_scatter_perf und alltoall_perf.

  5. 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 untersuchen, das Sie im vorherigen Schritt heruntergeladen haben.

  6. Führen Sie das NCCL-Testskript aus. Der Test kann etwa 15 Minuten oder länger dauern.

    sbatch run-nccl-tests.sh
  7. Überprüfen Sie die Ergebnisse. Das Skript gibt eine Datei slurm-XX.out aus, die das Ergebnis des NCCL-Benchmarks all_gather_perf enthä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

  1. 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
  2. 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 vorherige Skript wird auf einem Ihrer Knoten ausgeführt. Dabei wird der Schalter --container-mounts verwendet, um das aktuelle Verzeichnis $PWD im Verzeichnis /nccl innerhalb des Containers bereitzustellen.

  3. 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 directory erstellt. Dieses Verzeichnis enthält die Datei nvidia+pytorch+24.09-py3.sqsh. Eine .sqsh-Datei ist ein komprimiertes, schreibgeschütztes Dateisystem-Image, das als Standardcontainerformat für KI-Arbeitslasten dient.

  4. Prüfen Sie, ob der Ordner nccl-tests/build mehrere Binärdateien enthält, darunter all_gather_perf, all_reduce_perf, reduce_scatter_perf und alltoall_perf.

  5. 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.

  6. Führen Sie das NCCL-Testskript aus. Der Test kann etwa 15 Minuten oder länger dauern.

    sbatch run-nccl-tests.sh
  7. Überprüfen Sie die Ergebnisse. Das Skript gibt eine Datei slurm-XX.out aus, die das Ergebnis des NCCL-Benchmarks all_gather_perf enthä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