NVIDIA mejora el procesamiento de datos con GPUs de múltiples instancias y localización NUMA

Las GPUs de centro de datos de NVIDIA, pertenecientes a las familias NVIDIA Ampere, NVIDIA Hopper y NVIDIA Blackwell, presentan comportamientos de acceso a memoria no uniforme (NUMA) y exponen un único espacio de memoria. La mayoría de los programas no tienen problemas con esta no uniformidad. Sin embargo, al aumentar el ancho de banda en las GPUs de nueva generación, se logran mejoras significativas en rendimiento y consumo energético al considerar la localización de datos y computación.

Este artículo analiza la jerarquía de memoria de las GPUs de NVIDIA, discutiendo el impacto en rendimiento y potencia del traslado de datos a través de conexiones die-to-die. Posteriormente, se revisa el uso del modo NVIDIA Multi-Instance GPU (MIG) para lograr localización de datos. Finalmente, se presentan resultados al comparar el modo MIG con el uso de memoria no localizada en el caso de uso del operador stencil Wilson-Dslash.

Jerarquía de memoria en GPUs de NVIDIA

Se considera la vista abstracta de la jerarquía de memoria con dos nodos NUMA, como se muestra en la Figura 1. Cuando un multiprocesador de flujo (SM) en el nodo 0 necesita acceder a una ubicación de memoria en la memoria de acceso aleatorio dinámica (DRAM) del nodo 1, debe transferir datos a través del tejido L2. En el caso de las GPUs Blackwell de NVIDIA, cada nodo NUMA es un die físico distinto, lo que añade latencia y aumenta la potencia requerida para la transferencia de datos.

Figura 1. Vista abstracta de la jerarquía de memoria GPU a través de dos nodos NUMA

A pesar de la complejidad añadida, el código no consciente de NUMA puede alcanzar un ancho de banda DRAM máximo. Para mitigar estos inconvenientes, es beneficioso minimizar las transferencias de datos entre nodos NUMA. Aunque se presenta un único espacio de memoria al usuario, la arquitectura de NVIDIA emplea almacenamiento en caché coherente en L2 para reducir estas transferencias. Este mecanismo ayuda a evitar accesos repetidos a la misma dirección de memoria sin necesidad de volver a cargar datos a través de la interfaz del tejido L2.

Instaurado el almacenamiento en caché coherente, el L2 unificado permite que todos los SMs logren el ancho de banda máximo, aunque la latencia varía según la proximidad del SM a los diferentes segmentos de L2. Con la generación NVIDIA Ampere, se introdujo una jerarquía de nodos NUMA, cada uno con su propia caché L2 y conexión coherente con otros. Este diseño ha sido utilizado en GPUs de gran centro de datos desde la arquitectura NVIDIA Ampere, a diferencia de las GPUs de juegos más pequeñas.

Localización de datos usando MIG

El modo MIG permite que las GPUs de NVIDIA soportadas se dividan en múltiples instancias aisladas, cada una con memoria, caché y núcleos de cómputo dedicados. Esto optimiza la utilización eficiente y de alto rendimiento de la GPU entre múltiples usuarios o cargas de trabajo. MIG puede lograr hasta 7 veces más recursos de GPU en una única GPU. Este modo permite ejecutar varias GPUs virtuales (vGPUs), así como máquinas virtuales (VMs) de manera paralela en una única GPU, garantizando al mismo tiempo la aislamiento que ofrecen las vGPUs.

Las capacidades proporcionadas por MIG pueden aprovecharse para lograr la localización del nodo NUMA. Al crear una instancia de MIG por nodo NUMA, se asegura la separación entre diferentes instancias de GPU, eliminando así el tráfico entre nodos NUMA. MIG permite dividir la GPU en instancias de GPU (GI), donde se define una o más instancias de cómputo (CI) que contienen todos o parte de los SMs pertenecientes a una GI.

Para habilitar la localización dentro de una GI, se plantea crear dos instancias de GPU asignadas a cada nodo NUMA. En una GPU Blackwell, se puede habilitar el modo MIG y listar los perfiles de instancias de GPU disponibles, como se muestra en el código de la Figura 2.

 MIG 3g.90gb Device 0: (UUID: MIG-ee2ec0e5-0dda-5591-9ee7-4ae51028b6fa) MIG 3g.90gb Device 1: (UUID: MIG-2bbb368b-7cb0-53da-b1a4-7ace0652a197) 

Para usar estos dispositivos, se deben agregar a la variable de entorno CUDA_VISIBLE_DEVICES. Por ejemplo, para ejecutar un trabajo MPI de dos procesos, se podría crear un script envoltorio (wrapper.sh):

 #!/bin/bash # case $SLURM_PROCID in 0) CUDA_VISIBLE_DEVICES=”MIG-ee2ec0e5-0dda-5591-9ee7-4ae51028b6fa” ;; 1) CUDA_VISIBLE_DEVICES=”MIG-2bbb368b-7cb0-53da-b1a4-7ace0652a197” ;; esac $* 

Luego, se lanzan los trabajos MPI:

 $ mpirun -n 2 ./wrapper.sh my_executable 

Finalmente, al concluir el trabajo, se puede desactivar el modo MIG.

A list of different MIG mode options after running a command on the terminal.
Figura 2. Habilitando el modo MIG y listando los perfiles de instancia de GPU disponibles
Command line output when creating a MIG instance.
Figura 3. Creando instancias de cómputo para MIG
Figure shows the commands required to run when turning off MIG instances.
Figura 4. Comandos para desactivar instancias de MIG

Beneficios de la localización con MIG

Como aplicación de ejemplo para demostrar los beneficios de la localización con MIG, se examina el operador stencil Wilson-Dslash, un kernel clave para la cromodinámica cuántica en redes (LQCD) extraído de la biblioteca QUDA. Esta biblioteca es utilizada para acelerar varios códigos grandes de LQCD, como Chroma y MILC.

El kernel Dslash es una operación de diferencias finitas en una red toroidal 4D, donde los datos en cada sitio de la red se actualizan dependiendo de los valores de sus ocho vecinos ortogonales. Las cuatro dimensiones son las dimensiones espaciales habituales (X, Y, Z) y la dimensión temporal (T). Este kernel es sensible al ancho de banda de memoria.

Si la red se descompone en dos nodos NUMA de manera equitativa, por ejemplo, a lo largo del eje temporal, cada dominio necesitará acceder a sitios en los límites de la otra dominio. La Figura 5 ilustra cómo los sitios de la red verde en los límites de los subdominios necesitan los sitios rojos para completar sus stencils. La red se organiza teóricamente en los dos nodos NUMA y los caminos de datos posibles son el acceso regular a memoria (flechas negras) cuando no se localiza, o el paso de mensajes MPI a través del host en modo MIG localizado (flechas negras).

Figure shows how the memory accesses are mapped for the Dslash kernel. Two NUMA nodes are shown connected through Host Fabric (through PCIe, Memory, IB, etc). Each NUMA node gets half of the compute. Each NUMA node can access its local memory. But to communicate with each other Host Fabric is required.
Figura 5. Accesos a memoria para el kernel Dslash en modo MIG

La forma más conveniente de acceder a los vecinos sería a través de la caché L2 compartida y el interconector. Sin embargo, al operar en modo MIG, este camino requiere comunicación entre las instancias MIG a través de MPI utilizando PCIe o NVLink. Como resultado, este camino será más lento en comparación con el acceso a la memoria principal adjunta a la instancia MIG.

Las cargas de trabajo que requieren poca o ninguna comunicación entre dos instancias MIG tienden a beneficiarse más del modo MIG. En cambio, se agrupan los sitios negros en los límites y se envían a través de MPI. Este paso introduce latencia adicional (empaquetado de búferes, envío y desempaquetado). Aunque ahorra potencia de GPU al no utilizar el interconector de caché L2 compartido, sí consume potencia para su transferencia a través del host (por ejemplo, para PCIe).

La cantidad de datos que necesita ser transferida entre los dos procesos está relacionada con el número de sitios de cara a transmitir en los mensajes, específicamente con la superficie del volumen tridimensional ortogonal a la dirección de la división. En este ejemplo, la división se realiza siempre en la dirección T, de modo que cada nodo NUMA termina con (Ns Nt)/2 sitios, donde Ns es el número de sitios en nuestro volumen espacial y Nt es la longitud de la dimensión temporal. La relación superficie-volumen es Ns/(Ns Nt/2) = 2/Nt. En el caso de los problemas, se considera que Nt=64, manteniendo constante la relación superficie-volumen en 1/32 ~ 3.13%.

La Figura 6 muestra el caso no localizado. La memoria global está compuesta por dos memorias conectadas a los nodos NUMA a través de controladores de memoria. Los resaltados en colores de las redes indican que los datos pueden provenir de la DRAM local o de la DRAM remota a través del L2 compartido.

Figure shows two NUMA nodes. Each NUMA node has a DRAM. The NUMA nodes can communicate with each other using Shared L2.
Figura 6. Accesos a memoria para el caso no localizado

Este caso se compara con la situación base, donde no se emplea MIG. Aquí, ni los datos ni el procesamiento están localizados, y el escenario se representa mejor con la Figura 8. Cada nodo NUMA recibe sus datos tanto de su controlador de memoria local como del otro nodo NUMA. De hecho, solo hay una red global y la separación en dos partes para los dos nodos NUMA en la figura es artificial.

En este escenario, los bloques de hilo destinados a procesar una colección de sitios son asignados a los diferentes nodos NUMA a discreción del programador. Dado que los datos se distribuyen uniformemente sobre las dos memorias NUMA, se transfiere mucho más datos a través del L2 compartido que en el caso de la localización MIG, donde solo se transfirieron los sitios de superficie mínimos requeridos. Esto puede implicar un costo de potencia significativo.

Por otro lado, toda la operación puede llevarse a cabo con un solo kernel. Se pueden evitar las latencias ocasionadas al empaquetar búferes para el paso de mensajes y acumulando las caras recibidas al final.

En cuanto a los resultados experimentales, se puede observar la aceleración en la ejecución de la carga de trabajo con varios límites de potencia de GPU en vatios. Las aceleraciones son las proporciones de los tiempos de reloj de pared tomados por los enfoques no localizados y MIG que operan con límites de potencia idénticos (por ejemplo, ambos a 700 W).

Como se muestra en la Figura 7, a un límite de potencia de GPU de 400 W, MIG supera los datos no localizados con aceleraciones de hasta 2.25x dependiendo del volumen de la carga de trabajo. Esto se debe a que el consumo de potencia del interfaz de tejido L2 se convierte en un factor limitante cuando la GPU opera con un límite de potencia bajo. Con el modo MIG, dado que no se consume potencia en el tejido L2 para transferir datos entre nodos NUMA, las cargas de trabajo pueden ejecutarse mucho más rápido.

Sin embargo, al aumentar el límite de potencia de la GPU, el modo MIG presenta un rendimiento ligeramente inferior en los experimentos representados por las líneas gris, verde oscuro y negra en la Figura 9, así como parte de la verde. Esto se debe a que a límites de potencia superiores, la latencia adicional causada por el paso de mensajes puede superar los beneficios de la localización.

Figure titled ‘Speedup in Dslash time versus power for different volumes’ showing the results of running MIG based NUMA localization on different sizes of workloads. At lower power envelopes we see performance gains.
Figura 7. Ejecución de localización NUMA basada en MIG en diferentes tamaños de carga de trabajo

En realidad, los casos más pequeños (especialmente aquellos indicados por las líneas negra y verde oscuro en la Figura 7) nunca agotan la potencia disponible a límites de potencia más altos, incluso en el caso no localizado. Por lo tanto, esos casos se benefician poco del ahorro de potencia de GPU logrado por la localización, y en estos volúmenes más pequeños, las latencias debido al lanzamiento de kernels son mucho más notables. Los volúmenes más grandes (como el verde, por ejemplo) requieren más potencia y, por ende, pueden obtener una ventaja sobre la configuración no localizada incluso a límites de potencia más altos.

Comienza con la localización de nodos NUMA basada en MIG

El almacenamiento en caché L2 local en las GPUs de centro de datos de NVIDIA puede impactar el rendimiento en cargas de trabajo no conscientes de NUMA. Nuestros experimentos utilizando el operador Wilson-Dslash en modo MIG muestran que cuando la GPU se opera a límites de potencia más bajos y la transferencia de datos a través de MPI (PCIe/NVLink) es baja en relación con los accesos a memoria local, la localización de nodos NUMA basada en MIG puede ofrecer aceleraciones de hasta 2.25x en comparación con el caso no localizado a igual límite de potencia.

Aunque los sistemas que operan a un límite de potencia de 1,000 W pueden lograr un rendimiento absoluto mayor que una configuración de 400 W, la localización basada en MIG presenta ventajas claras en condiciones de potencia restringida. En escenarios de menor potencia, permite un rendimiento significativamente más rápido, convirtiéndola en una optimización especialmente eficaz cuando se opera dentro de límites de potencia estrictos.

Sin embargo, en general, MIG no ofrece la flexibilidad necesaria para lograr consistentemente una localización efectiva de datos, especialmente a medida que la sobrecarga de comunicación entre procesos se vuelve más pronunciada a límites de potencia más altos. MIG solo es compatible con casos de uso que son demasiado pequeños para caber en una GPU. Por esta razón, no se recomienda para los casos presentados en este artículo. Se están investigando enfoques alternativos para abordar estas limitaciones.

Para obtener más información, consulte Acelera el rendimiento de memoria de la GPU sin cambios de código utilizando NVIDIA CUDA MPS.

Ilustración de un hombre mayor con auriculares y chaqueta