NVIDIA GB200 NVL72 revoluciona la eficiencia en centros de datos con programación de bloques en Slurm

NVIDIA GB200 NVL72 representa un avance significativo en la construcción de clústeres de GPU, ampliando la coherencia de NVIDIA NVLink a lo largo de todo un rack. Este diseño no solo permite un rendimiento exaescale, sino que también modifica las suposiciones en las que se basan muchos sistemas de programación.

En consecuencia, la «localidad a escala de rack» se convierte en una restricción fundamental. Cuando las cargas de trabajo cruzan los límites de dominio, el rendimiento disminuye drásticamente. Un programador que considera la red como una topología de árbol de esfuerzo máximo fragmentará las asignaciones, aumentando los tiempos de espera y degradando el rendimiento de las aplicaciones.

¿Cómo es única la arquitectura de NVIDIA GB200 NVL72?

NVIDIA GB200 NVL72 es un supercomputador exaescale en un solo rack que redefine el diseño de clústeres de GPU. Mientras que generaciones anteriores usaban NVIDIA NVLink dentro de un solo chasis, GB200 NVL72 extiende este dominio de memoria coherente a todo un rack, con 72 GPU Blackwell de NVIDIA distribuidas en 18 bandejas de computación, unificadas con NVLink de quinta generación.

Las comunicaciones dentro del rack operan a velocidades de NVLink, proporcionando 1.8 TB/s de ancho de banda bidireccional por GPU, sumando un total de 130 TB/s de ancho de banda agregado.

Figura 1. El complejo interconexión del rack GB200 NVL72 y la topología de NVLink requieren una inteligencia de carga de trabajo más avanzada

Operar clústeres GB200 NVL72 a gran escala exige nuevos algoritmos de programación que consideren los dominios NVLink como límites estrictos para los trabajos. Estos algoritmos son cruciales para una carga de trabajo eficiente, pero también requieren conciencia administrativa sobre la fragmentación del sistema. El plugin de topología/bloque de Slurm ayuda a los usuarios y administradores en ambos aspectos.

¿Cómo funciona la programación de bloques en Slurm?

Slurm ha soportado durante mucho tiempo la programación de trabajos consciente de la topología: el plugin de topología/árbol ha sido el estándar para clústeres de gran escala. Este modelo la red de cómputo como un árbol jerárquico de interruptores y nodos. Aunque el objetivo principal es minimizar la cantidad de interruptores que abarca un trabajo, sigue siendo un intento de mejor esfuerzo, lo que puede causar fragmentación.

La introducción de GB200 NVL72 y GB300 NVL72 requirió un nuevo enfoque. En colaboración entre NVIDIA y SchedMD, se introdujo el nuevo plugin de topología/bloque en la versión 23.11 de Slurm para soportar arquitecturas a escala de rack como GB200 NVL72.

Block scheduling concept illustration with four blocks (blue, orange, purpose, green) representing independent NVLink domains.
Figura 2. Cada dominio multinodo NVLink en el clúster se modela como un bloque, que es una unidad de programación rígida

Si un trabajo solicita una asignación que encaja dentro de un solo bloque (18 nodos o menos), los nodos siempre se asignarán desde un bloque, evitando la fragmentación.

Con el comportamiento predeterminado de topología/bloque, un trabajo que solicita 16 nodos obliga al programador a esperar un único dominio multinodo NVLink con 16 nodos inactivos, lo que puede aumentar los tiempos de espera de los trabajos. Sin embargo, la aplicación puede tener requisitos de conectividad NVLink que son menores que el dominio completo NVL72.

Para que los usuarios comuniquen los requisitos de topología de sus aplicaciones al programador de trabajos, Slurm introdujo el argumento --segment para trabajos de topología/bloque. Este argumento define el grupo atómico de nodos que deben estar en el mismo bloque, ayudando a equilibrar la eficiencia del programador con los requisitos de localización del hardware.

¿Cómo optimiza Slurm la programación de bloques el rendimiento?

Un aspecto importante que sorprende a menudo a los usuarios es que Slurm puede asignar múltiples segmentos del mismo trabajo al mismo bloque.

Utilizar segmentos es esencial para optimizar el rendimiento según los requisitos de localización específicos de la carga de trabajo: Tensor Parallelism (TP) puede requerir segmentos pequeños y ajustados para mantener la comunicación sensible a la latencia en la alta velocidad de NVLink.

Por lo tanto, usando un valor grande como --segment=16, se logrará una distribución equilibrada de los nodos entre bloques.

Diagram illustrating how sbatch -N32 --segment=16 distributes 32 nodes across four blocks, with each block containing 16 total slots but only a portion actively allocated (shown in color) and the rest left idle (shown in gray). Unlike the previous example, there are no green shared nodes, and each block's colored nodes (blue, orange, and purple) represent nodes exclusively allocated to that segment, with the gray dots indicating unallocated capacity within each block.
Figura 5. Ejemplo de asignación equilibrada (-N32 --segment=16) mostrando la distribución uniforme de nodos entre bloques

Los argumentos de línea de comandos --consolidate-segments y --spread-segments permiten a los usuarios influir en la colocación de segmentos.

¿Cómo configurar la programación de bloques en Slurm?

Para topología/bloque, se recomienda que los administradores de Slurm definan un bloque por cada dominio GB200 NVL72 (18 nodos) en el clúster. Para trabajos menores a 18 nodos que no especifiquen --segment, Slurm no fragmentará la asignación entre bloques, manteniendo el trabajo en cola hasta que haya suficientes recursos disponibles.

Esto asegura que todos los nodos asignados para este trabajo puedan comunicarse a través de NVLink, proporcionando un rendimiento consistente. Para trabajos mayores a 18 nodos que no especifiquen --segment, Slurm ajustará la asignación en la mínima cantidad de bloques necesarios.

Para configurar la topología/bloque, se recomienda utilizar el archivo topology.yaml. Por ejemplo, para definir dos dominios GB200 NVL72, se puede usar el siguiente script:

 --- - topology: gb200-nvl72 cluster_default: true block: block_sizes: - 18 blocks: - block: block01 nodes: node[0001-0018] - block: block02 nodes: node[0019-0036] 

El plugin de topología/bloque de Slurm soporta múltiples niveles de agrupamiento jerárquico, donde el primer nivel serían los dominios NVL72, y los niveles superiores pueden reflejar la realidad física del diseño del tejido de cómputo.

¿Cuáles son las características avanzadas de topología/bloque?

Desde el lanzamiento inicial del plugin de topología/bloque, NVIDIA ha colaborado con la comunidad de Slurm para introducir nuevas características que brindan más control sobre el comportamiento del plugin.

A partir de Slurm 25.05, ahora se pueden declarar bloques incompletos en el archivo de topología de Slurm. Esto es útil en las primeras etapas de un clúster cuando todos los nodos de un dominio no están disponibles. También es posible declarar nodos de repuesto en un dominio, simplemente listando más nodos de los definidos por el tamaño del bloque.

La introducción del archivo topology.yaml eliminó una gran restricción del enfoque anterior: ahora se pueden usar múltiples plugins de topología simultáneamente en un clúster de Slurm, asociando un plugin diferente para cada partición de Slurm.

Conclusión

Las arquitecturas a escala de rack son el futuro de la computación AI, y el NVIDIA Blackwell GB200 NVL72 es la primera iteración de este diseño. La infraestructura de software debe evolucionar para apoyar este nuevo paradigma. El plugin de topología/bloque de Slurm proporciona la base y el compromiso de seguir trabajando con la comunidad de Slurm para facilitar el despliegue, la comprensión, la optimización y la operación a gran escala.

¿Listo para optimizar su orquestación a escala de rack? Revisa la documentación de Slurm topology.yaml y la Guía del usuario de NVIDIA MNNVL para comenzar a implementar la programación de bloques en sus clústeres Blackwell.

Ilustración de un hombre mayor con auriculares y chaqueta