Zubnet AIAprenderWiki › Entrenamiento distribuido
Infraestructura

Entrenamiento distribuido

También conocido como: Paralelismo de datos, Paralelismo de modelo, FSDP
Entrenar un modelo a través de múltiples GPUs o máquinas simultáneamente. El paralelismo de datos da a cada GPU una copia del modelo y divide los datos de entrenamiento. El paralelismo de modelo divide el modelo mismo entre GPUs cuando es demasiado grande para una sola. Los enfoques modernos como FSDP (Fully Sharded Data Parallel) y DeepSpeed combinan ambos, permitiendo el entrenamiento de modelos con cientos de miles de millones de parámetros.

Por qué importa

Ningún modelo de frontera cabe en una sola GPU. Entrenar GPT-4 o Claude requiere miles de GPUs trabajando juntas durante meses. El entrenamiento distribuido es la ingeniería que hace esto posible — es tan crítico como la arquitectura o los datos. La eficiencia de tu entrenamiento distribuido determina directamente cuánto modelo puedes entrenar para un presupuesto dado.

En profundidad

Paralelismo de datos (DP): cada GPU tiene una copia completa del modelo, procesa un mini-batch diferente y los gradientes se promedian entre GPUs. Simple y eficiente para modelos que caben en una GPU. Paralelismo de tensores (TP): las capas individuales se dividen entre GPUs, con cada GPU calculando parte de cada multiplicación de matrices. Necesario cuando los pesos de una sola capa no caben en una GPU. Paralelismo de pipeline (PP): diferentes capas se ejecutan en diferentes GPUs, con micro-batches fluyendo a través del pipeline.

FSDP y DeepSpeed

Fully Sharded Data Parallel (FSDP, de PyTorch) y DeepSpeed ZeRO (de Microsoft) fragmentan los parámetros del modelo, gradientes y estados del optimizador entre GPUs. Cada GPU solo almacena una fracción del modelo, y los parámetros se reúnen bajo demanda para el cálculo, luego se liberan. Esto permite entrenar modelos mucho más grandes que la memoria de una sola GPU. DeepSpeed ZeRO tiene tres etapas: la Etapa 1 fragmenta los estados del optimizador, la Etapa 2 agrega los gradientes, la Etapa 3 agrega los parámetros.

El cuello de botella de comunicación

El desafío fundamental del entrenamiento distribuido es la comunicación: las GPUs deben sincronizar gradientes (en paralelismo de datos) o intercambiar activaciones (en paralelismo de modelo/pipeline). Esta comunicación ocurre a través de NVLink (dentro de un nodo, 900 GB/s) o InfiniBand (entre nodos, 400 Gb/s). La eficiencia del entrenamiento cae cuando las GPUs pasan más tiempo esperando la comunicación que calculando. Las configuraciones óptimas minimizan la comunicación entre nodos manteniendo las operaciones estrechamente acopladas (como el paralelismo de tensores) dentro de un nodo y las operaciones poco acopladas (como el paralelismo de datos) entre nodos.

Conceptos relacionados

ESC