Exécuter NCCL sur des clusters Slurm

Cette page explique comment exécuter des tests NCCL sur un cluster Slurm. Pour utiliser un environnement Slurm géré qui inclut des tests NCCL intégrés permettant de vérifier l'état du cluster, consultez plutôt Cluster Director.

Choisissez les étapes correspondant à votre type de machine :

A4X et A4

Le test suivant utilise Ramble, un framework d'expérimentation multip plates-formes Open Source écrit en Python et utilisé pour coordonner l'exécution des tests NCCL. Ramble et ses dépendances sont compatibles avec l'architecture ARM64 utilisée par les machines A4X.

Les scripts d'exécution utilisés pour ce test sont mis en scène dans /opt/apps/system_benchmarks sur le nœud de contrôleur Slurm et sont disponibles pour tous les nœuds du cluster. L'exécution de ce test installe Ramble dans le répertoire /opt/apps/ramble.

  1. Depuis le nœud de connexion dans le répertoire ${HOME}, exécutez la commande suivante. Étant donné que le test peut prendre environ 10 minutes, voire plus si d'autres tâches sont en file d'attente, la commande suivante utilise nohup et redirige stdout/err vers un fichier journal .

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

    Cette commande crée un dossier appelé nccl-tests_$(date +%s) qui stocke tous les résultats des tests. La balise de date permet de créer un dossier unique en fonction de chaque code temporel actuel.

    Par exemple, si votre cluster comporte 16 nœuds, les tests NCCL sont exécutés pour all-gather, all-reduce et reduce-scatter sur 2, 4, 8 et 16 nœuds.

  2. Examinez les résultats. nccl.log contient les journaux de configuration et d'exécution du test. Pour afficher ces journaux, exécutez la commande suivante :

    tail -f nccl.log

    Vous pouvez également utiliser Ctrl+C pour arrêter de suivre la sortie à tout moment. À la fin de l'nccl.log, le résultat doit se présenter comme suit :

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

    Tous les scripts de tâches Slurm et les journaux de sortie nccl-tests sont stockés dans le répertoire nccl-tests_$(date +%s)/experiments. Un récapitulatif des performances des tests NCCL est également stocké dans le fichier nccl-tests_${date +%s)/summary.tsv.

    La suppression du répertoire nccl-tests_$(date +%s)/ supprime tous les fichiers générés lors de ces tests.

A3 Ultra

  1. À partir du répertoire partagé du nœud de connexion (ce nœud se trouve généralement à l'adresse ${HOME}), téléchargez le script nécessaire à la création du test NCCL en exécutant la commande suivante :

    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. Une fois le script téléchargé, importez une image PyTorch depuis le registre de conteneurs NVIDIA et créez les tests NCCL. Pour ce faire, exécutez la commande suivante :

    sbatch build-nccl-tests.sh

    Le script précédent s'exécute sur l'un de vos nœuds. Il utilise le commutateur --container-mounts pour monter votre répertoire actuel, $PWD, dans le répertoire /nccl du conteneur.

  3. Vérifiez que le test NCCL est créé. Pour le vérifier, exécutez la commande suivante :

    sacct -a

    Si l'opération réussit, le résultat est semblable à ce qui suit :

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

    Si la compilation réussit, vous devriez également trouver un fichier nommé nvidia+pytorch+24.09-py3.sqsh dans le répertoire où vous avez exécuté la commande, ainsi qu'un répertoire nommé nccl-tests.

  4. Vérifiez que le dossier nccl-tests/build contient plusieurs binaires, y compris all_gather_perf, all_reduce_perf, reduce_scatter_perf et alltoall_perf.

  5. Téléchargez le script de 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

    Pour exécuter une exécution de job sur un cluster A3 Ultra, plusieurs variables d'environnement doivent être définies afin d'activer la mise en réseau à hautes performances avec RDMA. Étant donné que vous utilisez des conteneurs enroot dans cette procédure pour lancer des charges de travail, ces variables doivent être définies dans l'environnement de conteneur et non dans l'environnement hôte. Vous pouvez inspecter ces variables dans le script run-nccl-tests.sh que vous venez de télécharger.

  6. Exécutez le script de test NCCL. Le test peut prendre environ 15 minutes, voire plus.

    sbatch run-nccl-tests.sh
  7. Examinez les résultats. Le script génère un fichier slurm-XX.out contenant le résultat du benchmark nccl all_gather_perf.

    Le résultat ressemble à ce qui suit :

    #
    #                                                              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. À partir du répertoire partagé du nœud de connexion (ce nœud se trouve généralement à l'adresse ${HOME}), téléchargez le script nécessaire pour créer le test NCCL en exécutant la commande suivante :

    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. Une fois le script téléchargé, importez une image PyTorch depuis le registre de conteneurs NVIDIA et créez les tests NCCL.

    sbatch build-nccl-tests.sh

    Le script précédent s'exécute sur l'un de vos nœuds. Il utilise le commutateur --container-mounts pour monter votre répertoire actuel, $PWD, dans le répertoire /nccl du conteneur.

  3. Vérifiez que le test NCCL est créé :

    sacct -a

    Le résultat ressemble à ce qui suit :

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

    Une fois la compilation terminée, le nccl-tests directory est créé. Ce répertoire contient le fichier nvidia+pytorch+24.09-py3.sqsh. Un fichier .sqsh est une image de système de fichiers compressée et en lecture seule qui sert de format de conteneur standard pour les charges de travail d'IA.

  4. Vérifiez que le dossier nccl-tests/build contient plusieurs binaires, y compris all_gather_perf, all_reduce_perf, reduce_scatter_perf et alltoall_perf.

  5. Téléchargez le script de 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

    Pour exécuter une exécution de job sur un cluster A3 Mega, vous devez définir un certain nombre de variables d'environnement. Ce paramètre active la mise en réseau hautes performances avec le protocole GPUDirect-TCPXO. Étant donné que vous utilisez des conteneurs enroot dans cette procédure pour lancer des charges de travail, ces variables doivent être définies dans l'environnement de conteneur et non dans l'environnement hôte. Vous pouvez inspecter ces variables dans le script run-nccl-tests.sh que vous avez téléchargé à l'étape précédente.

  6. Exécutez le script de test NCCL. Le test peut prendre environ 15 minutes, voire plus.

    sbatch run-nccl-tests.sh
  7. Examinez les résultats. Le script génère un fichier slurm-XX.out contenant le résultat du benchmark nccl all_gather_perf.

    Le résultat ressemble à ce qui suit :

    #
    #                                                              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. À partir du répertoire partagé du nœud de connexion (ce nœud se trouve généralement à l'adresse ${HOME}), téléchargez le script nécessaire pour créer le test NCCL en exécutant la commande suivante :

    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. Une fois le script téléchargé, importez une image PyTorch depuis le registre de conteneurs NVIDIA et créez les tests NCCL. Pour ce faire, exécutez la commande suivante :

    sbatch build-nccl-tests.sh

    Le script précédent s'exécute sur l'un de vos nœuds. Il utilise le commutateur --container-mounts pour monter votre répertoire actuel, $PWD, dans le répertoire /nccl du conteneur.

  3. Vérifiez que le test NCCL est créé :

    sacct -a

    Le résultat ressemble à ce qui suit :

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

    Si la compilation réussit, le fichier nccl-tests directory est créé. Ce répertoire contient le fichier nvidia+pytorch+24.09-py3.sqsh. Un fichier .sqsh est une image de système de fichiers compressée et en lecture seule qui sert de format de conteneur standard pour les charges de travail d'IA.

  4. Vérifiez que le dossier nccl-tests/build contient plusieurs binaires, y compris all_gather_perf, all_reduce_perf, reduce_scatter_perf et alltoall_perf.

  5. Téléchargez le script de 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

    Pour exécuter un job sur un cluster A3 High, plusieurs variables d'environnement doivent être définies pour activer la mise en réseau à hautes performances avec GPUDirect-TCPX. Étant donné que vous utilisez des conteneurs enroot dans cette procédure pour lancer des charges de travail, ces variables doivent être définies dans l'environnement de conteneur et non dans l'environnement hôte. Vous pouvez inspecter ces variables dans le script run-nccl-tests.sh que vous venez de télécharger.

  6. Exécutez le script de test NCCL. Le test peut prendre environ 15 minutes, voire plus.

    sbatch run-nccl-tests.sh
  7. Examinez les résultats. Le script génère un fichier slurm-XX.out contenant le résultat du benchmark nccl all_gather_perf.

    Le résultat ressemble à ce qui suit :

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

Étapes suivantes