Ce este FlashAttention (FlashAttention-1, 2, 3 și 4)?

Inferență, Parametri și Optimizare Dao et al. 2022–2024; Dao-AILab/flash-attention

Algoritm care calculează exact aceeași atenție, dar pe blocuri care încap în memoria rapidă a GPU-ului, cu memorie liniară și mai puține accesări ale memoriei principale.

Denumire completă

Algoritm exact de atenție, optimizat pentru transferurile de memorie pe GPU (HBM ↔ SRAM)

În atenția standard, timpul și memoria cresc pătratic cu lungimea secvenței, pentru că se construiește matricea completă de scoruri N × N, scrisă și citită din memoria principală a GPU-ului (HBM).

FlashAttention (Dao, Fu, Ermon, Rudra, Ré, 2022) este un algoritm exact, „IO-aware”: împarte calculul în blocuri (tiling) care încap în memoria SRAM de pe cip și calculează softmax-ul incremental, fără să scrie matricea N × N în HBM. Memoria suplimentară devine liniară în lungimea secvenței.

FlashAttention-2 (Dao, 2023) împarte mai bine munca între blocurile de fire de execuție și este de aproximativ 2 ori mai rapid decât prima versiune. FlashAttention-3 (Shah et al., 2024) folosește asincronia Tensor Cores și TMA de pe GPU-urile Hopper și este de 1,5–2 ori mai rapid pe H100 în FP16. FlashAttention-4 este scris în CuTeDSL pentru Hopper și Blackwell.

Concepte cheie și caracteristici

Concept / Parametru Descriere practică
Tiling Q, K și V sunt împărțite în blocuri procesate în SRAM.
Softmax online Normalizarea softmax se calculează pas cu pas, pe blocuri, cu rezultat identic.
Complexitate I/O Atenția standard: Θ(Nd + N²) accesări HBM; FlashAttention: Θ(N²d²/M), unde M este mărimea SRAM (Teorema 2 din lucrare).
Hardware FA2 GPU-uri Ampere, Ada sau Hopper (A100, RTX 3090, RTX 4090, H100), CUDA 12.0+; pentru Turing (T4, RTX 2080) există repository-ul separat flash-attention-turing.
Hardware FA3 / FA4 FA3: H100 / H800, CUDA 12.3+ (beta). FA4: Hopper și Blackwell (de exemplu H100, B200).
Tipuri de date FA2: fp16 și bf16 (bf16 cere Ampere sau mai nou). FA3 adaugă FP8 la forward.

Exemple practice și scenarii reale

Exemplul 1: FlashAttention-2 în Hugging Face Transformers

Argumentul attn_implementation din documentația Transformers; dtype înlocuiește vechiul torch_dtype.

import torch
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3.2-1B",
    dtype=torch.bfloat16,
    attn_implementation="flash_attention_2",
)

Exemplul 2: Schimbarea implementării fără reîncărcarea modelului

model.set_attn_implementation("sdpa")

Greșeli frecvente și capcane

  • Crezi că FlashAttention aproximează atenția. Calculul este exact; câștigul vine din mai puține transferuri de memorie.
  • Crezi că FlashAttention face atenția liniară ca timp. Memoria devine liniară, dar numărul de operații rămâne pătratic în lungimea secvenței.
  • Încerci FA2 pe un GPU Turing sau în FP32. Proiectul principal cere Ampere, Ada sau Hopper și fp16/bf16.

Noțiuni și module înrudite