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 Max, A4X et A4
Le test suivant utilise Ramble, un framework d'expérimentation multiplate-forme Open Source écrit en Python qui permet de coordonner l'exécution des tests NCCL. Ramble et ses dépendances sont compatibles avec l'architecture ARM64 utilisée par les machines A4X Max et A4X.
Les scripts d'exécution utilisés pour ce test sont organisés dans le répertoire /opt/apps/system_benchmarks sur le nœud du 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.
À partir du 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
nohupet redirigestdout/errvers un fichier journal.nohup bash /opt/apps/system_benchmarks/run-nccl-tests-via-ramble.sh >& nccl.log &
Cette commande crée un dossier nommé
nccl-tests_$(date +%s)qui stocke tous les résultats des tests. La balise de date garantit la création d'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-reduceetreduce-scattersur 2, 4, 8 et 16 nœuds.Examinez les résultats. Le fichier
nccl.logcontient 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+Cpour arrêter de suivre la sortie à tout moment. À la fin du fichiernccl.log, votre sortie doit ressembler à ce qui 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 des tests NCCL sont stockés dans le répertoire
nccl-tests_$(date +%s)/experiments. Un résumé des performances des tests NCCL est également stocké dans le fichiernccl-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
À partir du répertoire partagé du nœud de connexion (ce nœud se trouve généralement dans
${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
Une fois le script téléchargé, importez une image Pytorch à partir du 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-mountspour monter votre répertoire actuel,$PWD, dans le répertoire/nccldu conteneur.Vérifiez que le test NCCL est créé. Pour le vérifier, exécutez la commande suivante :
sacct -a
Si l'opération a réussi, la sortie ressemble à 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 disposer d'un fichier nommé
nvidia+pytorch+24.09-py3.sqshdans le répertoire où vous avez exécuté la commande, ainsi que d'un répertoire nomménccl-tests.Vérifiez que le dossier
nccl-tests/buildcontient plusieurs binaires, y comprisall_gather_perf,all_reduce_perf,reduce_scatter_perfetalltoall_perf.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 tâche 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 plutôt que dans l'environnement hôte. Vous pouvez inspecter ces variables dans le script
run-nccl-tests.shque vous venez de télécharger.Exécutez le script du test NCCL. Le test peut prendre environ 15 minutes, voire plus.
sbatch run-nccl-tests.sh
Examinez les résultats. Le script génère un fichier
slurm-XX.outqui contient le résultat de l'analyse comparativeall_gather_perfde NCCL.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
À partir du répertoire partagé du nœud de connexion (ce nœud se trouve généralement dans
${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-megagpu-8g/nccl-tests/build-nccl-tests.sh
Une fois le script téléchargé, importez une image Pytorch à partir du 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-mountspour monter votre répertoire actuel,$PWD, dans le répertoire/nccldu conteneur.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 répertoire
nccl-testsest créé. Ce répertoire contient le fichiernvidia+pytorch+24.09-py3.sqsh. Un fichier.sqshest une image de système de fichiers compressée en lecture seule qui sert de format de conteneur standard pour les charges de travail d'IA.Vérifiez que le dossier
nccl-tests/buildcontient plusieurs binaires, y comprisall_gather_perf,all_reduce_perf,reduce_scatter_perfetalltoall_perf.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 tâche sur un cluster A3 Mega, plusieurs variables d'environnement doivent être définies afin d'activer 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 plutôt que dans l'environnement hôte. Vous pouvez inspecter ces variables dans le script
run-nccl-tests.shque vous avez téléchargé à l'étape précédente.Exécutez le script du test NCCL. Le test peut prendre environ 15 minutes, voire plus.
sbatch run-nccl-tests.sh
Examinez les résultats. Le script génère un fichier
slurm-XX.outqui contient le résultat de l'analyse comparativeall_gather_perfde NCCL.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
À partir du répertoire partagé du nœud de connexion (ce nœud se trouve généralement dans
${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-highgpu-8g/nccl-tests/build-nccl-tests.sh
Une fois le script téléchargé, importez une image Pytorch à partir du 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-mountspour monter votre répertoire actuel,$PWD, dans le répertoire/nccldu conteneur.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 répertoire
nccl-testsest créé. Ce répertoire contient le fichiernvidia+pytorch+24.09-py3.sqsh. Un fichier.sqshest une image de système de fichiers compressée en lecture seule qui sert de format de conteneur standard pour les charges de travail d'IA.Vérifiez que le dossier
nccl-tests/buildcontient plusieurs binaires, y comprisall_gather_perf,all_reduce_perf,reduce_scatter_perfetalltoall_perf.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 une tâche sur un cluster A3 High, plusieurs variables d'environnement doivent être définies afin d'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 plutôt que dans l'environnement hôte. Vous pouvez inspecter ces variables dans le script
run-nccl-tests.shque vous venez de télécharger.Exécutez le script du test NCCL. Le test peut prendre environ 15 minutes, voire plus.
sbatch run-nccl-tests.sh
Examinez les résultats. Le script génère un fichier
slurm-XX.outqui contient le résultat de l'analyse comparativeall_gather_perfde NCCL.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 : ###.## #
Étape suivante
- Collectez et comprenez les journaux NCCL pour le dépannage afin de comprendre les résultats des tests et résoudre les problèmes.
- Surveillez les instances Compute Engine et les clusters Slurm.
- Découvrez comment résoudre les problèmes de performances lentes.