Skip to content

English · Español

03 — Interconnects y topología: NVLink, InfiniBand, fat-trees y colectivos

🇪🇸 Cuando entrenas en 1024 GPUs, el cuello de botella ya no es la GPU. Es la red que las conecta y los algoritmos de comunicación colectiva que usas.

La jerarquía de enlaces

Un cluster de entrenamiento tiene tres niveles distintos de interconnect:

  1. Intra-servidor (scale-up): GPU ↔ GPU dentro de un único chasis. NVLink + NVSwitch en NVIDIA; Infinity Fabric en AMD; ICI en TPU.
  2. Inter-servidor, mismo rack/pod (scale-out, ajustado): servidor ↔ servidor vía InfiniBand o RoCE (RDMA sobre Converged Ethernet). 200-800 Gb/s por puerto.
  3. Inter-pod / a nivel de datacenter: Ethernet regular o backbone InfiniBand. Típicamente usado solo para ingesta de datos y checkpoints, no para sincronización de gradientes.

Cada nivel es 5-10× más lento que el de arriba. La habilidad es mantener tanto tráfico como sea posible en el nivel superior.

Bus Tasa por enlace Uso Agregado H100
PCIe 5.0 ×16 64 GB/s bidireccional CPU host ↔ GPU; almacenamiento; periféricos no-GPU 1 enlace por GPU
NVLink 4 50 GB/s bidireccional por lane × 18 lanes GPU ↔ GPU peer-to-peer 900 GB/s total

NVLink es 14× más rápido que PCIe 5.0. Por eso no puedes fingir un setup de entrenamiento multi-GPU con solo PCIe — los tiempos de AllReduce de gradientes se disparan. Los alquileres en la nube que anuncian "8× H100" sin NVLink no son realmente aptos para entrenamiento.

NVSwitch — el fabric en placa

Una DGX H100 tiene 4 NVSwitches que interconectan completamente 8 H100s de modo que cada par de GPUs tiene 900 GB/s de bandwidth (no solo a un peer — a cada peer simultáneamente). Esto es lo que hace que el AllReduce intra-nodo sea casi gratis en relación al inter-nodo.

El más reciente NVLink Switch System extiende esto a 32 o 256 GPUs (DGX SuperPOD), manteniendo la propiedad de 900 GB/s por peer a través de racks vía switches NVLink dedicados en la red. Con Blackwell GB200 NVL72, el dominio crece a 72 GPUs/rack con 130 TB/s agregados de bandwidth NVLink.

[fuente: documentación de arquitectura NVIDIA DGX H100 2023; especificación NVIDIA GB200 NVL72 2024]

InfiniBand vs RoCE

Más allá de un dominio NVLink, necesitas una red real:

  • InfiniBand (Mellanox / NVIDIA Networking): una pila de protocolo separada de Ethernet, diseñada para HPC. RDMA nativo. Menor latencia, mayor consistencia bajo congestión. SKU top actual: NDR InfiniBand, 400 Gb/s por puerto (800 Gb/s con adaptadores dual-port).
  • RoCE (RDMA over Converged Ethernet): semántica RDMA cabalgando sobre Ethernet. Mismas velocidades que InfiniBand en el hardware más reciente, a menudo más barato por puerto. Requiere configuración de Ethernet lossless (PFC, ECN). Usado por Meta, AWS, Microsoft para fabrics scale-out.

Para una entrevista de ML, la regla es: InfiniBand es el fabric de referencia; RoCE es la alternativa con precio competitivo; ambos entregan RDMA a 400 Gb/s+ en el leaf.

Topología: fat-tree vs torus vs dragonfly

El cableado físico de la red importa tanto como la velocidad del enlace.

Fat-tree (el default de cluster de GPU)

Un fat-tree tiene switches dispuestos en niveles (leaf, spine, super-spine) de modo que el bandwidth de bisección crece con el tamaño del cluster — nunca tienes un cuello de botella para tráfico any-to-any.

  • Pros: bandwidth any-to-any; se puede construir incrementalmente.
  • Contras: necesita muchos switches (coste); tiradas largas de cable a gran escala.
  • Lo que envían los SuperPODs de NVIDIA. El diseño de referencia.

3D-torus (Google TPU Pod)

Los TPU Pods usan una topología 3D-torus: cada chip está conectado a 6 vecinos (uno por dirección de eje).

  • Pros: muy alto bandwidth por dólar; genial para AllReduce (el algoritmo se descompone naturalmente sobre un torus).
  • Contras: el bandwidth any-to-any no es uniforme — los patrones que mapean bien al torus son rápidos; el all-to-all arbitrario es lento.
  • Lo que Google envía para TPUs. v4/v5 usan switches de circuito óptico para reconfigurar el torus por trabajo. [fuente: Jouppi et al. 2023, TPU v4: An Optically Reconfigurable Supercomputer]

Dragonfly+ (labs de HPC, Frontier)

Jerárquico: grupos de nodos completamente conectados dentro del grupo, conectados de forma esparsa entre grupos. Usado en sistemas HPC exascale.

Para clusters de ML, fat-tree domina; el torus es específico de TPU; dragonfly es raro en IA comercial.

Primitivas colectivas

Las tres que debes conocer al dedillo:

AllReduce

Combina valores de todos los \(N\) ranks vía una reducción (normalmente suma) y da el resultado a todos los ranks. Usado para promediar gradientes entre réplicas paralelas en datos. El colectivo más importante en ML.

AllGather

Cada rank contribuye un tensor; cada rank acaba con la concatenación de todas las contribuciones. Usado en FSDP (pesos shardeados → reúne la capa completa antes del forward).

ReduceScatter

Cada rank contribuye un tensor; la suma se divide entre ranks (cada rank acaba con un shard de la suma). Usado en FSDP backward + ZeRO Stage 3.

Identidad: AllReduce = ReduceScatter + AllGather. Esta descomposición es la razón por la que ring-AllReduce es óptimo en bandwidth.

Algoritmos de AllReduce — la trinidad sagrada

Ring AllReduce

Dispón los \(N\) ranks en un anillo. Los datos \(D\) se dividen en \(N\) trozos. En \(2(N-1)\) pasos, cada rank envía un trozo y recibe un trozo por paso.

Coste de bandwidth por rank:

\[ B_{\text{ring}} = \frac{2(N-1)}{N} \cdot D \]

Tiempo en una red homogénea de bandwidth \(\beta\):

\[ T_{\text{ring}} = \frac{2(N-1)}{N} \cdot \frac{D}{\beta} \]
  • Óptimo en bandwidth: el factor \(\frac{2(N-1)}{N}\) es la cota inferior teórica para AllReduce.
  • Subóptimo en latencia: \(2(N-1)\) pasos significa latencia \(O(N)\). Malo para mensajes pequeños.

Tree AllReduce (o Recursive-Doubling)

Reduce subiendo por un árbol binario hasta una raíz, luego difunde hacia abajo. \(2 \log_2 N\) pasos. Cada paso envía los datos completos \(D\).

Coste de bandwidth por rank: \(2 \log_2 N \cdot D / N\)peor que ring para \(D\) grande. Pero solo \(2 \log_2 N\) saltos de red — mucho mejor latencia para \(D\) pequeño.

Algoritmo de Rabenseifner (híbrido)

ReduceScatter vía recursive halving + AllGather vía recursive doubling. Óptimo en bandwidth y con latencia \(O(\log N)\). Usado en implementaciones MPI para mensajes medianos-grandes.

La elección de NCCL

NCCL de NVIDIA (la implementación de AllReduce de facto en clusters de GPU) elige ring para mensajes grandes, tree para los pequeños, y usa variantes conscientes de la topología (double-binary-tree, ring-2D) para fabrics intra-nodo-vs-inter-nodo. Normalmente no eliges el algoritmo; NCCL hace autotune.

[fuente: documentación de NVIDIA NCCL 2024; Rabenseifner R. 2004, Optimization of Collective Reduction Operations, ICCS]

Matemática de bandwidth: nodo de 8 GPUs y cluster de 1024 GPUs

AllReduce intra-nodo (8× H100, NVSwitch)

  • \(N = 8\), \(\beta = 900\) GB/s, \(D = 1\) GB.
  • \(T = \frac{2 \cdot 7}{8} \cdot \frac{1\,\text{GB}}{900\,\text{GB/s}} = 1{,}75 \cdot \frac{1}{900}\,\text{s} \approx 1{,}94 \text{ ms}.\)

Esto se vuelve un AllReduce jerárquico: ring intra-nodo sobre NVLink, ring inter-nodo sobre InfiniBand. El bandwidth efectivo es el enlace más lento del camino. Asume 400 Gb/s = 50 GB/s por nodo (NDR IB single-port).

  • 16 GPUs en total, pero solo 2 enlaces IB cruzan la frontera inter-nodo.
  • Fase inter-nodo: \(\frac{2 \cdot 1}{2} \cdot \frac{1\,\text{GB}}{50\,\text{GB/s}} = 20\) ms.
  • Fase intra-nodo: despreciable (~2 ms).
  • Total: ~22 ms para 1 GB AllReduce — dominado por InfiniBand.

Cluster de 1024 GPUs (128 nodos × 8 GPUs cada uno, 400 Gb/s IB)

  • Jerárquico: cada nodo reduce internamente (barato), luego 128 nodos hacen un AllReduce inter-nodo del gradiente reducido.
  • Bandwidth inter-nodo por nodo: 50 GB/s.
  • Ring en 128 nodos: \(\frac{2 \cdot 127}{128} \cdot \frac{D}{50\,\text{GB/s}} \approx 1{,}98 \cdot \frac{D}{50\,\text{GB/s}}\).
  • Para \(D = 1\) GB: ~40 ms.

Un modelo de 70B parámetros en BF16 tiene 140 GB de gradientes. AllReduce-ando 140 GB → ~5.5 s por paso en esta red — por eso el gradient bucketing (solapar comunicación con cómputo) es obligatorio a esta escala.

Por qué la matemática de bandwidth es oro en entrevistas

Pregunta "¿hasta dónde puedes escalar en 1024 H100s antes de que el AllReduce se coma tu step time?" — deberías pensar:

  1. Tiempo de cómputo por paso ≈ \(T_{\text{compute}} = \text{FLOPs/step} / (1024 \cdot 1\,\text{PF} \cdot \text{MFU})\).
  2. Tiempo de AllReduce ≈ \(T_{\text{AR}} = \frac{2(N-1)}{N} \cdot D_{\text{grad}} / \beta_{\text{net}}\), escalado por el factor de solapamiento.
  3. Si \(T_{\text{AR}} / T_{\text{compute}} > 0{,}2\) tienes un problema. Soluciones: microbatch mayor (más cómputo por paso), gradient sharding (FSDP), compresión de gradientes, red más rápida.

Enlaces cruzados

Referencias

  • NVIDIA NCCL Developer Guide, 2024.
  • Rabenseifner R. 2004, Optimization of Collective Reduction Operations, ICCS.
  • Patarasuk P. y Yuan X. 2009, Bandwidth-Optimal AllReduce Algorithms for Clusters of Workstations, JPDC.
  • NVIDIA DGX H100 Architecture, 2023.
  • Jouppi et al. 2023, TPU v4: An Optically Reconfigurable Supercomputer for Machine Learning, ISCA.
  • Sergeev A. y Del Balso M. 2018, Horovod: fast and easy distributed deep learning in TensorFlow — popularización de ring-AllReduce.