Esegui NCCL sui cluster Slurm

Questa pagina descrive come eseguire i test NCCL su un cluster Slurm. Per utilizzare un ambiente Slurm gestito che include test NCCL integrati per verificare l'integrità del cluster, consulta invece Cluster Director.

Scegli i passaggi per il tuo tipo di macchina:

A4X Max, A4X e A4

Il seguente test utilizza Ramble, un framework di sperimentazione multipiattaforma open source scritto in Python che viene utilizzato per coordinare l'esecuzione dei test NCCL. Ramble e le relative dipendenze sono compatibili con l'architettura ARM64 utilizzata dalle macchine A4X Max e A4X.

Gli script di esecuzione utilizzati per questo test vengono preparati in /opt/apps/system_benchmarks sul nodo controller Slurm e sono disponibili per tutti i nodi del cluster. L'esecuzione di questo test installa Ramble nella directory /opt/apps/ramble.

  1. Dal nodo di accesso nella directory ${HOME}, esegui questo comando. Poiché il test può richiedere circa 10 minuti o più se altri job sono in coda, il seguente comando utilizza nohup e reindirizza stdout/err a un file di log.

    nohup bash /opt/apps/system_benchmarks/run-nccl-tests-via-ramble.sh >& nccl.log &

    Questo comando crea una cartella denominata nccl-tests_$(date +%s) che archivia tutti i risultati dei test. Il tag data assicura che venga creata una cartella univoca in base a ogni timestamp corrente.

    Ad esempio, se il cluster ha 16 nodi, i test NCCL vengono eseguiti per all-gather, all-reduce e reduce-scatter su 2, 4, 8 e 16 nodi.

  2. Esamina i risultati. Il file nccl.log contiene i log relativi alla configurazione e all'esecuzione del test. Per visualizzare questi log, esegui il comando seguente:

    tail -f nccl.log

    Puoi anche utilizzare Ctrl+C per interrompere il monitoraggio dell'output in qualsiasi momento. Al termine di nccl.log, l'output dovrebbe essere simile al seguente:

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

    Tutti gli script dei job Slurm e i log di output di nccl-tests sono memorizzati nella directory nccl-tests_$(date +%s)/experiments. Un riepilogo delle prestazioni del test NCCL viene archiviato anche nel file nccl-tests_${date +%s)/summary.tsv.

    La rimozione della directory nccl-tests_$(date +%s)/ rimuove tutti i file generati durante questi test.

A3 Ultra

  1. Dalla directory condivisa del nodo di accesso (in genere si trova in ${HOME}), scarica lo script necessario per creare il test NCCL eseguendo il seguente comando:

    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. Dopo il download dello script, importa un'immagine Pytorch da NVIDIA Container Registry e crea i test NCCL. Per farlo, esegui questo comando:

    sbatch build-nccl-tests.sh

    Lo script precedente viene eseguito su uno dei tuoi nodi. Utilizza l'opzione --container-mounts per montare la directory corrente, $PWD, nella directory /nccl all'interno del container.

  3. Verifica che il test NCCL sia stato creato. Per verificarlo, esegui questo comando:

    sacct -a

    Se l'operazione viene completata correttamente, l'output è simile al seguente:

    JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
    ------------ ---------- ---------- ---------- ---------- ---------- --------
    1            build-ncc+    a3ultra                   112  COMPLETED      0:0
    

    Se la build ha esito positivo, nella directory in cui hai eseguito il comando dovresti trovare anche un file denominato nvidia+pytorch+24.09-py3.sqsh e una directory denominata nccl-tests.

  4. Verifica che la cartella nccl-tests/build contenga diversi file binari, tra cui all_gather_perf, all_reduce_perf, reduce_scatter_perf e alltoall_perf.

  5. Scarica lo script per il test 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

    Per eseguire qualsiasi job su un cluster A3 Ultra, è necessario impostare diverse variabili di ambiente per abilitare la rete ad alte prestazioni con RDMA. Poiché in questa procedura utilizzi i container enroot per avviare i carichi di lavoro, queste variabili devono essere impostate nell'ambiente del container anziché nell'ambiente host. Queste variabili possono essere esaminate nello script run-nccl-tests.sh che hai appena scaricato.

  6. Esegui lo script per il test NCCL. Il test può richiedere circa 15 minuti o più.

    sbatch run-nccl-tests.sh
  7. Esamina i risultati. Lo script restituisce un file slurm-XX.out che contiene il risultato del benchmark nccl all_gather_perf.

    L'output è simile al seguente:

    #
    #                                                              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. Dalla directory condivisa del nodo di accesso (in genere si trova in ${HOME}), scarica lo script necessario per creare il test NCCL eseguendo il seguente comando:

    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. Dopo il download dello script, importa un'immagine Pytorch da NVIDIA Container Registry e crea i test NCCL.

    sbatch build-nccl-tests.sh

    Lo script precedente viene eseguito su uno dei tuoi nodi. Utilizza l'opzione --container-mounts per montare la directory corrente, $PWD, nella directory /nccl all'interno del container.

  3. Verifica che il test NCCL sia stato creato:

    sacct -a

    L'output è simile al seguente:

    JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
    ------------ ---------- ---------- ---------- ---------- ---------- --------
    1            build-ncc+    a3mega                   112  COMPLETED      0:0
    

    Al termine della build, viene creata la directory nccl-tests. Questa directory contiene il file nvidia+pytorch+24.09-py3.sqsh. Un file .sqsh è un'immagine di sistema del file system compressa e di sola lettura che funge da formato standard del container per i carichi di lavoro AI.

  4. Verifica che la cartella nccl-tests/build contenga diversi file binari, tra cui all_gather_perf, all_reduce_perf, reduce_scatter_perf e alltoall_perf.

  5. Scarica lo script per il test 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

    Per eseguire qualsiasi job su un cluster A3 Mega, è necessario impostare diverse variabili di ambiente per abilitare la rete ad alte prestazioni con il protocollo GPUDirect-TCPXO. Poiché in questa procedura utilizzi i container enroot per avviare i carichi di lavoro, queste variabili devono essere impostate nell'ambiente container anziché nell'ambiente host. Puoi esaminare queste variabili nello script run-nccl-tests.sh che hai scaricato nel passaggio precedente.

  6. Esegui lo script per il test NCCL. Il test può richiedere circa 15 minuti o più.

    sbatch run-nccl-tests.sh
  7. Esamina i risultati. Lo script restituisce un file slurm-XX.out che contiene il risultato del benchmark nccl all_gather_perf.

    L'output è simile al seguente:

    #
    #                                                              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. Dalla directory condivisa del nodo di accesso (in genere si trova in ${HOME}), scarica lo script necessario per creare il test NCCL eseguendo il comando seguente:

    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. Dopo il download dello script, importa un'immagine Pytorch da NVIDIA Container Registry e crea i test NCCL. Per farlo, esegui questo comando:

    sbatch build-nccl-tests.sh

    Lo script precedente viene eseguito su uno dei tuoi nodi. Utilizza l'opzione --container-mounts per montare la directory corrente, $PWD, nella directory /nccl all'interno del container.

  3. Verifica che il test NCCL sia stato creato:

    sacct -a

    L'output è simile al seguente:

    JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
    ------------ ---------- ---------- ---------- ---------- ---------- --------
    1            build-ncc+    a3high                   112  COMPLETED      0:0
    

    Se la build ha esito positivo, viene creata la directory nccl-tests. Questa directory contiene il file nvidia+pytorch+24.09-py3.sqsh. Un file .sqsh è un'immagine di sistema del file system compressa e di sola lettura che funge da formato standard del container per i carichi di lavoro AI.

  4. Verifica che la cartella nccl-tests/build contenga diversi file binari, tra cui all_gather_perf, all_reduce_perf, reduce_scatter_perf e alltoall_perf.

  5. Scarica lo script per il test 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

    Per eseguire qualsiasi job su un cluster A3 High, è necessario impostare diverse variabili di ambiente per abilitare il networking ad alte prestazioni con GPUDirect-TCPX. Poiché in questa procedura utilizzi i container enroot per avviare i carichi di lavoro, queste variabili devono essere impostate nell'ambiente del container anziché nell'ambiente host. Puoi esaminare queste variabili nello script run-nccl-tests.sh che hai appena scaricato.

  6. Esegui lo script per il test NCCL. Il test può richiedere circa 15 minuti o più.

    sbatch run-nccl-tests.sh
  7. Esamina i risultati. Lo script restituisce un file slurm-XX.out che contiene il risultato del benchmark nccl all_gather_perf.

    L'output è simile al seguente:

    #
    #                                                              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    : ###.##
    #
    

Passaggi successivi