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.
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
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 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-reduceetreduce-scattersur 2, 4, 8 et 16 nœuds.Examinez les résultats.
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 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 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 à 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
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-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 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.sqshdans le répertoire où vous avez exécuté la commande, ainsi qu'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 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.shque vous venez de télécharger.Exécutez le script de 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.outcontenant le résultat du benchmark ncclall_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
À 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
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-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
nccl-tests directoryest créé. Ce répertoire contient le fichiernvidia+pytorch+24.09-py3.sqsh. Un fichier.sqshest 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.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 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.shque vous avez téléchargé à l'étape précédente.Exécutez le script de 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.outcontenant le résultat du benchmark ncclall_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
À 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
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-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 fichier
nccl-tests directoryest créé. Ce répertoire contient le fichiernvidia+pytorch+24.09-py3.sqsh. Un fichier.sqshest 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.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 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.shque vous venez de télécharger.Exécutez le script de 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.outcontenant le résultat du benchmark ncclall_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
- Collecter et comprendre les journaux NCCL pour le dépannage pour comprendre les résultats des tests et résoudre les problèmes.
- Surveiller les instances Compute Engine et les clusters Slurm
- Découvrez comment résoudre les problèmes de lenteur des performances.