En esta página, se describe cómo ejecutar pruebas de NCCL en un clúster de Slurm. Para usar un entorno de Slurm administrado que incluya pruebas de NCCL integradas para verificar el estado del clúster, consulta Cluster Director.
Elige los pasos para tu tipo de máquina:
A4X y A4
La siguiente prueba usa Ramble, un framework de experimentación multiplataforma de código abierto escrito en Python que se usa para coordinar la ejecución de pruebas de NCCL. Ramble y sus dependencias son compatibles con la arquitectura ARM64 que usan las máquinas A4X.
Las secuencias de comandos de ejecución que se usan para esta prueba se almacenan en /opt/apps/system_benchmarks en el nodo del controlador de Slurm y están disponibles para todos los nodos del clúster. La ejecución de esta prueba instala Ramble en el directorio /opt/apps/ramble.
Desde el nodo de acceso en el directorio ${HOME}, ejecuta el siguiente comando. Dado que la prueba puede tardar aproximadamente 10 minutos, o más si hay otros trabajos en la cola, el siguiente comando usa
nohupy redireccionastdout/erra un archivo de registro .nohup bash /opt/apps/system_benchmarks/run-nccl-tests-via-ramble.sh >& nccl.log &
Este comando crea una carpeta llamada
nccl-tests_$(date +%s)que almacena todos los resultados de las pruebas. La etiqueta de fecha garantiza que se cree una carpeta única según cada marca de tiempo actual.Por ejemplo, si tu clúster tiene 16 nodos, las pruebas de NCCL se ejecutan para
all-gather,all-reduceyreduce-scatteren 2, 4, 8 y 16 nodos.Revisa los resultados. El archivo
nccl.logcontiene los registros de la configuración y la ejecución de la prueba. Para ver estos registros, ejecuta el siguiente comando:tail -f nccl.log
También puedes usar
Ctrl+Cpara dejar de seguir la salida en cualquier momento. Al final denccl.log, el resultado debería ser similar al siguiente:... ---- 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 -------
Todas las secuencias de comandos de trabajo de Slurm y los registros de salida de nccl-tests se almacenan en el directorio
nccl-tests_$(date +%s)/experiments. En el archivonccl-tests_${date +%s)/summary.tsv, también se almacena un resumen del rendimiento de la prueba de NCCL.Si quitas el directorio
nccl-tests_$(date +%s)/, se borrarán todos los archivos generados durante estas pruebas.
A3 Ultra
Desde el directorio compartido del nodo de acceso (este nodo suele ubicarse en
${HOME}), descarga la secuencia de comandos necesaria para compilar la prueba de NCCL ejecutando el siguiente 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
Después de que se descargue la secuencia de comandos, importa una imagen de PyTorch desde el registro de contenedores de NVIDIA y compila las pruebas de NCCL. Para ello, ejecuta el comando que se indica a continuación:
sbatch build-nccl-tests.sh
La secuencia de comandos anterior se ejecuta en uno de tus nodos. Usa el parámetro
--container-mountspara activar tu directorio actual,$PWD, en el directorio/nccldentro del contenedor.Verifica que se haya compilado la prueba de NCCL. Para verificar que sea así, ejecuta el siguiente comando:
sacct -a
Si se completa correctamente, el resultado es similar al siguiente:
JobID JobName Partition Account AllocCPUS State ExitCode ------------ ---------- ---------- ---------- ---------- ---------- -------- 1 build-ncc+ a3ultra 112 COMPLETED 0:0
Si la compilación se realiza correctamente, también deberías tener un archivo llamado
nvidia+pytorch+24.09-py3.sqshen el directorio en el que ejecutaste el comando, junto con un directorio llamadonccl-tests.Verifica que la carpeta
nccl-tests/buildcontenga varios archivos binarios, incluidosall_gather_perf,all_reduce_perf,reduce_scatter_perfyalltoall_perf.Descarga la secuencia de comandos de prueba de 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
Para ejecutar cualquier ejecución de trabajo en un clúster A3 Ultra, se deben establecer varias variables de entorno para habilitar redes de alto rendimiento con RDMA. Debido a que usas contenedores de enroot en este procedimiento para iniciar cargas de trabajo, estas variables se deben establecer en el entorno del contenedor, en lugar del entorno del host. Estas variables se pueden inspeccionar en la secuencia de comandos
run-nccl-tests.shque acabas de descargar.Ejecuta la secuencia de comandos de prueba de NCCL. La prueba puede tardar aproximadamente 15 minutos o más.
sbatch run-nccl-tests.sh
Revisa los resultados. La secuencia de comandos genera un archivo
slurm-XX.outque contiene el resultado de la comparativa deall_gather_perfde nccl.El resultado es similar a lo siguiente:
# # 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
Desde el directorio compartido del nodo de acceso (este nodo suele ubicarse en
${HOME}), descarga la secuencia de comandos necesaria para compilar la prueba de NCCL ejecutando el siguiente 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
Después de que se descargue la secuencia de comandos, importa una imagen de PyTorch desde el registro de contenedores de NVIDIA y compila las pruebas de NCCL.
sbatch build-nccl-tests.sh
La secuencia de comandos anterior se ejecuta en uno de tus nodos. Usa el parámetro
--container-mountspara activar tu directorio actual,$PWD, en el directorio/nccldentro del contenedor.Verifica que se haya compilado la prueba de NCCL:
sacct -a
El resultado es similar a lo siguiente:
JobID JobName Partition Account AllocCPUS State ExitCode ------------ ---------- ---------- ---------- ---------- ---------- -------- 1 build-ncc+ a3mega 112 COMPLETED 0:0
Una vez que se completa la compilación, se crea el objeto
nccl-tests directory. Este directorio contiene el archivonvidia+pytorch+24.09-py3.sqsh. Un archivo.sqshes una imagen comprimida del sistema de archivos de solo lectura que funciona como el formato de contenedor estándar para las cargas de trabajo de IA.Verifica que la carpeta
nccl-tests/buildcontenga varios archivos binarios, incluidosall_gather_perf,all_reduce_perf,reduce_scatter_perfyalltoall_perf.Descarga la secuencia de comandos de prueba de 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
Para ejecutar cualquier ejecución de trabajo en un clúster A3 Mega, debes configurar una cantidad de variables de entorno. Este parámetro de configuración habilita las redes de alto rendimiento con el protocolo GPUDirect-TCPXO. Debido a que usas contenedores de enroot en este procedimiento para iniciar cargas de trabajo, estas variables se deben establecer en el entorno del contenedor, en lugar del entorno del host. Puedes inspeccionar estas variables en la secuencia de comandos
run-nccl-tests.shque descargaste en el paso anterior.Ejecuta la secuencia de comandos de prueba de NCCL. La prueba puede tardar aproximadamente 15 minutos o más.
sbatch run-nccl-tests.sh
Revisa los resultados. La secuencia de comandos genera un archivo
slurm-XX.outque contiene el resultado de la comparativa deall_gather_perfde nccl.El resultado es similar a lo siguiente:
# # 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
Desde el directorio compartido del nodo de acceso (este nodo suele ubicarse en
${HOME}), descarga la secuencia de comandos necesaria para compilar la prueba de NCCL ejecutando el siguiente comando: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
Después de que se descargue la secuencia de comandos, importa una imagen de PyTorch desde el registro de contenedores de NVIDIA y compila las pruebas de NCCL. Para ello, ejecuta el siguiente comando:
sbatch build-nccl-tests.sh
La secuencia de comandos anterior se ejecuta en uno de tus nodos. Usa el parámetro
--container-mountspara activar tu directorio actual,$PWD, en el directorio/nccldentro del contenedor.Verifica que se haya compilado la prueba de NCCL:
sacct -a
El resultado es similar a lo siguiente:
JobID JobName Partition Account AllocCPUS State ExitCode ------------ ---------- ---------- ---------- ---------- ---------- -------- 1 build-ncc+ a3high 112 COMPLETED 0:0
Si la compilación se realiza de forma correcta, se crea el objeto
nccl-tests directory. Este directorio contiene el archivonvidia+pytorch+24.09-py3.sqsh. Un archivo.sqshes una imagen comprimida del sistema de archivos de solo lectura que funciona como el formato de contenedor estándar para las cargas de trabajo de IA.Verifica que la carpeta
nccl-tests/buildcontenga varios archivos binarios, incluidosall_gather_perf,all_reduce_perf,reduce_scatter_perfyalltoall_perf.Descarga la secuencia de comandos de prueba de 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
Para ejecutar cualquier ejecución de trabajo en un clúster A3 High, se deben configurar varias variables de entorno para habilitar redes de alto rendimiento con GPUDirect-TCPX. Debido a que usas contenedores de enroot en este procedimiento para iniciar cargas de trabajo, estas variables se deben establecer en el entorno del contenedor, en lugar del entorno del host. Puedes inspeccionar estas variables en la secuencia de comandos
run-nccl-tests.shque acabas de descargar.Ejecuta la secuencia de comandos de prueba de NCCL. La prueba puede tardar aproximadamente 15 minutos o más.
sbatch run-nccl-tests.sh
Revisa los resultados. La secuencia de comandos genera un archivo
slurm-XX.outque contiene el resultado de la comparativa deall_gather_perfde nccl.El resultado es similar a lo siguiente:
# # 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 : ###.## #
¿Qué sigue?
- Collect and Understand NCCL Logs for Troubleshooting para comprender los resultados de las pruebas y solucionar problemas.
- Supervisa instancias de Compute Engine y clústeres de Slurm.
- Obtén más información para solucionar problemas de rendimiento lento.