Noticias en español
El último
IA y tecnología

Escalado de FlashAttention, entrenamiento multi-GPU y cuantización de pesos

Techo ilustrativo de instalaciones de edificio con bandejas de cables y tuberías, no un centro de datos.
Techo ilustrativo de instalaciones de edificio con bandejas de cables y tuberías, no un centro de datos.

La infraestructura moderna de IA se apoya en kernels de atención conscientes del hardware, paralelismo distribuido multi-GPU y cuantización de bajo número de bits para entrenar y servir modelos masivos de forma eficiente. Estas tres técnicas cierran la brecha entre la escala teórica de los modelos y los límites físicos de las GPU.

1. FlashAttention-2 y FlashAttention-3 en GPU Hopper (H100)

Aunque el FlashAttention original resolvió el cuello de botella del ancho de banda de memoria, aún dejaba sin usar una parte significativa del rendimiento de cómputo bruto en las GPU modernas. FlashAttention-2 (2023) y FlashAttention-3 (2024) rediseñaron la forma en que los hilos de la GPU y los motores de hardware se coordinan.

  • FlashAttention-2 (mejor particionamiento del trabajo).
  • Reducción de operaciones que no son matmul. Los Tensor Cores de la GPU ejecutan multiplicaciones de matrices (matmul) aproximadamente 16× más rápido que los núcleos CUDA estándar ejecutan operaciones escalares como el reescalado de Softmax. FlashAttention-2 reescribió las matemáticas del Softmax en línea para posponer el reescalado hasta el final del bucle interno, reduciendo las instrucciones lentas que no son matmul.
  • Paralelización sobre la longitud de la secuencia. La versión original paralelizaba el trabajo principalmente a lo largo del tamaño del lote y los cabezales de atención, dejando núcleos de la GPU inactivos al entrenar con secuencias largas y lotes pequeños. FlashAttention-2 añade paralelismo a lo largo de la dimensión de la longitud de la secuencia e invierte el orden de los bucles (bucle externo sobre los bloques Q, bucle interno sobre K y V), minimizando las escrituras lentas en memoria compartida.
  • FlashAttention-3 (explotación del hardware Hopper H100).
  • Movimiento asíncrono de datos (TMA). La arquitectura Hopper de NVIDIA introdujo el Tensor Memory Accelerator (TMA), una unidad de hardware dedicada que copia datos entre la HBM global y la SRAM en el chip sin ocupar los hilos de cómputo.
  • Especialización de warps (modelo productor-consumidor). FlashAttention-3 divide los warps de la GPU (grupos de 32 hilos) en roles dedicados. Los warps productores usan el TMA para precargar futuros tiles de K y V en la SRAM, mientras que los warps consumidores alimentan los tiles actuales a los Tensor Cores (instrucciones WGMMA). Esto solapa las transferencias de memoria con las matemáticas matriciales y los cálculos de Softmax simultáneamente.
  • Soporte de baja precisión FP8. FlashAttention-3 desbloquea los Tensor Cores FP8 de Hopper, duplicando el rendimiento bruto respecto a FP16. Para evitar la pérdida de precisión por activaciones atípicas en FP8, usa cuantización por bloques (escalando pequeños tiles de forma independiente) y procesamiento incoherente (multiplicando Q y K por matrices ortogonales aleatorias para suavizar los valores extremos antes de cuantizar).

2. Estrategias de escalado multi-GPU (paralelismo 3D)

Cuando un modelo tiene decenas o cientos de miles de millones de parámetros, sus pesos, gradientes y estados del optimizador exceden la VRAM de una sola GPU. El entrenamiento a gran escala combina tres estrategias de paralelización distintas, a menudo llamadas paralelismo 3D.

EstrategiaCómo divide el trabajoCuello de botella de comunicaciónMejor caso de uso
Paralelismo de datos (DP / FSDP)Replica el modelo entre las GPU; cada GPU procesa un lote de datos diferente.All-Reduce / All-Gather de gradientes y pesos fragmentados entre las GPU.Escalar el rendimiento de entrenamiento a través de cientos de GPU cuando las capas caben en un dispositivo.
Paralelismo de tensores (TP)Divide matrices de pesos individuales (capas) vertical u horizontalmente entre las GPU.All-Reduce después de cada capa Transformer (requiere NVLink ultrarrápido).Capas enormes que no caben en una sola GPU, mantenidas estrictamente dentro de un nodo de servidor de 8 GPU.
Paralelismo de pipeline (PP)Divide el modelo por profundidad, colocando grupos secuenciales de capas en GPU diferentes.Transferencias de activaciones punto a punto (P2P) entre etapas del pipeline.Escalado a través de múltiples nodos de servidor conectados por redes InfiniBand/Ethernet más lentas.
  • Paralelismo de datos y ZeRO / FSDP. En el paralelismo de datos estándar, cada GPU guarda una copia completa del modelo, desperdiciando memoria. Los frameworks modernos usan ZeRO (Zero Redundancy Optimizer) o PyTorch FSDP (Fully Sharded Data Parallel), que fragmentan los parámetros, gradientes y estados del optimizador entre todas las GPU, reuniendo los pesos de cada capa justo a tiempo para el cómputo.
  • Paralelismo de tensores (intracapa). En lugar de duplicar una multiplicación de matrices feed-forward masiva Y = XW, el paralelismo de tensores divide W por columnas entre las GPU (W = [W_1, W_2]). Cada GPU calcula su mitad de la salida simultáneamente e intercambia resultados parciales a través de NVLink de alta velocidad (900 GB/s en las H100).
  • Paralelismo de pipeline (intercapa). Las capas 1–8 residen en la GPU 1, las capas 9–16 en la GPU 2, y así sucesivamente. Para evitar que las GPU posteriores queden inactivas mientras esperan a que terminen las capas anteriores (la "burbuja del pipeline"), los frameworks dividen cada lote de entrenamiento en micro-lotes más pequeños para que todas las GPU se mantengan ocupadas al estilo de una cadena de montaje.

3. Cuantización (GPTQ, AWQ) y kernels de descuantización sobre la marcha

Durante la inferencia (generar tokens uno a uno), los grandes modelos de lenguaje están limitados por el ancho de banda de memoria, no por el cómputo. Cargar 70 000 millones de parámetros de 16 bits (140 GB) desde la VRAM solo para generar un único token deja a los Tensor Cores esperando las transferencias de memoria. La cuantización comprime los pesos de flotantes de 16 bits a enteros de 4 bits (INT4), reduciendo el tamaño de memoria y el tiempo de transferencia en casi 4×.

  • GPTQ (cuantización post-entrenamiento mediante calibración con el Hessiano).
  • El redondeo ingenuo de pesos de 16 bits a enteros de 4 bits destruye la precisión del modelo. GPTQ pasa un pequeño conjunto de datos de calibración por el modelo y usa matemáticas de segundo orden (la matriz Hessiana inversa) para medir la sensibilidad de cada peso.
  • Cuantiza los pesos columna por columna; cada vez que redondear un peso introduce un error, GPTQ ajusta matemáticamente los pesos restantes no cuantizados de esa fila para cancelar el error.
  • AWQ (cuantización de pesos consciente de las activaciones).
  • Los investigadores descubrieron que aproximadamente entre el 0,1 % y el 1 % de los canales de pesos son mucho más importantes que el resto porque multiplican valores de activación grandes.
  • En lugar de mantener esos pesos críticos en 16 bits (lo que crea diseños de memoria de precisión mixta desordenados y lentos), AWQ escala hacia arriba esos canales de pesos destacados antes de la cuantización y escala hacia abajo las activaciones de entrada correspondientes en tiempo de ejecución, preservando la precisión mientras mantiene el 100 % de los pesos en formato uniforme de 4 bits.
  • Cómo los kernels CUDA personalizados descuantizan sobre la marcha (W4A16).
  • Las GPU no pueden multiplicar directamente una activación de 16 bits (FP16) por un peso entero de 4 bits (INT4). En su lugar, los kernels de inferencia especializados (como Marlin o ExLlama) realizan la ejecución W4A16 (pesos de 4 bits, activaciones de 16 bits):
  • 1. Lectura comprimida de HBM: el kernel carga pesos de 4 bits empaquetados (ocho valores INT4 empaquetados dentro de un único entero de 32 bits) desde la lenta VRAM global, reduciendo el uso de ancho de banda de memoria en 4×.
  • 2. Desempaquetado a nivel de registros: dentro de los registros ultrarrápidos de la GPU, el kernel CUDA usa desplazamientos de bits rápidos (>>) y máscaras de bits (&) para desempaquetar los enteros INT4 y aplica los factores de escala/punto cero almacenados para convertirlos de nuevo en valores FP16 sobre la marcha.
  • 3. Matemáticas inmediatas en los Tensor Cores: los pesos FP16 recién desempaquetados se alimentan directamente a los Tensor Cores junto con las activaciones FP16 sin escribir nunca los pesos expandidos de 16 bits de vuelta en la VRAM.

Más noticias: IA y tecnología