Phase 10 - Lesson 19

Paralelismo DualPipe

DeepSeek-V3 se entrenó en 2,048 GPUs H800 con expertos de MoE distribuidos entre nodos. La comunicación all-to-all de expertos entre nodos costaba 1 hora-GPU de comunicación por cada 1 hora-GPU de cómputo. Las GPUs estaban inactivas la mitad del tiempo. DualPipe (DeepSeek, dic. de 2024) es un pipeline bidireccional que superpone la computación forward y backward con las comunicaciones all-to-all que estas activan. Las burbujas disminuyen, el throughput aumenta y mantener dos copias de los parámetros del modelo (el "dual" que le da nombre) es barato cuando el Paralelismo de Expertos (Expert Parallelism) ya está distribuyendo a los expertos entre los ranks de todos modos. Esta lección es un recorrido de tipo Learn sobre lo que hace realmente DualPipe y por qué el refinamiento DualPipeV de Sea AI Lab elimina el costo de 2x parámetros a expensas de una burbuja ligeramente mayor.

Tipo: Learn Idiomas: Python (stdlib, simulador de planificación) Prerrequisitos: Phase 10 · 05 (entrenamiento distribuido, FSDP, DeepSpeed), Phase 10 · 14 (arquitecturas de modelos abiertos y MoE) Tiempo: ~60 minutos

Objetivos de Aprendizaje

  • Nombrar los cuatro componentes de un chunk forward-backward de DualPipe y por que cada uno obtiene su propia ventana de superposición.
  • Explicar el problema de la burbuja de pipeline a escala y lo que significa "libre de burbujas" en la práctica frente al marketing.
  • Rastrear manualmente una planificación de DualPipe para 8 ranks de PP y 16 micro-batches y confirmar que los flujos forward y reverso llenan los espacios inactivos de los demás.
  • Explicar la compensación (tradeoff) que hace DualPipeV (Sea AI Lab, 2025): elimina la duplicación de parámetros de 2x a expensas de una burbuja ligeramente mayor cuando el Paralelismo de Expertos está inactivo.

El Problema

El entrenamiento de un modelo MoE de 671B en 2k GPUs H800 se enfrenta a tres cuellos de botella acumulativos:

  1. Presión de memoria. Cada GPU contiene una fracción del modelo. La memoria de activación con una longitud de secuencia de 8k a lo largo de 61 capas en 128 heads es enorme.
  2. Burbujas de pipeline. El paralelismo de pipeline tradicional (GPipe, 1F1B) deja a las GPUs inactivas mientras esperan la entrada o el gradiente de su etapa. Con 8 etapas, aproximadamente el 12% del tiempo de GPU puede perderse en burbujas, incluso con la planificación 1F1B.
  3. All-to-all entre nodos (cross-node). El MoE con paralelismo de expertos distribuye a los expertos entre nodos. Cada paso forward activa un all-to-all para enviar (dispatch) tokens a sus expertos, y otro para combinarlos (combine). Con 2k GPUs, esto se convierte fácilmente en una relación de 1:1 entre cómputo y comunicación.

Cada uno de estos problemas tiene soluciones independientes: gradient checkpointing para la memoria, Zero Bubble (Sea AI Lab, 2023) para las burbujas de pipeline y kernels de comunicación específicos de paralelismo de expertos para all-to-all. Lo que hace DualPipe es integrarlos para que funcionen en conjunto. La planificación superpone el cómputo y la comunicación dentro de un único chunk forward-backward, inyecta micro-batches desde ambos extremos del pipeline simultáneamente y utiliza la planificación resultante para ocultar el all-to-all dentro de las ventanas de cómputo.

Resultado reportado: casi eliminación de las burbujas de pipeline, con más de un 95% de utilización de GPU en la ejecución de entrenamiento de 14.8T de tokens de DeepSeek-V3.

El Concepto

Recapitulación del paralelismo de pipeline

Divida un modelo de N capas en P dispositivos. El dispositivo i contiene las capas i * N/P .. (i+1) * N/P - 1. Un micro-batch fluye en sentido forward a través de los dispositivos 0 a P-1, y luego en sentido backward desde P-1 a 0. Cada dispositivo solo puede iniciar su etapa forward cuando el dispositivo anterior envía su salida, y solo puede iniciar el backward cuando el dispositivo downstream envía el gradiente upstream.

GPipe (Huang et al., 2019) planifica un micro-batch a la vez, lo que desperdicia la mayor parte del tiempo de GPU. 1F1B (Narayanan et al., 2021) intercala pasos forward y backward para múltiples micro-batches. Zero Bubble (Qi et al., 2023) divide el paso backward en dos partes: backward para la entrada (B) y backward para los pesos (W), y las planifica para rellenar la burbuja. Después de Zero Bubble, el pipeline queda casi totalmente optimizado.

DualPipe es el siguiente paso. Añade dos ideas principales:

Idea 1: descomposición en chunks

Cada chunk forward se divide en cuatro componentes:

  • Attention. Proyecciones Q/K/V, atención, proyección de salida.
  • All-to-all dispatch. Comunicación entre nodos que envía tokens a sus expertos.
  • MLP. El cómputo de los expertos de MoE.
  • All-to-all combine. Comunicación entre nodos que recupera las salidas de los expertos.

Un chunk backward añade las versiones de gradiente de cada uno de estos componentes. DualPipe los planifica de manera que el all-to-all dispatch ocurren en paralelo con el cómputo de atención (attention compute) del siguiente chunk, y el all-to-all combine ocurra en paralelo con el cómputo del MLP (MLP compute) del chunk posterior.

Idea 2: planificación bidireccional

La mayoría de las planificaciones de pipeline inyectan micro-batches desde la etapa 0 y fluyen hacia la etapa P-1. DualPipe inyecta micro-batches desde AMBOS extremos. La etapa 0 ve micro-batches forward que se originan allí; la etapa P-1 también ve micro-batches forward que se originan allí. Los dos flujos se encuentran en el medio.

Para que esto funcione, el dispositivo i debe contener TANTO la capa inicial del pipeline i COMO la capa final del pipeline P - 1 - i. Esa es la parte "dual" de DualPipe: cada dispositivo mantiene dos copias de las capas del modelo que necesita procesar (una para cada dirección). A la escala de DeepSeek-V3, esto genera un costo de duplicación de parámetros de 2x. Esto es viable porque el Paralelismo de Expertos ya distribuye los expertos de MoE de manera tan dispersa que duplicar las capas que no son de expertos es un costo insignificante.

Crucialmente, el flujo forward en una dirección y el flujo backward en la otra dirección se superponen exactamente donde estarían las burbujas en una planificación unidirecional. Las burbujas desaparecen.

Rastreo manual de la planificación

Considere P = 4 ranks, 8 micro-batches, divididos en 4 forward / 4 reversos. El tiempo se mueve de izquierda a derecha; las filas representan los ranks de los dispositivos.

           Time →
rank 0:  F1 F2 F3 F4  F5R F6R F7R F8R  B1 B2 B3 B4  ...
rank 1:     F1 F2 F3  F4/F5R F6R F7R   B1 B2 ...
rank 2:        F1 F2  F3/F5R F4/F6R    B1 ...
rank 3:           F1  F2/F5R F3/F6R    ...

Leyendo la notación "F4/F5R": el rank 1 está ejecutando el forward del micro-batch 4 (yendo de izquierda a derecha en el pipeline) Y el forward del micro-batch 5 (yendo de derecha a izquierda) en el mismo intervalo de tiempo. Esto es lo que significa "bidireccional" operacionalmente.

En el rank 2, los flujos cruzados se superponen antes; en los ranks 0 y P-1, la superposición ocurre al final. En la fase intermedia estable de la planificación, cada rank ejecuta el forward de la dirección X superpuesto al backward de la dirección Y. El cómputo está ocupado. Los envíos all-to-all (all-to-all dispatches) para el paso forward quedan ocultos dentro del cómputo backward. Las combinaciones all-to-all (all-to-all combines) quedan ocultas dentro del cómputo forward. Las burbujas se eliminan.

Contabilidad de burbujas

Burbuja de pipeline estándar en 1F1B (tiempo desperdiciado por rank):

bubble_1F1B = (P - 1) * forward_chunk_time

El refinamiento Zero Bubble reduce este valor, pero no a cero. DualPipe, en la fase estable, tiene burbuja cero si la cantidad de micro-batches es divisible por 2 veces la profundidad del pipeline. Fuera de la fase estable (warmup y cooldown), existe cierta burbuja, pero no crece con el número de micro-batches, una propiedad clave que destaca el artículo.

En términos de marketing: "libre de burbujas" (bubble-free). En términos técnicos: las burbujas no crecen con la cantidad de micro-batches. El análisis posterior de Sea AI Lab (DualPipeV / Cut-in-half) muestra la ausencia total de burbujas (zero-bubble) solo cuando el Paralelismo de Expertos no es el cuello de botella; con all-to-all impulsado por EP, siempre existe cierto compromiso en la planificación.

DualPipeV — el refinamiento

Sea AI Lab (2025) observó que la duplicación de parámetros de 2x es innecesaria cuando la superposición de comunicación de EP no es el objetivo principal. Su planificación DualPipeV pliega la inyección bidirecional en un formato de "V" que se ejecuta en una sola copia de los parámetros. La burbuja es ligeramente mayor que la de DualPipe, pero el ahorro de memoria es sustancial. DeepSeek adoptó DualPipeV en su implementación de código abierto de DualPipe como un modo "EP-off" (sin EP).

La compensación (tradeoff):

Característica DualPipe DualPipeV 1F1B Zero Bubble
Copias de parámetros por dispositivo 2 1 1 1
Burbuja vs micro-batches constante pequeño crecimiento crece crece
Superposición cómputo-comunicación total parcial mínima parcial
Usar cuando MoE con mucho EP denso o poco EP línea de base cualquier pipeline

Lo que significa para una ejecución de 14.8T de tokens

El preentrenamiento de DeepSeek-V3 consumió 14.8T de tokens en 2,048 GPUs H800 en aproximadamente 2.8M de horas-GPU. Con el 1F1B básico, habrían perdido del 12% al 15% de eso en burbujas de pipeline: entre 340k y 420k horas-GPU, lo suficiente para entrenar un modelo completo de 70B. DualPipe recuperó la mayor parte de eso. Cuantificar directamente esta contribución es difícil sin los logs internos, pero la afirmación en el artículo es de más del 95% de utilización promedio de las GPUs durante el entrenamiento.

Para ejecuciones más pequeñas (menos de 1k GPUs), DualPipe es excesivo (overkill): las burbujas de pipeline son menores en relación con el costo total y el entrenamiento de modelos densos rara vez alcanza el cuello de botella de all-to-all. Para el entrenamiento de MoE de frontera en escala de miles de GPUs, es efectivamente obligatorio.

Dónde se ubica en el stack

  • Complementario a FSDP (Phase 10 · 05). FSDP fragmenta (shards) los parámetros del modelo entre los ranks; DualPipe planifica el cómputo entre los ranks. Se combinan.
  • Compatible con la fragmentación de gradientes de ZeRO-3. El control de estados (bookkeeping) para la duplicación de dos copias debe cooperar con los gradientes fragmentados de ZeRO.
  • Requiere kernels personalizados de all-to-all optimizados para la topología específica del cluster. Los kernels de código abierto de DeepSeek son la implementación de referencia.

Use It

El archivo code/main.py es un simulador de planificación de pipeline. Toma (P, n_micro_batches, schedule) e imprime la utilización de la fase estable para cada uno de los métodos: 1F1B, Zero Bubble, DualPipe y DualPipeV. Es una herramienta didáctica: los números coinciden con las afirmaciones cualitativas de los artículos, no representan una garantía de aceleración real medida en producción.

El valor del simulador: ejecútelo con diferentes valores de P y cantidades de micro-batches y observe cómo la fracción de burbuja crece para 1F1B, pero no para DualPipe.

Consideraciones de integración para una ejecución de entrenamiento real:

  • Elija una profundidad de paralelismo de pipeline que se divida limpiamente entre su cantidad de micro-batches.
  • Asegúrese de que su malla paralela de expertos (expert-parallel mesh) admita all-to-all bidirecional. Los kernels de DeepSeek son la referencia.
  • Espere dedicar una semana a depurar la planificación la primera vez. El control de estados (bookkeeping) es complejo.
  • Monitoree la utilización de GPU por rank, no solo la agregada. El beneficio de DualPipe proviene de optimizar los ranks más lentos (stragglers).

Ship It

Esta lección produce el archivo outputs/skill-dualpipe-planner.md. Dada una especificación de cluster de entrenamiento (cantidad de GPUs, topología, interconexión, estructura del modelo), recomienda una estrategia de paralelismo de pipeline, el algoritmo de planificación a utilizar y la fracción de burbuja esperada a la escala objetivo.

Ejercicios

  1. Ejecute code/main.py con (P=8, micro_batches=16, schedule=dualpipe) y (P=8, micro_batches=16, schedule=1f1b). Calcule la diferencia de utilización de GPU y exprésela como horas-GPU recuperadas por millón de tokens de entrenamiento.

  2. Dibuje a mano la tabla de planificación para (P=4, micro_batches=8, schedule=dualpipe). Marque cada intervalo de tiempo con el ID del micro-batch y la dirección. Identifique el primer intervalo de tiempo donde no haya burbujas.

  3. Lea la Figura 5 del informe técnico de DeepSeek-V3 (arXiv:2412.19437). Identifique la ventana de superposición para all-to-all dispatch dentro de un chunk forward de DualPipe. Explique cómo la planificación de cómputo la oculta.

  4. Calcule el overhead de 2x parámetros de DualPipe para un modelo denso de 70B con P=8 etapas de pipeline y un modelo MoE de 671B con P=16 etapas de pipeline. Muestre por que el overhead del caso de MoE es proporcionalmente menor (la mayoría de los parámetros son expertos, fragmentados en un gran grupo de EP).

  5. Compare DualPipe con Chimera (un planificador bidireccional de la competencia de 2021). Identifique las dos propiedades específicas que añadió DualPipe y que Chimera no tenía, utilizando la Sección 3.4 del artículo como referencia.

Términos Clave

Término Lo que la gente dice Lo que realmente significa
Burbuja de pipeline (Pipeline bubble) "Tiempo inactivo por rank" Ciclos de GPU desperdiçados porque una etapa del pipeline está esperando su entrada o gradiente
1F1B "Planificación predeterminada de pipeline" Planificación intercalada de un forward / un backward; la línea de base que supera DualPipe
Zero Bubble "Sea AI Lab 2023" Divide el backward en B (gradiente de entrada) y W (gradiente de peso); optimiza casi por completo el pipeline
DualPipe "Planificación de DeepSeek-V3" Pipeline bidireccional + superposición cómputo-comunicación; las burbujas no crecen con la cantidad de micro-batches
DualPipeV "Cut-in-half" Refinamiento en forma de V que elimina la duplicación de parámetros de 2x a expensas de burbujas ligeramente mayores
Chunk "Unidad de trabajo del pipeline" Un paso forward o backward de un micro-batch a través de una etapa del pipeline
All-to-all dispatch "Enviar tokens a los expertos" Comunicación entre nodos que enruta tokens a sus expertos de MoE asignados
All-to-all combine "Recuperar las salidas de los expertos" Comunicación entre nodos que reúne las salidas de los expertos después del MLP
Paralelismo de Expertos (EP) "Expertos en distintas GPUs" Distribuye (shards) los expertos de MoE entre ranks para que diferentes GPUs almacenen diferentes expertos
Paralelismo de Pipeline (PP) "Capas en distintas GPUs" Distribuye las capas del modelo entre ranks; la dimensión que planifica DualPipe
Fracción de burbuja "Tiempo de GPU desperdiciado" (tiempo_de_burbuja / tiempo_total); la fracción que DualPipe reduce casi a cero

Lecturas Adicionais

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).