Artículos · arXiv 2205.14135
FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness
Resumen en tres líneas
- 🎯 La atención exacta estándar materializa una matriz de atención en la lenta HBM de la GPU, lo que la limita por memoria y dificulta su escalado a contextos largos.
- 🔧 FlashAttention calcula la atención exacta dentro de un único kernel de CUDA fusionado particionando las entradas en la rápida SRAM del chip, actualizando la softmax de forma incremental y recomputando la atención en el chip durante el pase hacia atrás.
- 📈 FlashAttention logra una aceleración de entrenamiento de extremo a extremo de hasta 3x en GPT-2, entrena un 15% más rápido que el récord de MLPerf 1.1 para BERT-large y escala el contexto hasta 64K tokens.
Resumen
Los Transformers son lentos y demandan mucha memoria en secuencias largas, ya que la complejidad temporal y espacial de la autoatención es cuadrática respecto a la longitud de la secuencia. Los métodos de atención aproximada han intentado abordar este problema sacrificando la calidad del modelo para reducir la complejidad de cómputo, pero a menudo no logran una aceleración en tiempo de reloj real. Sostenemos que un principio ausente es hacer que los algoritmos de atención sean conscientes de las operaciones de E/S (IO-aware), contabilizando las lecturas y escrituras entre los distintos niveles de memoria de la GPU. Proponemos FlashAttention, un algoritmo de atención exacta consciente de la E/S que utiliza particionado (tiling) para reducir el número de lecturas/escrituras de memoria entre la memoria de alto ancho de banda (HBM) de la GPU y la SRAM integrada en el chip de la GPU. Analizamos la complejidad de E/S de FlashAttention, demostrando que requiere menos accesos a HBM que la atención estándar y que es óptimo para una variedad de tamaños de SRAM. También extendemos FlashAttention a la atención dispersa por bloques (block-sparse attention), logrando un algoritmo de atención aproximada que es más rápido que cualquier método de atención aproximada existente. FlashAttention entrena Transformers más rápido que las líneas base existentes: una aceleración de extremo a extremo del 15% en tiempo de reloj real en BERT-large (longitud de secuencia de 512) en comparación con el récord de velocidad de entrenamiento de MLPerf 1.1, una aceleración de 3 en GPT-2 (longitud de secuencia de 1K) y una aceleración de 2.4 en Long-Range Arena (longitud de secuencia de 1K-4K). FlashAttention y block-sparse FlashAttention permiten contextos más largos en Transformers, lo que se traduce en modelos de mayor calidad (una perplejidad 0.7 mejor en GPT-2 y un aumento de 6.4 puntos en la clasificación de documentos largos) y capacidades totalmente nuevas: los primeros Transformers en superar el rendimiento del azar en el desafío Path-X (longitud de secuencia de 16K, 61.4% de precisión) y Path-256 (longitud de secuencia de 64K, 63.1% de precisión).
Resumen original (inglés)
Transformers are slow and memory-hungry on long sequences, since the time and memory complexity of self-attention are quadratic in sequence length. Approximate attention methods have attempted to address this problem by trading off model quality to reduce the compute complexity, but often do not achieve wall-clock speedup. We argue that a missing principle is making attention algorithms IO-aware -- accounting for reads and writes between levels of GPU memory. We propose FlashAttention, an IO-aware exact attention algorithm that uses tiling to reduce the number of memory reads/writes between GPU high bandwidth memory (HBM) and GPU on-chip SRAM. We analyze the IO complexity of FlashAttention, showing that it requires fewer HBM accesses than standard attention, and is optimal for a range of SRAM sizes. We also extend FlashAttention to block-sparse attention, yielding an approximate attention algorithm that is faster than any existing approximate attention method. FlashAttention trains Transformers faster than existing baselines: 15% end-to-end wall-clock speedup on BERT-large (seq. length 512) compared to the MLPerf 1.1 training speed record, 3 speedup on GPT-2 (seq. length 1K), and 2.4 speedup on long-range arena (seq. length 1K-4K). FlashAttention and block-sparse FlashAttention enable longer context in Transformers, yielding higher quality models (0.7 better perplexity on GPT-2 and 6.4 points of lift on long-document classification) and entirely new capabilities: the first Transformers to achieve better-than-chance performance on the Path-X challenge (seq. length 16K, 61.4% accuracy) and Path-256 (seq. length 64K, 63.1% accuracy).
Guía de lectura
Problema y motivación
Los Transformers tienen una complejidad temporal y de memoria cuadrática respecto a la longitud de la secuencia . Aunque los métodos de atención aproximada reducen el recuento teórico de FLOPs, a menudo no logran mejoras de velocidad en tiempo real porque las operaciones en las GPUs modernas están limitadas principalmente por las transferencias de memoria (E/S) en lugar de las operaciones aritméticas.
En la atención estándar, el cálculo de , y escribe matrices intermedias de tamaño en la lenta memoria de alto ancho de banda (HBM) y las vuelve a leer múltiples veces. Esto genera accesos a la HBM y una huella de memoria de , lo que restringe el tamaño de las ventanas de contexto prácticas.
Ideas clave
- Conciencia de la E/S (IO-Awareness): Considerar explícitamente la jerarquía de memoria de la GPU: la memoria SRAM en el chip, rápida y pequeña (por ejemplo, 192 KB/SM con un ancho de banda de ~19 TB/s en A100), frente a la memoria HBM, grande y lenta (40–80 GB con un ancho de banda de 1.5–2.0 TB/s).
- Particionado o Tiling (Cálculo de softmax por bloques): Dividir las entradas en bloques que quepan por completo en la SRAM. Al registrar las estadísticas acumuladas del máximo por fila y del normalizador de la softmax, la reducción de softmax se calcula incrementalmente a través de los bloques sin materializar la matriz completa de en la HBM.
- Recomputación en el pase hacia atrás: Evitar guardar la matriz de atención intermedia de para la retropropagación. En su lugar, almacenar únicamente la salida y las estadísticas de softmax , recomputando y en el chip bloque a bloque en la SRAM durante el pase hacia atrás.
- Fusión de kernels: Fusionar las multiplicaciones matriciales, el enmascaramiento, la softmax y el dropout en un solo kernel de CUDA para eliminar transferencias redundantes de ida y vuelta a la HBM.
Método (con las ecuaciones clave)
Dados , FlashAttention establece los tamaños de bloque y , donde representa la capacidad de la SRAM.
Seguimiento incremental de la Softmax
Para un vector descompuesto en subvectores y , las estadísticas acumuladas se actualizan mediante:
Para el bloque de claves/valores y el bloque de consultas:
- Calcular las puntuaciones no normalizadas en SRAM: .
- Calcular las estadísticas locales del bloque: , , y .
- Actualizar los normalizadores globales acumulados:
- Actualizar el bloque de salida acumulado :
Análisis de complejidad
- Complejidad de E/S: La atención estándar requiere accesos a HBM. FlashAttention requiere accesos a HBM. Los autores demuestran que ningún algoritmo de atención exacta puede lograr asintóticamente accesos para todo .
- FLOPs y Memoria: FlashAttention realiza FLOPs (con una cantidad ligeramente superior de FLOPs en el pase hacia atrás debido a la recomputación) y solo requiere de memoria auxiliar más allá de las entradas y salidas.
Extensión: Block-Sparse FlashAttention
Restringir la evaluación a bloques no nulos según una máscara de dispersión predefinida logra una complejidad de E/S de , donde es la fracción de bloques no nulos.
Resultados (con las cifras más importantes)
- Aceleración del entrenamiento:
- BERT-large (longitud de secuencia 512): Supera el récord de velocidad de entrenamiento de MLPerf 1.1 en un 15% (17.4 min frente a 20.0 min en A100s).
- GPT-2 (longitud de secuencia 1K): Logra una aceleración de hasta 3.5x respecto a HuggingFace y de hasta 1.8x respecto a Megatron-LM.
- Long-Range Arena (LRA): Ofrece una aceleración de 2.4x en comparación con la atención estándar; Block-sparse FlashAttention alcanza una aceleración de 2.8x.
- Capacidades para contextos más largos:
- GPT-2 con contexto de 4K: Se entrena más rápido que Megatron-LM con contexto de 1K mientras mejora la perplejidad de validación en 0.7 puntos (17.5 frente a 18.2).
- Clasificación de documentos largos: Escalar el contexto de 512 a 16K proporciona una mejora de 4.3 micro- en MIMIC-III (de 52.8 a 57.1) y de hasta 8.5 puntos en ECtHR (de 72.2 a 80.7 en 8K).
- Path-X y Path-256: FlashAttention es el primer Transformer capaz de resolver Path-X (longitud de secuencia de 16K) con un 61.4% de precisión. Block-sparse FlashAttention logra un 63.1% de precisión en Path-256 (longitud de secuencia de 64K).
Limitaciones y preguntas abiertas
- Sobrecarga de ingeniería en CUDA: Implementar kernels conscientes de la E/S requiere programación en CUDA de bajo nivel y a medida, en lugar de utilizar abstracciones estándar de PyTorch o compiladores, lo que dificulta la portabilidad entre diferentes arquitecturas de hardware.
- Atención multi-GPU: El esquema óptimo de E/S para un único nodo no se extiende de manera automática a la atención distribuida multi-GPU a través de interconexiones (NVLink, InfiniBand).
- Cota inferior de la atención exacta: Aunque es óptimo para valores generales de , demostrar cotas inferiores de complejidad parametrizada más detalladas en función de sigue siendo un problema abierto.
Términos clave
- IO-awareness
- El principio algorítmico de diseñar operaciones teniendo en cuenta las lecturas y escrituras entre los distintos niveles de memoria del hardware (por ejemplo, la rápida SRAM en el chip frente a la HBM más lenta).
- High Bandwidth Memory (HBM)
- La memoria principal de gran tamaño de la GPU, que ofrece una alta capacidad total pero un ancho de banda significativamente inferior al de la caché del chip.
- SRAM
- Memoria scratchpad rápida ubicada dentro del propio chip en cada Multiprocesador de Streaming (SM) de las GPUs modernas.
- Tiling
- Reestructuración del cómputo dividiendo las matrices de entrada en bloques más pequeños que caben en la SRAM y acumulando los resultados a lo largo de varias pasadas.
- Selective gradient checkpointing
- Técnica que evita guardar la gran matriz de atención intermedia durante el pase hacia adelante recalculándola en el chip durante el pase hacia atrás mediante estadísticas de softmax almacenadas en caché.
- Kernel fusion
- Combinación de múltiples operaciones distintas (multiplicación de matrices, enmascaramiento, softmax, dropout) en la ejecución de un único kernel de GPU para eliminar lecturas y escrituras repetidas en la HBM.
- Block-sparse FlashAttention
- Extensión de FlashAttention que solo calcula los bloques de teselas no nulos definidos por una máscara de dispersión por bloques, reduciendo la complejidad de E/S de forma proporcional a la fracción de dispersión.
- Path-X / Path-256
- Benchmarks de razonamiento visual con secuencias largas pertenecientes a Long-Range Arena (longitudes de secuencia de 16K y 64K) en los que los Transformers anteriores no lograban superar el rendimiento del azar.
Preguntas
¿Aproxima FlashAttention la matriz de atención?
No. FlashAttention calcula la autoatención exacta, ofreciendo resultados matemáticamente idénticos a los de la atención estándar hasta el límite de la precisión numérica de punto flotante.
¿Por qué FlashAttention es más rápido si calcula más FLOPs en el pase hacia atrás?
Porque la atención estándar está limitada por la memoria (memory-bound); transferir la matriz de entre la HBM y la SRAM consume mucho más tiempo de reloj que realizar operaciones aritméticas adicionales en la rápida SRAM.
¿Qué memoria auxiliar almacena FlashAttention para el pase hacia atrás?
FlashAttention almacena únicamente la salida del pase hacia adelante , los factores de normalización de la softmax y (lo que requiere una memoria adicional de ), y el estado del generador pseudoaleatorio para reproducir las máscaras de dropout directamente en el chip.
¿Cómo se compara la complejidad de E/S de FlashAttention con la de la atención estándar?
La atención estándar requiere accesos a la HBM, mientras que FlashAttention solo requiere accesos, donde representa el tamaño de la SRAM y la dimensión de la cabeza.
La explicación de esta página la escribió una IA a partir del artículo y puede contener errores. Consulte el artículo para los detalles.