FlashAttention 4: Atenção Mais Rápida e Eficiente em Memória para LLMs
Introdução
A atenção por produto escalar dimensionado (SDPA) domina o tempo de inferência e o consumo de energia dos grandes modelos de linguagem (LLMs): quase todas as execuções de operadores acontecem dentro de uma única primitiva. A atenção pega consultas (Q) e as multiplica pelas chaves (K). Em seguida, normaliza o resultado através de uma operação softmax antes de multiplicar pelos valores (V) para produzir a saída. É limitada pela memória: ler Q/K/V várias vezes da memória de alta largura de banda e depois escrever repetidamente blocos intermediários.
As famílias FlashAttention reduzem esse gargalo mantendo mais dados no chip por mais tempo, aproveitando os multiprocessadores de streaming (SMs) da GPU. Primeiramente disponibilizado como código aberto em 2022, o FlashAttention reestruturou a rotina de atenção para calcular o softmax em tempo real. Apenas algumas linhas de Q × K são armazenadas no chip a qualquer momento.
Este artigo serve como um mergulho aprofundado voltado para praticantes sobre o FlashAttention 4 (FA4). Vamos resumir o que mudou em relação às versões anteriores e fornecer algumas orientações sobre adoção e benchmarking. Nosso objetivo é fornecer aos engenheiros de infraestrutura de LLM, engenheiros de kernel e equipes de plataforma de ML informações suficientes para saber quando – e se – o FA4 deve ser usado em sua stack.
Principais Conclusões
- A4 foi projetado como um kernel de atenção Blackwell-first, destinado à implementação em GPUs SM100. Ele possui um pipeline de 5 estágios especializado por warp, permitindo maior sobreposição e reutilização no chip em comparação com as gerações anteriores do FlashAttention.
- A eficiência é aprimorada no softmax por meio de duas técnicas principais: executar o software exp2() diretamente nos núcleos CUDA para reduzir a contenção nos SFUs e o reescalonamento adaptativo online para evitar cálculos desnecessários de reescalonamento, preservando a estabilidade.
- Ainda existem alguns recursos ausentes: o FA4 é forward-first e atualmente não possui implementações para o backward pass, varlen e GQA/MQA, o que limita seu uso para treinamento e algumas arquiteturas de modelo.
- Adote o FA4 de forma pragmática: use-o primeiro para inferência Blackwell, coloque-o atrás de testes de benchmarking + verificação de correção + alternativas, e mantenha o FA3 (Hopper)/FA2 (Ampere/Ada) como os padrões estáveis para necessidades de produção mais amplas.
Por que os kernels de atenção ainda dominam o custo dos LLMs
Apesar dos altos FLOPS fornecidos pelas GPUs, os modelos transformer frequentemente são limitados pela largura de banda da memória, devido à atenção precisar carregar Q, K e V da memória global várias vezes. Para calcular a saída de atenção para cada token de consulta, cada um deve fazer o produto escalar com até milhares de tokens-chave, normalizar e reescalar esse resultado e, finalmente, buscar os valores. Implementações simples calculam toda a matriz Q×K e a armazenam na memória. Isso rapidamente ultrapassa o tamanho da memória interna, levando a um desempenho prejudicado por leituras externas à memória.
O FlashAttention mitiga esse problema ao dividir a matriz de atenção em blocos. Em vez de materializar Q×K, ele transmite pequenos blocos de Q e K para a memória compartilhada, calcula o softmax sobre o bloco e mantém apenas o máximo e a soma correntes para cada linha de consulta. Isso reduz significativamente o tráfego de memória, fazendo com que o kernel se torne limitado pelo cálculo.
FlashAttention Evolution em um Olhar
É útil entender como o FlashAttention evoluiu ao longo do tempo. Cada versão aproveitou novos recursos de hardware para melhorar a velocidade ou a eficiência. O FA4 é especificamente otimizado para GPUs da geração Blackwell. Aqui está uma tabela de cada versão do FlashAttention com as principais melhorias que trouxeram e seu impacto no desempenho:
| Versão (Ano) | Arquitetura GPU Alvo | Inovações Chave | Destaques de Desempenho |
|---|---|---|---|
| FlashAttention (v1) – 2022 | Ampere (NVIDIA A100) e anteriores | Atenção exata com consciência de E/S (tileamento + buffer on-chip) para reduzir o tráfego de memória fora do chip. | 2–4× mais rápido que a atenção padrão do PyTorch; até 10–20× de economia de memória em comparação com implementações ingênuas. |
| FlashAttention-2 – 2023 | Ampere (A100), Ada (RTX 30/40) | Melhor paralelismo e divisão de trabalho (maior ocupação), agendamento de warp aprimorado. Suporte a cabeçalho de consulta múltipla/grupo (MQA/GQA). | Aproximadamente ~2× mais rápido que a v1; atinge ~50–73% dos FLOPs teóricos da A100 (~225 TFLOPs/s). |
| FlashAttention-3 – 2024 | Hopper (H100/H800) | Explora cálculo assíncrono e movimentação de dados (Tensor Memory Accelerator, especialização de warp). Pipelines intercalados de GEMM/softmax. Suporte de baixa precisão FP8 com comportamento numérico aprimorado. | 1,5–2× mais rápido que o v2 no H100; ~740 TFLOPs/s FP16 (~75% de utilização) e até ~1,2 PFLOPs/s em FP8. |
| FlashAttention-4 – 2025 | Blackwell (por exemplo, B200, SM 10.x) | Especialização adicional do pipeline para concorrência Blackwell. Aproximações de software (exp) e softmax online otimizado. Arquitetura de kernel ajustada para Blackwell (via CUDA/CUTLASS/DSL). | ~20–22% mais rápido que a atenção cuDNN no Blackwell em benchmarks; melhorias de desempenho relatadas. |
Novidades no FlashAttention 4
FlashAttention 4 continua o paradigma de computação em blocos estabelecido pelas versões anteriores do FlashAttention: tensores Q/K/V são processados bloco a bloco para maximizar a localidade de dados na memória interna e minimizar o tráfego para a memória global. Instâncias individuais do kernel (chamadas de array cooperativo de threads, ou CTA) trabalham juntas para calcular um ou mais blocos de saída transmitindo os blocos correspondentes de Q, K e V da memória global, e então projetando-os para os resultados finais da atenção.
Os componentes internos do FA4 consistem em um cronograma altamente pipelineado que sobrepõe várias etapas do cálculo de atenção para melhorar a ocultação de latência e maximizar a utilização de recursos da GPU. Em contraste com o FlashAttention 3, que possui essencialmente uma sobreposição de carregamento/cálculo em 2 etapas, o FA4 divide o cálculo em vários conjuntos de etapas concorrentes, com diferentes partes do pipeline sendo gerenciadas por grupos de warps separados. Esses grupos de warps se especializam cada um em uma única responsabilidade durante o "ciclo de vida" de um bloco na função de atenção.
Este modelo de especialização de warp atribui warps de 32 threads a tarefas específicas, como:
- Movimentação de dados (loads): buscando blocos de consulta, chave e valor da memória global para o armazenamento mais rápido no chip.
- Estágios de computação: Realizando pontuações de atenção parciais usando hardware de multiplicação-acumulação de matrizes com núcleos tensor.
- Lógica de Softmax e normalização: Operações de exponenciais + normalização para os pesos de softmax da atenção.
- Lógica de reescalonamento e redução: aplicação de ajustes numéricos ou combinação de resultados parciais antes da acumulação.
- Epílogo/operações de armazenamento: escrevendo os blocos concluídos do tensor de saída de volta à memória global.
A intuição por trás do modelo de execução básico é manter pipelines assíncronas para cada grupo de warp, de forma que o escalonador de warps da GPU possa alternar rapidamente entre os grupos de warp à medida que os operandos de origem se tornam disponíveis.
Exponenciais de Software via Núcleos CUDA
Um truque novo e particularmente chamativo no FA4 é como ele calcula a função exponencial usada no softmax. Normalmente, os kernels aproveitam as SFUs dedicadas na GPU para realizar operações matemáticas caras, como exp(). No entanto, como há relativamente poucas SFUs por SM, elas podem facilmente se tornar um gargalo na fila.
O FA4 contorna essa limitação ao fazer com que núcleos CUDA normais realizem exponenciais aproximadas em software. Especificamente, o FA4 contém uma implementação personalizada de uma aproximação polinomial exp2(x) com precisão de hardware. O FA4 simula o cálculo da exponencial usando um polinômio cúbico, que pode então ser executado em paralelo em muitos núcleos CUDA, em vez de se concentrar em alguns SFUs.
Conclusão: nada de ficar esperando as SFUs calcularem o softmax. Ao lidar com exp() em núcleos de uso geral, o FA4 permite que o warp que calcula o softmax acompanhe melhor o ritmo do pipeline.
Reescalonamento Softmax Online Mais Inteligente (Novo no FA4)
Outra inovação no FA4 está relacionada a como a acumulação do softmax mantém a estabilidade numérica. Como todas as versões do FlashAttention fazem o softmax “online” – acumulando valores parciais de max() e somas à medida que eles percorrem a sequência (para evitar estouro). Versões anteriores atualizavam constantemente o fator de escala em execução (geralmente o maior logit até então). Elas faziam o reescalonamento constantemente – sempre que viam um novo valor máximo, elas reescalonavam para preservar a estabilidade do softmax. O FA4 introduz uma política de reescalonamento adaptativa. Ele só faz o reescalonamento se o novo máximo que você vê for significativamente maior que o anterior. Isso, segundo relatos, reduz a frequência das operações de reescalonamento em um fator de 10. Consideremos o seguinte diagrama:
O diagrama compara duas versões de reescalonamento usadas no FlashAttention, permitindo um cálculo de atenção estável e eficiente em termos de memória. A estratégia original reescala a saída de cada bloco se o valor máximo aparecer, garantindo que somas pequenas permaneçam precisas ao normalizar as contribuições passo a passo. Com o reescalonamento adaptativo, rastreamos máximos locais e globais, reescalando apenas quando ocorrem saltos ou quando os blocos crescem. Isso reduz a sobrecarga enquanto ainda previne estouros e permite uma soma numericamente estável de termos de pequeno valor.
Compatibilidade e status atual
Esta tabela fornece uma visão geral da compatibilidade esperada do FlashAttention 4 (FA4) e do que funciona hoje em dia em toda a stack:
| Aspecto | Status Atual (O que Funciona Hoje) | Notas/Fonte |
|---|---|---|
| Alvo de Hardware | Os kernels FA4 são projetados para GPUs Blackwell (SM10.x/B200) | FA4 é otimizado para GPUs da geração Blackwell. FA3 e versões anteriores suportam arquiteturas mais antigas; o suporte para Blackwell está sendo adicionado. (Modal) |
| Suporte Blackwell em Lançamentos Oficiais | Trabalho em andamento | O suporte da Blackwell ainda não foi incorporado às versões lançadas; os usuários estão acompanhando o suporte para a arquitetura sm_120. |
| Passe para Frente (FA4) | Funcional/Disponível | O kernel de atenção avançada FA4 foi confirmado e pode ser executado no Blackwell com as compilações apropriadas. |
| Passagem Reversa (FA4) | Incompleto/Limitado | A passagem regressiva para Blackwell está faltando recursos essenciais como suporte a varlen e GQA. |
| Suporte a Sequências de Comprimento Variável | Não totalmente suportado (em versões antigas) | Relatado como ausente na implementação reversa; em desenvolvimento. |
| GQA/Atenção por Consulta Agrupada | Ainda não suportado (em reverso) | A passagem para trás não oferece suporte para atenção por consulta agrupada e variantes similares. |
| Integração de Framework | Ainda não suportado | Atualmente, o vLLM reconhece apenas FA2 ou FA3 e gera um erro para FA4. (Fóruns vLLM) |
| Integração de Framework (PyTorch SDPA) | Ainda não incluído nas versões estáveis | Os backends de atenção por produto escalar com escala do PyTorch (SDPA) ainda não suportam FA4. |
| Requisitos do CUDA Toolkit/Driver | CUDA 12.8+ é comumente usado para builds Blackwell | As versões Blackwell/SM10 geralmente são compiladas com kits de ferramentas CUDA recentes (>=12,8), embora os requisitos específicos evoluam com o desenvolvimento. |
A passagem direta do FA4 já está amplamente disponível (comprometida) na árvore de código-fonte pública. Existem posts abertos em projetos como o repositório FlashAttention do Lab, onde os usuários estão solicitando suporte completo para passagem reversa/varlen/group/GQA. Isso implica que continua sendo uma questão pública em aberto.
O suporte a sequências de comprimento variável (processamento eficiente de lotes de sequências com comprimentos diferentes sem preenchimento) e GQA (Grouped-Query Attention) ainda não é suportado na passagem reversa. GQA é um truque de atenção onde múltiplas cabeças de atenção usam as mesmas projeções de chave/valor (às vezes usado em LLMs para reduzir o uso de memória). Versões anteriores do FlashAttention suportavam configurações no estilo MQA/GQA. No entanto, o kernel principal de avanço do FA4 provavelmente assumirá que o mesmo número de cabeças é usado para cada consulta. Portanto, provavelmente ainda não suporta corretamente cabeças agrupadas. Modelos com atenção de consulta agrupada (como algumas variantes do Llama2) não serão suportados pelo FA4 até que isso seja implementado.
Integração ao ecossistema: O FA4 ainda não foi adotado por muitas frameworks/camadas de nível superior porque é novo. Um exemplo é o motor de serviço vLLM (altamente otimizado para inferência LLM), que atualmente não possui suporte ao FA4 – apenas o FlashAttention 2 e 3 são suportados. Selecionar FA4 no vLLM resultará em um erro de “versão não suportada” porque o seletor de versão deles atualmente só permite escolher entre as versões 2 ou 3.
Como Adotar o FlashAttention – Guia de Decisão
Use esta tabela para determinar qual versão do FlashAttention é a ideal para suas necessidades.
| Você está no Ampere/Ada (A100, RTX 30/40, etc.) | Use FlashAttention-2 (FA2) | FA4 é exclusivo para Blackwell (SM10.0) e não será executado/compilado em SM8.x. FA2 é o caminho mais bem suportado em Ampere/Ada e está amplamente integrado em stacks modernos. |
|---|---|---|
| Você está no Hopper (H100/H200) | Use FlashAttention-3 (FA3) | O FA3 foi projetado para o Hopper e normalmente oferece ganhos fortes (frequentemente citados entre 1,5–2× em comparação com o FA2) com cobertura madura de recursos (backward, varlen, suporte a GQA/MQA em implementações comuns). FA4 não é destinado ao Hopper. |
| Você não possui hardware Blackwell (sem B200/B100) | Não use FA4 | Não há benefício em tentar o FA4: ele é feito para SM10.0 e não irá compilar/executar corretamente em SM8.x/9.x. Em vez disso, escolha a versão mais recente do FlashAttention que seja compatível com sua GPU (FA2 para Ampere/Ada, FA3 para Hopper). |
| Você possui Blackwell (B200/B100) e sua carga de trabalho é apenas de inferência | Teste FA4 (forward) primeiro, com uma opção de reserva | O FA4 é forward-first hoje, então a inferência é a melhor opção. Espere o maior benefício em sequências longas e padrões de atenção padrão. Mantenha o fallback do cuDNN/SDPA ativado para evitar falhas graves ou regressões se algum recurso estiver ausente. |
| Você tem Blackwell e sua carga de trabalho é treinamento (precisa de retrocesso) | Prefira um caminho de treinamento maduro até que o FA4 reverso exista | O treinamento requer uma passagem de retropropagação. Com o FA4 apenas para frente, sua retropropagação provavelmente recairá em outro kernel, o que pode dominar o tempo de etapa. Opções: (a) treinar no Hopper com FA3, se disponível, (b) aceitar a retropropagação mais lenta no Blackwell por enquanto, (c) esperar pelo suporte à retropropagação do FA4. |
Seu modelo precisa de processamento em lotes variável (lotes irregulares via cu_seqlens) | Evite FA4 a menos que você possa fazer um preenchimento ou aceitar uma alternativa | Se o FA4 não tiver suporte a varlen na sua pilha, você verá erros ou falhas silenciosas. Soluções alternativas: preencher para comprimentos uniformes, agrupar por comprimento ou desativar o FA4 para casos com varlen. |
| Seu modelo utiliza GQA/MQA (cabeças de consulta agrupadas, variantes do Llama, etc.) | Verifique cuidadosamente; esteja pronto para desativar o FA4 | Se o GQA não for compatível no FA4 para o seu caminho (especialmente para trás, e às vezes para frente), você pode ter um comportamento incorreto ou um fallback. Use um backend conhecido como confiável (FA3/cuDNN/SDPA) até que o GQA seja confirmado em seu ambiente. |
| Você quer recursos FP4 ou de precisão ultrabaixa | Não presuma que o FA4 permita isso ainda | A adoção do FA4 deve começar com BF16/FP16. O uso de FP4 depende do suporte do kernel e do framework, e não é algo a ser planejado para as primeiras implantações do FA4, a menos que esteja explicitamente documentado na sua cadeia de ferramentas. |
| Você precisa de máxima estabilidade e comportamento ",testado em batalha" | Escolha a opção mais madura para sua GPU (geralmente FA3 no Hopper, FA2 no Ampere, fallback cuDNN/SDPA no Blackwell) | FA4 é novo e está em desenvolvimento; versões iniciais podem ter recursos ausentes e bugs em casos extremos. Se o risco para produção for inaceitável, priorize núcleos maduros e só introduza o FA4 por trás de uma flag de recurso com verificações rigorosas de correção. |
| Você pode experimentar e otimizar agressivamente | Adotar FA4 de forma incremental no Blackwell | Melhor abordagem: habilitar FA4 para uma fatia estreita (inferência, buckets de sequência longa, não GQA, comprimento fixo), medir o rendimento/latência, verificar os números e, em seguida, expandir a cobertura à medida que o suporte melhora. |
Perguntas Frequentes
Qual problema o FlashAttention 4 (FA4) está tentando resolver?
Reduz o pesado tráfego de memória HBM da atenção ao calcular a atenção bloco a bloco no chip, evitando a materialização da matriz completa QK⊤.
Qual é a principal mudança arquitetônica no FA4 em comparação com o FA3?
O FA4 utiliza um pipeline de ~5 estágios especializado em warp (carregar, calcular, softmax/normalizar, reescalar/reduzir, armazenar) para aumentar a sobreposição e o reaproveitamento no chip no Blackwell (SM10.x).
Por que o FA4 calcula exponenciais nos núcleos CUDA em vez de nos SFUs?
Como os SFUs são escassos e podem facilmente se tornar um gargalo ao calcular o softmax, o FA4 recorre a calcular uma aproximação por software de exp2() nos núcleos CUDA.
O que a “reescalonagem online adaptativa” altera no softmax?
Em vez de redimensionar sempre que um novo máximo aparece, o FA4 só redimensiona quando esse máximo aumenta de forma significativa. Isso reduz a sobrecarga de redimensionamento enquanto mantém a estabilidade numérica.
Quando um engenheiro deve adotar o FA4 na produção hoje?
Comece com Blackwell apenas com inferência, comprimento fixo, atenção padrão atrás de uma flag de recurso; mantenha cuDNN/SDPA (e FA3/FA2 em GPUs mais antigas) como alternativas até que o suporte a backward/varlen/GQA esteja maduro.
Conclusão
O FlashAttention 4 se baseia no objetivo do FlashAttention de reduzir as demandas de largura de banda de memória da atenção ao realizar mais trabalho de Q/K/V no chip. No entanto, ao contrário das versões anteriores, o FA4 faz isso com um pipeline de 5 estágios especializado em warp específico do Blackwell e duas melhorias importantes no softmax (usando exponenciais de software nos núcleos CUDA para aliviar gargalos do SFU; e usando reescalonamento adaptativo online para eliminar cálculos de estabilidade redundantes). O FA4 apresentou melhorias respeitáveis na taxa de processamento do forward-pass em comparação com o cuDNN em sequências longas, mas continua priorizando o forward e apenas para Blackwell. Além disso, o FA4 atualmente apresenta lacunas significativas de recursos (como ausência de backward, varlen, GQA, etc.), e o suporte do ecossistema ainda não está totalmente desenvolvido. A conclusão por enquanto é considerar os caminhos do FA4 para inferência Blackwell como uma possibilidade de alto potencial, que requer adoção após benchmarks rigorosos, verificações de correção e alternativas. Ao mesmo tempo, cargas de trabalho de treinamento e hardware mais amplo devem continuar a usar os caminhos de código maduros do FA3/FA2 para produção.
Referências
- FlashAttention-3: Atenção Rápida e Precisa com Assincronismo e Baixa Precisão
- FlashAttention 4: Quebrando a Barreira do Petaflop em Kernels de Atenção de GPU
- Como aplicar FA4 no B200?
- Suporte para passagem reversa FA4 no Blackwell
Obrigado por aprender com a comunidade Linux-Console.net.




