XYZNOT

Artigos · arXiv 2205.14135

FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness

Publicado em cs.LG arXivPDF

Ler com tradução e IA

Resumo em três linhas

  1. 🎯 A atenção exata padrão materializa uma matriz de atenção na lenta HBM da GPU, tornando-se limitada por memória (memory-bound) e difícil de escalar para contextos longos.
  2. 🔧 O FlashAttention calcula a atenção exata dentro de um único kernel CUDA fundido dividindo as entradas em blocos na rápida SRAM on-chip, atualizando o softmax de forma incremental e recomputando a atenção on-chip durante o backward pass.
  3. 📈 O FlashAttention proporciona até 3x de aceleração ponta a ponta no treinamento do GPT-2, atinge um treinamento 15% mais rápido que o recorde do MLPerf 1.1 no BERT-large e escala o contexto para 64K tokens.

Resumo

Os Transformers são lentos e consomem muita memória em sequências longas, já que a complexidade de tempo e memória da autoatenção é quadrática em relação ao comprimento da sequência. Métodos de atenção aproximada tentaram resolver esse problema sacrificando a qualidade do modelo para reduzir a complexidade computacional, mas frequentemente não alcançam aceleração no tempo de execução real (wall-clock). Argumentamos que um princípio ausente é tornar os algoritmos de atenção cientes de IO (IO-aware) — levando em consideração as leituras e gravações entre os níveis de memória da GPU. Propomos o FlashAttention, um algoritmo de atenção exata ciente de IO que utiliza particionamento em blocos (tiling) para reduzir o número de leituras/gravações de memória entre a memória de alta largura de banda da GPU (HBM) e a SRAM on-chip da GPU. Analisamos a complexidade de IO do FlashAttention, demonstrando que ele requer menos acessos à HBM do que a atenção padrão e é ótimo para uma variedade de tamanhos de SRAM. Também estendemos o FlashAttention para atenção esparsa em blocos (block-sparse attention), gerando um algoritmo de atenção aproximada que é mais rápido do que qualquer método de atenção aproximada existente. O FlashAttention treina Transformers mais rapidamente do que as linhas de base existentes: aceleração de tempo real ponta a ponta de 15% no BERT-large (comprimento de sequência 512) em comparação com o recorde de velocidade de treinamento do MLPerf 1.1, aceleração de 3 no GPT-2 (comprimento de sequência 1K) e aceleração de 2,4 no Long-Range Arena (comprimento de sequência 1K-4K). O FlashAttention e o FlashAttention esparso em blocos viabilizam contextos mais longos em Transformers, resultando em modelos de maior qualidade (melhoria de 0,7 na perplexidade no GPT-2 e ganho de 6,4 pontos na classificação de documentos longos) e capacidades inteiramente novas: os primeiros Transformers a alcançar desempenho melhor que o acaso no desafio Path-X (comprimento de sequência 16K, 61,4% de acurácia) e no Path-256 (comprimento de sequência 64K, 63,1% de acurácia).

Resumo 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).

Guia de leitura

Problema e motivação

Os Transformers possuem complexidade quadrática de tempo e memória em relação ao comprimento da sequência . Embora métodos de atenção aproximada reduzam a contagem teórica de FLOPs, muitas vezes eles falham em proporcionar acelerações no tempo de execução real porque as computações em GPUs modernas são limitadas principalmente por transferências de memória (IO), em vez de operações aritméticas.

Na atenção padrão, o cálculo de , e grava matrizes intermediárias de tamanho na lenta High Bandwidth Memory (HBM) e as lê repetidamente. Isso incorre em acessos à HBM e uma pegada de memória de , limitando o tamanho prático das janelas de contexto.

Ideias centrais

  • Consciência de IO (IO-Awareness): Levar em consideração explicitamente a hierarquia de memória da GPU: a SRAM on-chip, que é rápida e pequena (por exemplo, 192 KB/SM com largura de banda de ~19 TB/s na A100), versus a HBM, grande e lenta (40–80 GB com largura de banda de 1,5–2,0 TB/s).
  • Tiling (Cálculo do Softmax em Blocos): Dividir a entrada em blocos que caibam inteiramente na SRAM. Ao rastrear as estatísticas cumulativas de máximo por linha e normalizadores do softmax, a redução do softmax é calculada incrementalmente entre os blocos sem materializar a matriz completa na HBM.
  • Recomputação no Backward Pass: Evitar o armazenamento da matriz de atenção intermediária para a retropropagação. Em vez disso, armazena-se apenas a saída e as estatísticas do softmax , recomputando e on-chip bloco por bloco na SRAM durante o backward pass.
  • Fusão de Kernels (Kernel Fusion): Fundir multiplicações de matrizes, mascaramento, softmax e dropout em um único kernel CUDA para eliminar viagens redundantes de ida e volta à HBM.

Método (com as equações principais)

Dados , o FlashAttention define os tamanhos de bloco e , onde é a capacidade da SRAM.

Rastreamento Incremental do Softmax

Para um vetor decomposto em subvetores e , as estatísticas cumulativas são atualizadas via:

Para o bloco de chaves/valores e o bloco de consultas:

  1. Computar pontuações não normalizadas na SRAM: .
  2. Computar estatísticas locais do bloco: , e .
  3. Atualizar os normalizadores globais cumulativos:
  4. Atualizar o bloco de saída cumulativo :

Análise de Complexidade

  • Complexidade de IO: A atenção padrão requer acessos à HBM. O FlashAttention requer acessos à HBM. Os autores provam que nenhum algoritmo de atenção exata pode atingir assintoticamente acessos para todos os valores de .
  • FLOPs e Memória: O FlashAttention realiza FLOPs (com ligeiramente mais FLOPs no backward pass devido à recomputação) e requer apenas de memória auxiliar além das entradas e saídas.

Extensão: Block-Sparse FlashAttention

Restringir a avaliação a blocos não nulos de acordo com uma máscara de esparsidade predefinida alcança uma complexidade de IO de , onde é a fração de blocos não nulos.

Resultados (com os números mais importantes)

  • Aceleração do Treinamento:
    • BERT-large (tam. seq. 512): Supera o recorde de velocidade de treinamento do MLPerf 1.1 em 15% (17,4 min vs. 20,0 min em A100s).
    • GPT-2 (tam. seq. 1K): Alcança aceleração de até 3,5x sobre o HuggingFace e até 1,8x sobre o Megatron-LM.
    • Long-Range Arena (LRA): Proporciona aceleração de 2,4x sobre a atenção padrão; o Block-sparse FlashAttention atinge 2,8x de aceleração.
  • Capacidades com Contextos Mais Longos:
    • GPT-2 com contexto de 4K: Treina mais rápido que o Megatron-LM com contexto de 1K, enquanto melhora a perplexidade de validação em 0,7 pontos (17,5 vs. 18,2).
    • Classificação de Documentos Longos: Escalar o contexto de 512 para 16K resulta em um ganho de 4,3 no micro- no MIMIC-III (52,8 para 57,1) e de até 8,5 no ECtHR (72,2 para 80,7 com 8K).
    • Path-X e Path-256: O FlashAttention é o primeiro Transformer a resolver o Path-X (tam. seq. 16K) com 61,4% de acurácia. O Block-sparse FlashAttention alcança 63,1% de acurácia no Path-256 (tam. seq. 64K).

Limitações e questões em aberto

  • Sobrecarga de Engenharia em CUDA: A implementação de kernels cientes de IO requer programação customizada de baixo nível em CUDA, em vez de abstrações padrão de PyTorch ou compiladores, tornando a portabilidade entre arquiteturas de hardware um desafio.
  • Atenção Multi-GPU: O cronograma ótimo de IO em um único nó não se estende automaticamente para a atenção distribuída multi-GPU através de interconexões (NVLink, InfiniBand).
  • Limite Inferior para Atenção Exata: Embora seja ótimo para de maneira geral, provar limites inferiores refinados de complexidade parametrizada em termos de continua sendo um problema em aberto.

Termos-chave

IO-awareness
O princípio algorítmico de projetar operações levando em consideração as leituras e gravações entre níveis de memória do hardware (por exemplo, SRAM on-chip rápida vs. HBM mais lenta).
High Bandwidth Memory (HBM)
A memória principal de grande capacidade da GPU, que oferece alto volume de armazenamento, mas largura de banda significativamente menor do que a memória cache on-chip.
SRAM
Memória scratchpad rápida e on-chip em GPUs modernas, localizada dentro de cada Streaming Multiprocessor (SM).
Tiling
Reestruturação de uma computação dividindo as matrizes de entrada em blocos menores que cabem na SRAM e acumulando os resultados ao longo de múltiplas passagens.
Selective gradient checkpointing
Uma técnica que evita salvar a grande matriz de atenção intermediária durante o forward pass, recalculando-a on-chip durante o backward pass por meio de estatísticas de softmax em cache.
Kernel fusion
Combinação de múltiplas operações distintas (multiplicação de matrizes, mascaramento, softmax, dropout) na execução de um único kernel de GPU para eliminar leituras/gravações repetidas na HBM.
Block-sparse FlashAttention
Uma extensão do FlashAttention que computa apenas blocos de tiles não nulos definidos por uma máscara de esparsidade em blocos, reduzindo a complexidade de IO proporcionalmente à fração de esparsidade.
Path-X / Path-256
Benchmarks de raciocínio visual com sequências longas do Long-Range Arena (comprimentos de sequência de 16K e 64K) nos quais Transformers anteriores falhavam em superar o desempenho ao acaso.

Perguntas

O FlashAttention aproxima a matriz de atenção?

Não. O FlashAttention calcula a autoatenção exata com resultados matemáticos idênticos aos da atenção padrão, respeitando os limites da precisão numérica de ponto flutuante.

Por que o FlashAttention é mais rápido se ele realiza mais FLOPs no backward pass?

Porque a atenção padrão é limitada por largura de banda de memória (memory-bound); mover a matriz entre a HBM e a SRAM consome muito mais tempo real do que executar operações aritméticas adicionais na rápida SRAM.

Quais dados de memória auxiliar o FlashAttention armazena para o backward pass?

O FlashAttention armazena apenas a saída do forward , os fatores de normalização do softmax e (exigindo memória extra de ) e o estado do gerador pseudoaleatório para reproduzir as máscaras de dropout on-chip.

Como o FlashAttention se compara em complexidade de IO com a atenção padrão?

A atenção padrão requer acessos à HBM, enquanto o FlashAttention requer acessos, onde é o tamanho da SRAM e é a dimensão do head.

A explicação desta página foi escrita por IA a partir do artigo e pode conter erros. Consulte o artigo para os detalhes.

Ler com tradução e IA