FlashAttention-2 (PT)
FlashAttention-2 é um algoritmo avançado projetado para calcular o mecanismo de atenção (attention) em grandes modelos de linguagem (LLMs). O algoritmo foi desenvolvido por Tri Dao e pesquisadores da Universidade de Stanford e apresentado em julho de 2023[1]. Seu principal objetivo é acelerar significativamente o treinamento e a inferência de modelos transformer através do uso mais eficiente dos recursos de hardware da GPU, mantendo a identidade computacional completa com o mecanismo de atenção padrão, ou seja, sem perda de precisão.
FlashAttention-2 é a continuação lógica do algoritmo FlashAttention, apresentado pela mesma equipe em 2022. A nova versão resolve o problema de subutilização da GPU observado em seu predecessor e alcança um aumento de velocidade de quase duas vezes em comparação com a primeira versão.
Pré-requisitos: o problema da atenção nos transformers
O mecanismo de autoatenção (self-attention) padrão é um gargalo ao trabalhar com longas sequências de texto em transformers. Sua complexidade computacional e consumo de memória crescem quadraticamente (O(N²)) em relação ao comprimento da sequência (N), o que impõe sérias limitações ao comprimento máximo do contexto e à escalabilidade dos LLMs[1].
Para resolver esse problema, o algoritmo FlashAttention foi apresentado em 2022[2]. Suas ideias principais são:
- Consciência da hierarquia de memória da GPU (IO-awareness): O algoritmo minimiza as custosas operações de leitura/escrita entre a memória lenta da GPU (HBM) e a memória estática rápida (SRAM) no chip.
- Processamento em blocos (tiling): Os cálculos são divididos em pequenos blocos (tiles) que são processados na SRAM rápida, evitando a materialização da matriz de atenção completa na memória.
Isso permitiu alcançar um crescimento linear no consumo de memória (O(N)) e uma aceleração de 2 a 4 vezes em comparação com as implementações padrão[2]. O FlashAttention se tornou amplamente adotado e contribuiu para o surgimento de modelos com contexto significativamente maior, por exemplo, de 2 a 4 mil tokens (GPT-3) para 128 mil (GPT-4) e mais[3]. Por exemplo, no modelo Falcon-40B, o uso do FlashAttention acelerou a inferência em 3 vezes e o desempenho geral de geração em 5 vezes em comparação com o GPT-3[4].
Desenvolvimento e objetivos do FlashAttention-2
Apesar do sucesso, a primeira versão do FlashAttention não utilizava totalmente os recursos computacionais da GPU. Nas placas de vídeo NVIDIA A100, o desempenho atingia apenas 25–40% do máximo teórico (FLOPs/s)[1]. A principal razão era a carga não otimizada dos multiprocessadores de streaming (Streaming Multiprocessors) e operações redundantes com a memória compartilhada[5].
O objetivo do FlashAttention-2 foi acelerar ainda mais os cálculos por meio de um paralelismo de trabalho mais eficiente e da minimização de operações auxiliares. O algoritmo foi completamente reescrito usando primitivas de baixo nível da biblioteca NVIDIA CUTLASS 3.x para alcançar o desempenho máximo[6].
Arquitetura técnica e princípios de funcionamento
O FlashAttention-2 introduz três melhorias principais para aumentar o paralelismo e a eficiência[1]:
1. Minimização de operações não matriciais
O algoritmo reduz o número de operações auxiliares de ponto flutuante que não são multiplicações de matrizes (non-matmul FLOPs). Como os Tensor Cores da GPU são otimizados especificamente para operações de matriz (GEMM) e as executam até 16 vezes mais rápido, essa mudança permite que os blocos mais eficientes da GPU sejam utilizados na maior parte do tempo.
2. Paralelismo aprimorado
No FlashAttention original, o trabalho em uma única "cabeça" de atenção não era paralelizado, o que levava à ociosidade com sequências longas e tamanhos de lote pequenos. O FlashAttention-2 introduz o paralelismo entre blocos: agora, os cálculos para uma única cabeça de atenção são distribuídos entre diferentes multiprocessadores de streaming da GPU, aumentando significativamente sua utilização.
3. Divisão de trabalho otimizada dentro do bloco
No nível de um único bloco computacional, o trabalho foi redistribuído entre grupos de threads (warps) para reduzir a troca de dados através da memória compartilhada (shared memory). Isso diminui o número de operações redundantes de leitura/escrita necessárias para a normalização do Softmax.
Desempenho e eficiência
Graças às melhorias arquitetônicas, o FlashAttention-2 demonstra um ganho significativo de desempenho:
- Aceleração de duas vezes: O algoritmo opera aproximadamente 2 vezes mais rápido em comparação com a primeira versão do FlashAttention[1].
- Alta utilização da GPU: Em GPUs NVIDIA A100, alcança 50–73% da taxa de transferência máxima teórica (TFLOPs), o que se aproxima da eficiência de operações otimizadas de multiplicação de matrizes (GEMM)[1].
- Velocidade de computação recorde:
- Em uma GPU A100, atinge velocidades de até 225 TFLOP/s no ciclo completo de treinamento de um modelo tipo GPT, o que corresponde a 72% de utilização das unidades computacionais. Em comparação, a atenção padrão sob as mesmas condições sobrecarregava a GPU com menos de 100 TFLOP/s[7].
- Em uma GPU H100, o desempenho atinge 335 TFLOP/s[7].
Esse aumento de desempenho permite, por exemplo, treinar um modelo com uma janela de contexto de 16k tokens no mesmo tempo que antes era necessário para uma janela de 8k tokens[5]. É importante notar que o algoritmo permanece exato e determinístico, de modo que sua aplicação não afeta a qualidade das previsões do modelo[8].
Aplicação e integração no ecossistema
O FlashAttention-2 rapidamente se tornou uma ferramenta padrão no ecossistema de LLMs. Ele está integrado em muitos frameworks e bibliotecas populares:
- PyTorch: Suporte nativo.
- Hugging Face Transformers: O suporte é ativado com o parâmetro `attn_implementation="flash_attention_2"` ao carregar um modelo[9]. É compatível com dezenas de arquiteturas (GPT, Llama, Falcon, BERT, etc.)[10].
- TensorRT-LLM, xFormers e Triton: O algoritmo foi implementado para essas plataformas, o que garante sua ampla aplicação[7].
A integração permite combinar facilmente o FlashAttention-2 com outros métodos de otimização, como quantização (GPTQ, QLoRA) e ajuste fino eficiente (PEFT)[9].
Comparação com versões subsequentes
FlashAttention-3
A pesquisa na área de otimização de atenção continua. Em julho de 2024, Tri Dao apresentou o FlashAttention-3, voltado para aproveitar os recursos da arquitetura de GPU NVIDIA Hopper (H100/H200). As principais inovações incluem[3]:
- Suporte a FP8: Utiliza cálculos de ponto flutuante de 8 bits para maior aceleração.
- Operações assíncronas: Utiliza de forma mais eficiente as capacidades assíncronas da GPU.
O FlashAttention-3 proporciona uma aceleração de 1.5 a 2 vezes em comparação com o FlashAttention-2 em GPUs H100, atingindo um desempenho de até 740 TFLOP/s (75% do máximo teórico)[11].
Literatura
- Dao, T. (2023). FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning. arXiv:2307.08691.
- Dao, T. et al. (2022). FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness. arXiv:2205.14135.
- Shah, J. et al. (2024). FlashAttention-3: Fast and Accurate Attention with Asynchrony and Low-precision. arXiv:2407.08608.
- Kwon, W. et al. (2023). Efficient Memory Management for Large Language Model Serving with PagedAttention. arXiv:2309.06180.
- Ye, Z. et al. (2025). FlashInfer: Efficient and Customizable Attention Engine for LLM Inference Serving. arXiv:2501.01005.
- Chen, Y. et al. (2023). FlashDecoding++: Faster Large Language Model Inference on GPUs. arXiv:2311.01282.
- Liu, Y. et al. (2024). FastAttention: Extending FlashAttention-2 to NPUs and Low-Resource GPUs. OpenReview: 76NYyOrnfk.
- Dege, P. et al. (2025). FlashMLA-ETAP: Efficient Transpose Attention Pipeline for Accelerating MLA Inference on NVIDIA H20 GPUs. arXiv:2506.01969.
- Wang, G. et al. (2024). FlashMask: Efficient and Rich Mask Extension of FlashAttention. OpenReview: rog0J435OO.
- Abbott, V.; Zardini, G. (2025). FlashAttention on a Napkin: A Diagrammatic Approach to Deep Learning IO-Awareness. arXiv:2412.03317.
Notas
- ↑ 1.0 1.1 1.2 1.3 1.4 1.5 Dao, Tri. "FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning". arXiv:2307.08691 [cs.LG], 17 de julho de 2023. [1]
- ↑ 2.0 2.1 "Optimizing LLMs for Speed and Memory". Hugging Face Documentation. [2]
- ↑ 3.0 3.1 Dao, Tri. "FlashAttention-3: Fast and Accurate Attention with Asynchrony and Low-precision". Tri Dao's Blog. [3]
- ↑ "FlashAttention vs FlashAttention-2 - an Analysis". E2E Networks Blog. [4]
- ↑ 5.0 5.1 "FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning". OpenReview. [5]
- ↑ "FlashAttention-2". Hazy Research, Stanford University. [6]
- ↑ 7.0 7.1 7.2 Dao, Tri. "FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning" (PDF). arXiv:2307.08691. [7]
- ↑ Raschka, Sebastian. "Llama 2 and FlashAttention 2". Ahead of AI Magazine. [8]
- ↑ 9.0 9.1 Belkada, Younes. "Faster and more memory efficient models with Flash Attention 2!". LinkedIn. [9]
- ↑ "GPU inference". Hugging Face Documentation. [10]
- ↑ Dao, Tri, et al. "FlashAttention-3: Fast and Accurate Attention with Asynchrony and Low-precision". arXiv:2407.08608 [cs.LG], 11 de julho de 2024. [11]