All-reduce (anillo y árbol)
Leerlo en el Capítulo 5 · checkpoint +50 XP →
Suma un buffer entre todos los rangos y entrega el resultado a todos. La colectiva de la que vive el entrenamiento con paralelismo de datos.
El all-reduce en anillo ordena n rangos en un anillo y ejecuta dos fases (reduce-scatter y luego all-gather) de n−1 pasos cada una. Cada rango envía y recibe ~2(n−1)/n × el tamaño del buffer:
T_anillo ≈ 2(n−1)/n · S/B + 2(n−1) · α
donde S son los bytes, B el ancho de banda por enlace y α la latencia por paso. El término de ancho de banda casi no crece con n. El de latencia sí, y eso castiga a los mensajes pequeños a gran escala.
Los algoritmos de árbol (el doble árbol binario de NCCL) reducen el término de latencia a ~log₂(n) pasos y ganan con mensajes pequeños y muchísimos rangos.
El bus bandwidth, el número que reporta nccl-tests, elimina el factor 2(n−1)/n para que puedas compararlo directamente con la velocidad del enlace. Un nodo NVLink sano muestra cientos de GB/s. Uno con un enlace degradado muestra cifras de PCIe.
Usa el widget para ver cómo se relacionan el tamaño, el número de rangos y el ancho de banda.
Úsalo en una misión
Relacionado
Fuentes y lecturas adicionales
- Distributed Training (T. Tsugriy) — parallelism strategies, collectives, memory
- NCCL User Guide
Escrito para LazyLab con nuestras propias palabras; las fuentes se citan para profundizar y verificar.