Skip to content

English · Español

Lab 01 — Microbenchmark de comunicación colectiva

🇪🇸 Mide AllReduce real en 2 nodos × 8 GPUs. Compáralo con la teoría del §03. La brecha es la historia.

Objetivo

Corre nccl-tests en un alquiler de 2 nodos, 8 GPUs por nodo. Mide el bandwidth de AllReduce para tamaños de mensaje de 1 MB, 100 MB y 1 GB. Compáralo con los techos teóricos de NVLink + InfiniBand. Explica la brecha.

Aquí es donde la matemática de bandwidth del §03 se encuentra con un reloj de pared.

Prerrequisitos

  • Teoría §03 leída.
  • Cuenta en la nube capaz de aprovisionar instancias multi-nodo, con RDMA GPU-a-GPU habilitado. Un solo nodo de 8 GPUs no es suficiente — necesitamos cruzar la frontera InfiniBand.
  • Un presupuesto de ~$15-20 para una corrida de 1 hora.

Target de hardware

Proveedor SKU Spec Coste por hora Total
RunPod "2× H100 SXM 8-pack (Secure Cloud)" 2 nodos × 8× H100 SXM5, NVLink intra + InfiniBand inter ~\(3.50/h por H100 × 16 ≈ ~\)56/h ~$15 por 15 min
Lambda Cloud "8× H100 SXM5" cluster reservado + multi-nodo similar ~\(2.50/h por H100 × 16 ≈ ~\)40/h ~$10 por 15 min
CoreWeave par "HGX H100 ×8" con NDR IB 2 nodos × 8× H100, NDR 400 Gb/s IB a cotizar ~$15-20 / hora

Nota: no todo alquiler "multi-GPU" tiene RDMA real entre nodos. Busca SKUs que anuncien explícitamente NDR InfiniBand o 400 Gb/s RoCE entre nodos. Si el enlace inter-nodo es "Ethernet compartido", tus números de AllReduce serán 10× más lentos y habrás medido la cosa equivocada.

Alternativa A100 (más barata, lecciones similares de topología):

  • RunPod 2 nodos × 8× A100 SXM4 con HDR IB (200 Gb/s). ~\(1.80/h × 16 ≈ ~\)30/h. Total para corrida de 30 min: ~$15.

Setup

# 1. On each node, install nccl-tests.
git clone https://github.com/NVIDIA/nccl-tests
cd nccl-tests
make MPI=1 MPI_HOME=/usr/local/mpi CUDA_HOME=/usr/local/cuda

# 2. Verify NCCL sees the right interconnect.
export NCCL_DEBUG=INFO
export NCCL_DEBUG_SUBSYS=INIT,NET

# 3. Verify InfiniBand is up.
ibstatus    # Expect "LinkUp" on at least one mlx5_*.
ibv_devinfo # Expect NDR (400 Gb/s) or HDR (200 Gb/s) per port.

Corre el benchmark

# Single-node, 8 GPU intra-node AllReduce (sanity check)
./build/all_reduce_perf -b 1M -e 1G -f 2 -g 8

# Two-node, 16 GPU AllReduce
mpirun -np 16 \
       --hostfile hostfile \
       -x NCCL_DEBUG=INFO \
       -x NCCL_IB_DISABLE=0 \
       -x NCCL_NET_GDR_LEVEL=2 \
       ./build/all_reduce_perf -b 1M -e 1G -f 2 -g 1

Donde hostfile es:

node1 slots=8
node2 slots=8

El flag -f 2 escala los tamaños de mensaje por 2× desde -b hasta -e.

Qué registras

Para cada tamaño de mensaje, nccl-tests reporta:

  • time (us): tiempo de reloj de pared mediano por AllReduce.
  • algbw (GB/s): bandwidth algorítmico = \(D / t\) (tamaño de datos / tiempo, por rank).
  • busbw (GB/s): bandwidth del bus = \(\text{algbw} \cdot \frac{2(N-1)}{N}\) — tiene en cuenta el factor \(2(N-1)/N\) en ring AllReduce, así que debería acercarse al bandwidth del enlace.

busbw es el número a comparar contra el pico teórico de NVLink / InfiniBand.

Tamaño de mensaje Tiempo esperado algbw esperado busbw esperado Notas
1 MB ~50-100 µs ~10-20 GB/s ~9-18 GB/s Limitado por latencia; algoritmo tree; los saltos de switch dominan
100 MB ~3-5 ms ~25-35 GB/s ~23-33 GB/s Región de cruce
1 GB ~25-40 ms ~25-40 GB/s ~23-37 GB/s Limitado por bandwidth; el IB inter-nodo es el techo

[fuente: números publicados de benchmark NCCL en setups de 2 nodos de clase DGX; notas de release de NCCL 2023-2024]

Comprobación de sanidad vs teoría

NDR IB inter-nodo es 400 Gb/s = 50 GB/s unidireccional por puerto. Con IB single-port por nodo y ring AllReduce en \(N = 16\):

\[ T_{\text{theoretical}} = \frac{2(N-1)}{N} \cdot \frac{D}{\beta_{\text{IB}}} = \frac{30}{16} \cdot \frac{1\,\text{GB}}{50\,\text{GB/s}} = 37{,}5 \text{ ms}. \]

Así que busbw debe acercarse a 50 GB/s según \(D\) crece. Si mides ~30-40 GB/s en el AllReduce de 1 GB, eso es el 60-80% del teórico — típico del mundo real. La brecha es:

  • Overhead del protocolo (cabeceras NCCL, ACKs).
  • Overhead de memcopy de GPU a NIC (mitigado por GPUDirect RDMA, gobernado por NCCL_NET_GDR_LEVEL).
  • Contención del buffer del switch IB.

Intra-nodo (nodo único, solo 8× H100)

Para el AllReduce intra-nodo de 8 GPUs sobre NVLink/NVSwitch, el bandwidth del enlace es 900 GB/s. Teoría para AllReduce de 1 GB en N=8:

\[ T = \frac{14}{8} \cdot \frac{1\,\text{GB}}{900\,\text{GB/s}} \approx 1{,}94 \text{ ms}. \]

Deberías medir ~2.5-3 ms (75-85% del teórico). busbw debe acercarse a 700-800 GB/s.

La enorme brecha entre intra-nodo (700+ GB/s) e inter-nodo (~40 GB/s) es el punto entero de este lab.

Prompt de explicación de la brecha

Escribe un informe de 1 página respondiendo:

  1. ¿Dónde está el precipicio? Traza busbw vs tamaño de mensaje. La curva intra-nodo debe estabilizarse cerca de 700 GB/s; la curva inter-nodo debe estabilizarse cerca de 40 GB/s. Identifica el tamaño de mensaje de cruce.
  2. ¿Por qué el inter-nodo es ~20× más lento que el intra-nodo? Enmárcalo en términos de: bandwidth NVLink por GPU (900 GB/s) vs bandwidth IB por nodo (50 GB/s) dividido entre 8 GPUs (6.25 GB/s/GPU). El factor es ~140× a nivel de cable; la planificación jerárquica de NCCL lo reduce al ~20× observado.
  3. ¿Qué doblaría tu bandwidth inter-nodo? IB dual-port (800 Gb/s por nodo), o dos NICs por nodo. Algunas SKUs de H100 envían con hasta 8× NIC/nodo — usadas a escala SuperPOD.
  4. ¿Qué significa esto para el entrenamiento distribuido? La sincronización de gradiente de un modelo de 70B (~140 GB de gradientes) tarda ~5 s en esta red. El paso de cómputo a 200 ms significa que estamos 25× por encima del presupuesto para AllReduce a menos que solapemos.

Entregables

  • experiments/x4-collectives/manifest.json — versiones, seeds, detalles de SKU, variables de entorno de NCCL.
  • experiments/x4-collectives/nccl_log.txt — salida completa de debug de NCCL (prueba que la topología fue detectada).
  • experiments/x4-collectives/results.csv — message_size, time, algbw, busbw, theoretical_busbw, fraction.
  • experiments/x4-collectives/REPORT.md — la página de explicación de la brecha.

Definition of Done

  • nccl-tests corrió con NCCL_DEBUG=INFO mostrando la topología correcta (NVLink intra, IB inter).
  • Los tres tamaños de mensaje medidos para las configuraciones solo-intra-nodo e inter-nodo.
  • busbw en 1 GB está dentro del 60-90% del teórico para ambas configuraciones.
  • El informe explica la brecha intra-vs-inter con números concretos.

Enlaces cruzados

Referencias

  • NVIDIA NCCL Developer Guide, 2024.
  • Repositorio NVIDIA NCCL Tests (github.com/NVIDIA/nccl-tests).
  • Patarasuk P. y Yuan X. 2009, Bandwidth-Optimal AllReduce Algorithms, JPDC.
  • NVIDIA DGX H100 Architecture, 2023.
  • Especificaciones NDR InfiniBand (Mellanox / NVIDIA Networking).