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:
- Intra-servidor (scale-up): GPU ↔ GPU dentro de un único chasis. NVLink + NVSwitch en NVIDIA; Infinity Fabric en AMD; ICI en TPU.
- 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.
- 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.
NVLink vs PCIe — nunca los confundas¶
| 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:
Tiempo en una red homogénea de bandwidth \(\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}.\)
Inter-nodo, 2 nodos × 8 GPUs (16 H100, NVLink + InfiniBand)¶
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:
- Tiempo de cómputo por paso ≈ \(T_{\text{compute}} = \text{FLOPs/step} / (1024 \cdot 1\,\text{PF} \cdot \text{MFU})\).
- Tiempo de AllReduce ≈ \(T_{\text{AR}} = \frac{2(N-1)}{N} \cdot D_{\text{grad}} / \beta_{\text{net}}\), escalado por el factor de solapamiento.
- 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¶
02-h100-and-h200.md: NVLink 4 en el lado del chip.- Fase 35 — Entrenamiento distribuido: donde realmente usas estos colectivos.
lab/01-collective-comm-microbenchmark.md: mídelo en hardware real.
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.