Skip to content
ND-Parallel Acelerado: Guía para Entrenamiento Eficiente en Múltiples GPU
Source: huggingface.co

ND-Parallel Acelerado: Guía para Entrenamiento Eficiente en Múltiples GPU

Sources: https://huggingface.co/blog/accelerate-nd-parallel, Hugging Face Blog

Visión general

Entrenar modelos extremadamente grandes en múltiples GPU requiere más que simplemente permitir que los datos pasen por una sola tarjeta. Accelerate, junto con Axolotl, ofrece una forma rápida e integrada de componer varias estrategias de paralelismo en tu script de entrenamiento. El objetivo es minimizar la sobrecarga de comunicación y, al mismo tiempo, maximizar el rendimiento de datos y la eficiencia de memoria a medida que los modelos llegan a decenas o cientos de miles de millones de parámetros. El enfoque ND-Parallel mezcla paralelismo de datos, particionamiento de memoria y estrategias de paralelismo de modelo en un flujo configurable. En este marco, el Paralelismo de Datos (DP) es la capa superior: el modelo, los gradientes y los estados del optimizador se replican entre dispositivos y los datos se distribuyen entre ellos. Si el modelo es demasiado grande para caber en una sola tarjeta, el Fully Sharded Data Parallel (FSDP) reparte pesos, gradientes y estados del optimizador entre GPUs, intercambiando memoria por comunicación. Tensor Parallel (TP) distribuye la computación de capas lineales entre dispositivos, mientras Context Parallel (CP) reparte las secuencias para mitigar el crecimiento de memoria de la atención. La plataforma también permite combinar estas estrategias entre nodos, creando un tamaño de mundo (world size) que crece con el número de dispositivos en el clúster. La configuración de Axolotl refleja ParallelismConfig de Accelerate, permitiendo definir el grado de cada estrategia y cómo se combinan. A medida que los modelos escalan a secuencias muy largas o a miles de millones de parámetros, los patrones de comunicación y la disposición de memoria se vuelven cuellos de botella dominantes. ND-Parallel ayuda a los usuarios a razonar sobre estos compromisos y a seleccionar configuraciones que minimicen la comunicación entre dispositivos al tiempo que mantienen el rendimiento de entrenamiento. El artículo explora el comportamiento de DP, FSDP, TP y CP, cómo interactúan y cuándo combinarlos para obtener un rendimiento práctico. También encontrarás cómo se reúnen y reducen los fragmentos del modelo, cómo los dispositivos en diferentes nodos participan en operaciones de all-reduce y reduce-scatter, y cómo el tamaño del world size influye en la escalabilidad. El script de entrenamiento de extremo a extremo en Accelerate muestra cómo configurar el dataloader, el optimizador y el bucle de entrenamiento, y guardar el modelo entrenado. La capacidad ND-Parallel se integra con Axolotl para facilitar el ajuste fino a gran escala, haciendo sencillo añadir una o más estrategias de paralelismo a tus configuraciones existentes.

Características clave

  • Permite componer varias estrategias de paralelismo (DP, FSDP, TP, CP) en un solo script de entrenamiento mediante Accelerate y Axolotl.
  • Controla el grado de cada estrategia usando ParallelismConfig en Accelerate o mediante campos de configuración en Axolotl (p. ej., dp_replicate_size, tp_size, dp_shard_size).
  • Paralelismo de Datos (DP) en la capa superior: el modelo, los gradientes y los estados del optimizador se replican entre dispositivos y los datos se reparten entre ellos; admite configuraciones entre nodos.
  • Fully Sharded Data Parallel (FSDP) reparte pesos, gradientes y estados del optimizador para modelos grandes, intercambiando memoria por comunicación; la granularidad de agrupamiento afecta el trade-off memoria–comunicación.
  • Tensor Parallel (TP) distribuye el cómputo de capas lineales entre dispositivos para una partición estática de memoria; óptimo dentro de un único nodo debido a la mayor comunicación.
  • Context Parallel (CP) reparte las secuencias para reducir la memoria necesaria para la atención en contextos muy largos.
  • Escalabilidad entre nodos con backends de comunicación intra- y inter-nodo para entrenamiento distribuido, aprovechando enlaces rápidos intra-nodo (ej., NVLink) y redes entre nodos más lentas (ej., Infiniband).
  • Ejemplo de extremo a extremo en Accelerate que demuestra la configuración de dataloader, optimizador y bucle de entrenamiento, además de guardar el modelo entrenado; integración con Axolotl para afinado a gran escala.
  • Consideraciones sobre trade-offs memoria–computación, incluyendo opciones de offload, para entrenar modelos más grandes dentro de límites de hardware.

Casos de uso comunes

  • Afinar o entrenar modelos con decenas a cientos de miles de millones de parámetros en múltiples GPU.
  • Escenarios que requieren longitudes de contexto muy grandes (ajuste fino de secuencias largas) donde la memoria de atención es dominante.
  • Usuarios que buscan minimizar la comunicación entre dispositivos al combinar DP con FSDP, TP y CP.
  • Configuraciones de clúster multi-nodo disponibles, cuando una solución puramente de un solo nodo no cabe el modelo en memoria.
  • Situaciones en las que la colaboración entre Accelerate y Axolotl simplifica añadir varias estrategias de paralelismo a configuraciones existentes.

Setup & instalación

El artículo hace referencia a configurar y usar Accelerate junto con Axolotl, incluyendo un script de entrenamiento de extremo a extremo en el repositorio de Accelerate. Menciona la clase ParallelismConfig de Accelerate y los campos de configuración correspondientes en Axolotl para activar ND-Parallel, pero no proporciona comandos exactos en el extracto proporcionado.

Nota: Los comandos exactos de instalación y configuración no están presentes en el extracto. Consulte el repositorio de Accelerate y la documentación de Axolotl para obtener comandos y archivos de configuración concretos.

# Setup & instalación no proporcionados en el extracto fuente.

Inicio rápido

El texto apunta a un ejemplo mínimo ejecutable en el repositorio de Accelerate que muestra:

  • cómo configurar un DataLoader, un optimizador y un bucle de entrenamiento,
  • aplicar una o más estrategias ND-Parallel mediante ParallelismConfig (dp_replicate_size, tp_size, dp_shard_size),
  • y guardar el modelo entrenado.

El código de inicio rápido no está incluido en el extracto. Un ejemplo mínimo se puede encontrar en el repositorio de Accelerate, junto con las configuraciones ND-Parallel y la integración con Axolotl.

# Inicio rápido no proporcionado en el extracto de la fuente.

Pros y contras

  • Pros
  • Permite entrenar modelos grandes combinando paralelismo de datos, particionamiento de memoria y estrategias de paralelismo de modelo.
  • Reduce el uso máximo de memoria frente a una réplica DP completa gracias a FSDP y CP.
  • Puede escalar entre nodos, aprovechando comunicaciones intra-nodo rápidas y redes inter-nodo.
  • Configuración flexible vía ParallelismConfig y Axolotl para ajustar trade-offs de memoria y cómputo según el caso de uso.
  • Contras
  • La configuración se vuelve compleja a medida que aumentan las estrategias y sus interacciones.
  • FSDP entre nodos puede generar overhead de comunicación significativo; hay recomendaciones para evitar FSDP en toda la extensión de un nodo en algunos escenarios.
  • TP es más efectivo dentro de un único nodo y puede introducir costos de sincronización; su uso multi-nodo requiere combinarlo con otras estrategias.
  • CP añade particionamiento adicional y puede requerir manejo específico para secuencias muy largas.

Alternativas (comparación breve)

| Enfoque | Notas | Enfoque típico de uso |---|---|---| | ND-Parallel (Accelerate + Axolotl) | Combina DP, FSDP, TP, CP en una única configuración; ejemplos en Accelerate | Entrenamiento a gran escala con múltiples estrategias en un solo pipeline |DeepSpeed ZeRO-3 | Ahorro de memoria con ZeRO-3; escalado fuerte en un solo nodo y en multi-GPU | Modelos muy grandes con optimización de memoria ZeRO |DP en un solo nodo | Paralelismo de datos sencillo en un único nodo | Modelos que caben en la memoria de un solo nodo pero requieren mayor rendimiento |

Licencia

La información de licencia no está explícitamente proporcionada en el contenido de origen.

Referencias

More resources