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

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 della configurazione e dell'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 archiviati nella directory nccl-tests_$(date +%s)/experiments. Un riepilogo del rendimento 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 dovrebbe essere presente 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 di 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 esecuzione di 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 di 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 creato nccl-tests directory. Questa directory contiene il file nvidia+pytorch+24.09-py3.sqsh. Un file .sqsh è un'immagine del file system compressa e di sola lettura che funge da formato standard del container per i carichi di lavoro di 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 di 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 esecuzione di job su un cluster A3 Mega, devi impostare un numero di variabili di ambiente. Questa impostazione attiva 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 di 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 creato nccl-tests directory. Questa directory contiene il file nvidia+pytorch+24.09-py3.sqsh. Un file .sqsh è un'immagine del file system compressa e di sola lettura che funge da formato standard del container per i carichi di lavoro di 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 di 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 esecuzione di 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 di 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