IA en varias GPU: cómo se comunican las GPU

es parte de una serie sobre IA distribuida en múltiples GPU:

Introducción

Antes de sumergirnos en técnicas avanzadas de paralelismo, debemos comprender las tecnologías clave que permiten que las GPU se comuniquen entre sí.

Pero, ¿por qué las GPU necesitan comunicarse en primer lugar? Al entrenar modelos de IA en varias GPU, cada GPU procesa diferentes lotes de datos, pero todos deben permanecer sincronizados compartiendo gradientes durante la retropropagación o intercambiando pesos de modelo. Los detalles de qué se comunica y cuándo dependen de su estrategia de paralelismo, que exploraremos en profundidad en las próximas publicaciones del blog. Por ahora, solo sepa que el entrenamiento moderno de IA requiere mucha comunicación, lo que hace que la transferencia eficiente de datos de GPU a GPU sea fundamental para el rendimiento.

La pila de comunicación

PCIe

PCIe (Peripheral Component Interconnect Express) conecta tarjetas de expansión como GPU a la placa base mediante carriles serie independientes punto a punto. Esto es lo que ofrecen las diferentes generaciones de PCIe para una GPU que utiliza 16 carriles:

Gen4 x16: ~32 GB/s bidireccional Gen5 x16: ~64 GB/s bidireccional Gen6 x16: ~128 GB/s bidireccional (para su información, 16 carriles × 8 GB/s/carril = 128 GB/s)

Las CPU de servidor de alta gama suelen ofrecer 128 carriles PCIe y las GPU modernas necesitan 16 carriles para un ancho de banda óptimo. Es por eso que normalmente ves 8 GPU por servidor (128 = 16 x 8). El consumo de energía y el espacio físico en el chasis del servidor también hacen que no sea práctico ir más allá de 8 GPU en un solo nodo.

NVEnlace

NVLink permite la comunicación directa de GPU a GPU dentro del mismo servidor (nodo), sin pasar por la CPU. Esta interconexión patentada por NVIDIA crea una ruta directa de memoria a memoria entre GPU con un gran ancho de banda:

NVLink 3 (A100): ~600 GB/s por GPU NVLink 4 (H100): ~900 GB/s por GPU NVLink 5 (Blackwell): Hasta 1,8 TB/s por GPU

Fuente: GitHub (licencia MIT)

Nota: en NVLink para comunicación CPU-GPU

Ciertas arquitecturas de CPU admiten NVLink como reemplazo de PCIe, lo que acelera drásticamente la comunicación CPU-GPU al superar el cuello de botella de PCIe en las transferencias de datos, como mover lotes de entrenamiento de la CPU a la GPU. Esta capacidad CPU-GPU NVLink hace que la descarga de CPU (una técnica que ahorra VRAM al almacenar datos en RAM) sea práctica para aplicaciones de IA del mundo real. Dado que ampliar la RAM suele ser más rentable que ampliar la VRAM, este enfoque ofrece importantes ventajas económicas.

Las CPU compatibles con NVLink incluyen IBM POWER8, POWER9 y NVIDIA Grace.

Sin embargo, hay un problema. En un servidor con 8x H100, cada GPU necesita comunicarse con otras 7, dividiendo esos 900 GB/s en siete conexiones punto a punto de aproximadamente 128 GB/s cada una. Ahí es donde entra NVSwitch.

NVSwitch

NVSwitch actúa como un centro central para la comunicación de GPU, enrutando dinámicamente (cambiando si lo desea) datos entre GPU según sea necesario. Con NVSwitch, cada GPU Hopper puede comunicarse a 900 GB/s con todas las demás GPU Hopper simultáneamente, es decir, el ancho de banda máximo no depende de cuántas GPU se estén comunicando. Esto es lo que hace que NVSwitch sea “sin bloqueo”. Cada GPU se conecta a varios chips NVSwitch a través de múltiples conexiones NVLink, lo que garantiza el máximo ancho de banda.

Si bien NVSwitch comenzó como una solución dentro del nodo, se amplió para interconectar múltiples nodos, creando clústeres de GPU que admiten hasta 256 GPU con comunicación de todos a todos a velocidades NVLink casi locales.

Las generaciones de NVSwitch son:

Primera generación: admite hasta 16 GPU por servidor (compatible con Tesla V100) Segunda generación: también admite hasta 16 GPU con ancho de banda mejorado y menor latencia Tercera generación: diseñado para GPU H100, admite hasta 256 GPU

InfiniBand

InfiniBand maneja la comunicación entre nodos. Si bien es mucho más lento (y más económico) que NVSwitch, se usa comúnmente en centros de datos para escalar a miles de GPU. La InfiniBand moderna es compatible con NVIDIA GPUDirect® RDMA (acceso remoto directo a la memoria), lo que permite que los adaptadores de red accedan a la memoria de la GPU directamente sin la participación de la CPU (sin costosas copias a la RAM del host).

Las velocidades actuales de InfiniBand incluyen:

HDR: ~25 GB/s por puerto NDR: ~50 GB/s por puerto NDR200: ~100 GB/s por puerto

Estas velocidades son significativamente más lentas que las de NVLink dentro del nodo debido a la sobrecarga del protocolo de red y la necesidad de dos cruces PCIe (uno en el remitente y otro en el receptor).

Principios clave de diseño

Comprender la escala lineal

El escalado lineal es el santo grial de la informática distribuida. En términos simples, significa que duplicar sus GPU debería duplicar su rendimiento y reducir a la mitad su tiempo de entrenamiento. Esto sucede cuando la sobrecarga de comunicación es mínima en comparación con el tiempo de cálculo, lo que permite que cada GPU funcione a plena capacidad. Sin embargo, el escalado lineal perfecto es poco común en las cargas de trabajo de IA porque los requisitos de comunicación crecen con la cantidad de dispositivos y, por lo general, es imposible lograr una superposición perfecta entre computación y comunicación (se explica a continuación).

La importancia de la superposición entre computación y comunicación

Cuando una GPU permanece inactiva esperando que se transfieran datos antes de poder procesarlos, se están desperdiciando recursos. Las operaciones de comunicación deben superponerse con la computación tanto como sea posible. Cuando eso no es posible, llamamos a esa comunicación una “operación expuesta”.

Intranodo versus internodo: el precipicio del rendimiento

Las placas base modernas para servidores admiten hasta 8 GPU. Dentro de este rango, a menudo se puede lograr un escalamiento casi lineal gracias a la comunicación dentro del nodo de baja latencia y alto ancho de banda.

Una vez que escale más allá de 8 GPU y comience a usar múltiples nodos conectados a través de InfiniBand, verá una gran degradación del rendimiento. La comunicación entre nodos es mucho más lenta que la NVLink dentro del nodo, lo que introduce una sobrecarga del protocolo de red, una mayor latencia y limitaciones de ancho de banda. A medida que agrega más GPU, cada GPU debe coordinarse con más pares, lo que pasa más tiempo inactivo esperando que se completen las transferencias de datos.

Conclusión

Sígueme en X para obtener más contenido de IA gratuito @l_cesconetto

¡Felicitaciones por llegar hasta el final! En este post aprendiste sobre:

Los fundamentos de la comunicación CPU-GPU y GPU-GPU: PCIe, NVLink, NVSwitch e InfiniBand Principios de diseño clave para la computación GPU distribuida Ahora puede tomar decisiones mucho más informadas al diseñar sus cargas de trabajo de IA

En la próxima publicación del blog, profundizaremos en nuestra primera técnica de paralelismo, el paralelismo de datos distribuidos.

Blog de NVIDIA GPU directa