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 mit integrierten NCCL-Tests zur Überprüfung des Clusterstatus verwenden möchten, lesen Sie stattdessen Cluster Director.

Wählen Sie die Schritte für Ihren Maschinentyp aus:

A4X Max, A4X und A4

Für den folgenden Test wird Rambleverwendet. Ramble 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 Max- und 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. Wenn Sie diesen Test ausführen, 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 sich andere Jobs in der Warteschlange befinden, wird mit dem folgenden Befehl nohup verwendet und stdout/err 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 basierend auf jedem 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. Die Datei nccl.log enthält die Logs vom Einrichten und Ausführen des Tests. Führen Sie Folgendes aus, um diese Logs anzusehen:

    tail -f nccl.log

    Sie können die Ausgabe auch jederzeit mit Ctrl+C beenden. Am Ende von nccl.log sollte die Ausgabe 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 Ausgabeprotokolle der 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 entfernt, die während dieser Tests generiert wurden.

A3 Ultra

  1. Laden Sie im freigegebenen Verzeichnis des Anmeldeknotens (dieser Knoten befindet sich normalerweise unter ${HOME}) das Skript herunter, das zum Erstellen des NCCL-Tests erforderlich ist. Führen Sie dazu den folgenden Befehl aus:

    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 Skript 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. Mit dem Schalter --container-mounts wird Ihr aktuelles Verzeichnis $PWD in das Verzeichnis /nccl im Container eingebunden.

  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 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 namens nvidia+pytorch+24.09-py3.sqsh befinden, zusammen mit einem Verzeichnis namens nccl-tests.

  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

    Wenn Sie einen Job in einem A3 Ultra-Cluster ausführen möchten, müssen mehrere Umgebungsvariablen festgelegt werden, um eine leistungsstarke Netzwerkanbindung mit RDMA zu ermöglichen. Da Sie in diesem Verfahren enroot-Container verwenden, um Arbeitslasten zu starten, müssen diese Variablen in der Containerumgebung und nicht in der Hostumgebung festgelegt werden. Sie können diese Variablen im Skript run-nccl-tests.sh 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    : ###.##
    #
    

A3 Mega

  1. Laden Sie im freigegebenen Verzeichnis des Anmeldeknotens (dieser Knoten befindet sich normalerweise unter ${HOME}) das Skript herunter, das zum Erstellen des NCCL-Tests erforderlich ist. Führen Sie dazu den folgenden Befehl aus:

    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 Skript 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. Mit dem Schalter --container-mounts wird Ihr aktuelles Verzeichnis $PWD in das Verzeichnis /nccl im Container eingebunden.

  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 das Verzeichnis nccl-tests 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

    Wenn Sie einen Job in einem A3 Mega-Cluster ausführen möchten, müssen mehrere Umgebungsvariablen festgelegt werden, um eine leistungsstarke Netzwerkanbindung mit dem GPUDirect-TCPXO-Protokoll zu ermöglichen. Da Sie in diesem Verfahren enroot-Container verwenden, um Arbeitslasten zu starten, müssen diese Variablen in der Containerumgebung und nicht in der Hostumgebung festgelegt werden. Sie können diese Variablen im Skript run-nccl-tests.sh prüfen, 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 im freigegebenen Verzeichnis des Anmeldeknotens (dieser Knoten befindet sich normalerweise unter ${HOME}) das Skript herunter, das zum Erstellen des NCCL-Tests erforderlich ist. Führen Sie dazu den folgenden Befehl aus:

    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 Skript 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. Mit dem Schalter --container-mounts wird Ihr aktuelles Verzeichnis $PWD in das Verzeichnis /nccl im Container eingebunden.

  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 das Verzeichnis nccl-tests 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

    Wenn Sie einen Job in einem A3 High-Cluster ausführen möchten, müssen mehrere Umgebungsvariablen festgelegt werden, um eine leistungsstarke Netzwerkanbindung mit GPUDirect-TCPX zu ermöglichen. Da Sie in diesem Verfahren enroot-Container verwenden, um Arbeitslasten zu starten, müssen diese Variablen in der Containerumgebung und nicht in der Hostumgebung festgelegt werden. Sie können diese Variablen im Skript run-nccl-tests.sh 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