FlashAttention 4: Snellere, Geheugenefficiënte Aandacht voor LLM's
Inleiding
Geschaalde-dot-product attentie (SDPA) domineert de inferentietijd en het energieverbruik van grote taalmodellen (LLM's): bijna alle operatoruitvoeringen gebeuren binnen één primitief. Attentie neemt queries (Q) en vermenigvuldigt deze met keys (K). Vervolgens wordt het resultaat genormaliseerd via een softmax-operatie voordat het wordt vermenigvuldigd met values (V) om de output te produceren. Het is geheugenintensief: Q/K/V meerdere keren lezen uit hoogdoorvoermemory en vervolgens herhaaldelijk tussentijdse tegels wegschrijven.
FlashAttention-families verminderen deze knelpunten door meer gegevens langer op de chip te houden door gebruik te maken van GPU-streamingmultiprocessors (SM's). Voor het eerst open-source gemaakt in 2022, herstructureerde FlashAttention de attention-routine om softmax on-the-fly te berekenen. Slechts een paar rijen van Q × K worden op elk moment op de chip opgeslagen.
Dit artikel dient als een praktijkgerichte diepgaande verkenning van FlashAttention 4 (FA4). We zullen samenvatten wat er sinds eerdere versies is veranderd en enkele richtlijnen geven voor adoptie en benchmarking. Ons doel is om LLM-infrastructuuringenieurs, kernel-ingenieurs en ML-platformteams voldoende informatie te geven om te weten wanneer – en of – FA4 in hun stack gebruikt zou moeten worden.
Belangrijkste punten
- A4 is ontworpen als een Blackwell-first attentie-kernel, bedoeld voor gebruik op SM100 GPU's. Het beschikt over een warp-gespecialiseerde 5-fasen pijplijn die meer overlap en hergebruik op de chip mogelijk maakt in vergelijking met eerdere generaties van FlashAttention.
- De efficiëntie van softmax wordt verbeterd door twee hoofdzakelijke technieken: het uitvoeren van de software exp2() op de CUDA-kernen zelf om de belasting van SFU's te verminderen, en adaptieve online herschaling om onnodige herschaalberekeningen te vermijden terwijl de stabiliteit behouden blijft.
- Er ontbreken nog enkele functies: FA4 is forward-first en mist momenteel implementaties voor de backwards-pass, varlen, en GQA/MQA, wat het gebruik voor training en sommige modelarchitecturen beperkt.
- Adopteer FA4 pragmatisch: gebruik het eerst voor Blackwell-afleiding, stel het beschikbaar achter benchmarking + correctheidscontroles + noodoplossingen, en behoud FA3 (Hopper)/FA2 (Ampere/Ada) als de stabiele standaard voor brede productiebehoeften.
Waarom aandachtkernels nog steeds de kosten van LLM's domineren
Ondanks de hoge FLOPS die door GPU's worden geleverd, zijn transformermodels vaak beperkt door de geheugenbandbreedte, omdat attention Q, K en V meerdere keren uit het globale geheugen moet laden. Om het attention‑output voor elk query-token te berekenen, moet elk token dot-producten maken met tot duizenden key-tokens, dit resultaat normaliseren en herschalen, en uiteindelijk de values ophalen. Eenvoudige implementaties berekenen de gehele Q×K-matrix en slaan deze in het geheugen op. Dit overschrijdt snel de grootte van het on-chip geheugen, wat leidt tot prestaties die worden belemmerd door off-chip leesbewegingen.
FlashAttention verlicht dit probleem door de attentiematrix in tegels op te delen. In plaats van Q×K volledig te materialiseren, streamt het kleine tegels van Q en K naar gedeeld geheugen, berekent de softmax over de tegel en bewaart alleen het lopende maximum en de som voor elke querijrij. Dit vermindert het geheugentraffic aanzienlijk, waardoor de kernel computationeel gebonden wordt.
FlashAttention Evolutie in Vogelvlucht
Het is nuttig om te begrijpen hoe FlashAttention zich in de loop der tijd heeft ontwikkeld. Elke versie maakte gebruik van nieuwe hardwarefuncties om de snelheid of efficiëntie te verbeteren. FA4 is specifiek geoptimaliseerd voor Blackwell-generatie GPU's. Hier is een tabel van elke FlashAttention-versie met de belangrijkste verbeteringen die ze hebben gebracht en hun prestatie-impact:
| Versie (Jaar) | Doel GPU-architectuur | Belangrijkste innovaties | Prestatiehoogtepunten |
|---|---|---|---|
| FlashAttention (v1) – 2022 | Ampère (NVIDIA A100) en eerder | IO-bewuste exacte aandacht (tegeling + on-chip buffering) om off-chip geheugentraffic te verminderen. | 2–4× sneller dan de standaard PyTorch-attentie; tot 10–20× geheugenbesparing vergeleken met naïeve implementaties. |
| FlashAttention-2 – 2023 | Ampère (A100), Ada (RTX 30/40) | Betere paralleliteit en werkverdeling (hogere bezetting), verbeterde warp-planning. Ondersteuning voor meerdere/gerubriceerde querykoppen (MQA/GQA). | Ongeveer ~2× sneller dan v1; bereikt ~50–73% van de theoretische FLOPS van de A100 (~225 TFLOPS/s). |
| FlashAttention-3 – 2024 | Hopper (H100/H800) | Benut asynchrone berekeningen en databeweging (Tensor Memory Accelerator, warp-specialisatie). Afgewisselde GEMM/softmax-pijplijnen. FP8-low-precision ondersteuning met verbeterd numeriek gedrag. | 1,5–2× sneller dan v2 op H100; ~740 TFLOPs/s FP16 (~75% benutting) en tot ~1,2 PFLOPs/s in FP8. |
| FlashAttention-4 – 2025 | Blackwell (bijv. B200, SM 10.x) | Verdere pijplijnspecialisatie voor Blackwell-concurrentie. Softwarebenaderingen (exp) en geoptimaliseerde online softmax. Kernel-architectuur afgestemd op Blackwell (via CUDA/CUTLASS/DSL). | ~20–22% sneller dan cuDNN-attentie op Blackwell in benchmarks; gerapporteerde prestatieverbeteringen. |
Wat is nieuw in FlashAttention 4
FlashAttention 4 bouwt voort op het op tegels gebaseerde computerparadigma van eerdere FlashAttention-versies: Q/K/V-tensoren worden tegel voor tegel (blok voor blok) verwerkt om de gegevenslocatie op de chip te maximaliseren en het verkeer naar het globale geheugen te minimaliseren. Individuele kernelinstanties (een zogenaamde coöperatieve threadarray of CTA) werken samen om een of meer uitvoertegels te berekenen door de overeenkomstige tegels van Q, K en V vanuit het globale geheugen te streamen en deze vervolgens op de uiteindelijke aandachtsuitvoer te projecteren.
De interne werking van FA4 bestaat uit een sterk gepijplijnde planning die verschillende fasen van de attentieberekening overlapt om de latentie te verbergen en het gebruik van GPU-bronnen te maximaliseren. In tegenstelling tot FlashAttention 3, dat in wezen een overlappende 2-fasen load/compute heeft, verdeelt FA4 de berekening in meerdere sets van gelijktijdige fasen, waarbij verschillende delen van de pijplijn door aparte warp-groepen worden behandeld. Deze warp-groepen specialiseren zich elk in één verantwoordelijkheid tijdens de 'levenscyclus' van een tile door de attentiefunctie.
Dit warp-specialisatiemodel wijst 32-draads warps toe aan specifieke taken, zoals:
- Gegevensoverdracht (loads): het ophalen van query-, key- en value-tegels uit het globale geheugen naar snellere opslag op de chip.
- Computatiestadia: Het uitvoeren van gedeeltelijke attentiescores met behulp van matrixvermenigvuldig- en optelhardware met tensor cores.
- Softmax- en normalisatielogica: exponentiële + normalisatiebewerkingen voor aandacht-softmaxgewichten.
- Schaalverandering en reductielogica: het toepassen van numerieke aanpassingen of het combineren van gedeeltelijke resultaten voordat ze worden opgeteld.
- Epilogue/store-bewerkingen: voltooide tegels van de outputtensor terugschrijven naar het globale geheugen.
De intuïtie achter het basisuitvoeringsmodel is het onderhouden van asynchrone pijplijnen voor elke warp-groep, zodat de GPU-warpplanner snel kan schakelen tussen warp-groepen zodra bronoperanden beschikbaar komen.
Software-exponentials via CUDA-kernen
Een bijzonder opvallende nieuwe truc in FA4 is hoe het de exponentiële functie berekent die wordt gebruikt in softmax. Normaal gesproken maken kernels gebruik van speciale SFU's op de GPU om dure wiskundige bewerkingen zoals exp() uit te voeren. Omdat er echter relatief weinig SFU's per SM zijn, kunnen ze gemakkelijk een bottleneck in de wachtrij worden.
FA4 omzeilt deze beperking door normale CUDA-cores exponentiële functies bij benadering in software te laten uitvoeren. Concreet bevat FA4 een aangepaste implementatie van een exp2(x) polynomiale benadering met hardwareprecisie. FA4 simuleert het uitvoeren van de exponentiële berekening met behulp van een cubische polynoom, die vervolgens parallel kan worden uitgevoerd over veel CUDA-cores in plaats van geconcentreerd op een paar SFU's.
Het resultaat: geen wachten meer op SFU's om softmax uit te voeren. Door exp() op algemene cores te verwerken, stelt FA4 de warp die softmax berekent beter in staat om het tempo van de pijplijn bij te houden.
Slimmere Online Softmax-herwaardering (Nieuw in FA4)
Een andere innovatie in FA4 heeft betrekking op hoe de softmax-accumulatie de numerieke stabiliteit behoudt. Net als alle FlashAttention-versies doet, voert het een 'online' softmax uit – het accumulateert gedeeltelijke max()-waarden en sommen terwijl ze door de sequentie stromen (om overloop te voorkomen). Vorige versies werkten de lopende schaalfactor constant bij (meestal de maximale logit tot nu toe). Ze zouden voortdurend herschalen – elke keer dat ze een nieuwe maximale waarde zagen, zou er herschaling plaatsvinden om de stabiliteit van de softmax te behouden. FA4 introduceert een adaptief herschalingsbeleid. Het voert alleen herschaling uit als de nieuwe maximumwaarde die je ziet significant groter is dan de oude. Dit zou naar verluidt de frequentie van herschaaloperaties met een factor 10 verminderen. Laten we het volgende diagram overwegen:
Het diagram vergelijkt twee versies van herschaling die in FlashAttention worden gebruikt, waarmee een stabiele en geheugen-efficiënte berekening van aandacht mogelijk is. De oorspronkelijke strategie schaalt de output van elk blok bij als de maximumwaarde verschijnt, wat ervoor zorgt dat kleine sommen nauwkeurig blijven door de bijdragen stap voor stap te normaliseren. Met adaptieve herschaling houden we lokale en globale maxima bij, waarbij we alleen herschalen wanneer de sprongen optreden of de blokken groter worden. Dit vermindert de overhead terwijl overloop nog steeds wordt voorkomen en een numeriek stabiele optelling van termen met kleine waarden mogelijk blijft.
Compatibiliteit en huidige status
Deze tabel geeft een overzicht van de verwachte compatibiliteit van FlashAttention 4 (FA4) en wat er vandaag de dag werkt door de gehele stack:
| Aspect | Huidige status (Wat vandaag werkt) | Notities/Bron |
|---|---|---|
| Hardwaredoel | FA4-kernen zijn ontworpen voor Blackwell (SM10.x/B200) GPU's | FA4 is geoptimaliseerd voor Blackwell-generatie GPU's. FA3 en eerdere versies ondersteunen oudere architecturen; ondersteuning voor Blackwell wordt toegevoegd. (Modal) |
| Blackwell-ondersteuning in officiële releases | Werk in uitvoering | Blackwell-ondersteuning is nog niet opgenomen in uitgebrachte versies; gebruikers volgen de ondersteuning voor de sm_120-architectuur. |
| Voorwaartse Doorvoer (FA4) | Functioneel/Beschikbaar | De FA4 forward attention-kernel is toegewezen en kan draaien op Blackwell met de juiste builds. |
| Terugwaartse Passe (FA4) | Onvolledig/Beperkt | De backward pass voor Blackwell mist belangrijke functies zoals varlen en GQA-ondersteuning. |
| Ondersteuning voor sequenties van variabele lengte | Niet volledig ondersteund (achterwaarts) | Gemeld als ontbrekend in de achterwaartse implementatie; in ontwikkeling. |
| GQA/Geclusterde-Query Aandacht | Nog niet ondersteund (achterwaarts) | De backward-pass ondersteunt geen grouped-query-attentie en vergelijkbare varianten. |
| Frameworkintegratie | Nog niet ondersteund | vLLM herkent momenteel alleen FA2 of FA3 en geeft een foutmelding voor FA4. (vLLM Forums) |
| Frameworkintegratie (PyTorch SDPA) | Nog niet opgenomen in stabiele versies | De scaled dot-product attention backends (SDPA) van PyTorch hebben nog geen FA4-ondersteuning uitgebracht. |
| Vereisten voor CUDA Toolkit/Driver | CUDA 12.8+ wordt vaak gebruikt voor Blackwell-builds | Blackwell/SM10-builds worden doorgaans gecompileerd met recente CUDA-toolkits (≥12.8), hoewel specifieke vereisten met de ontwikkeling evolueren. |
De forward pass van FA4 is al breed beschikbaar (gecommit) in de openbare broncodeboom. Er zijn openstaande berichten in projecten zoals het Lab's FlashAttention-repo waar gebruikers volledige ondersteuning voor backward pass/varlen/group/GQA aanvragen. Dit impliceert dat het nog steeds een openstaand openbaar probleem is.
Ondersteuning voor sequenties van variabele lengte (efficiënte batching van sequenties met verschillende lengtes zonder opvulling) en GQA (Grouped-Query Attention) worden nog niet ondersteund in de backward pass. GQA is een aandachtstruc waarbij meerdere aandachtshoofden dezelfde key/value-projecties gebruiken (soms gebruikt in LLM's om geheugen te besparen). Vorige versies van FlashAttention ondersteunden wel MQA/GQA-stijlconfiguraties. De belangrijkste forward-kernel van FA4 zal echter waarschijnlijk aannemen dat hetzelfde aantal hoofden wordt gebruikt voor elke query. Het ondersteunt waarschijnlijk dus nog geen correct gegroepeerde hoofden. Modellen met grouped-query attention (zoals sommige varianten van Llama2) worden door FA4 niet ondersteund totdat dit is geïmplementeerd.
Integratie in het ecosysteem: FA4 wordt nog niet door veel hogere frameworks/lagen gebruikt omdat het nieuw is. Een voorbeeld is de vLLM-servengine (hooggeoptimaliseerd voor LLM-inferentie), die momenteel geen FA4-ondersteuning heeft – alleen FlashAttention 2 en 3 worden ondersteund. Het selecteren van FA4 in vLLM zal resulteren in een foutmelding “niet-ondersteunde versie” omdat hun versiekeuze momenteel alleen het kiezen tussen versie 2 of 3 mogelijk maakt.
Hoe FlashAttention te adopteren – Besluitvormingsgids
Gebruik deze tabel om te bepalen welke versie van FlashAttention het beste bij uw behoeften past.
| Je bent op Ampere/Ada (A100, RTX 30/40, enz.) | Gebruik FlashAttention-2 (FA2) | FA4 is alleen voor Blackwell (SM10.0) en zal niet draaien of compileren op SM8.x. FA2 is het best ondersteunde pad op Ampere/Ada en is breed geïntegreerd in moderne stacks. |
|---|---|---|
| Je bent op Hopper (H100/H200) | Gebruik FlashAttention-3 (FA3) | FA3 is ontworpen voor Hopper en levert doorgaans sterke verbeteringen (vaak 1,5–2× in vergelijking met FA2) met volwassen functiedekking (achterwaarts compatibel, varlen, GQA/MQA-ondersteuning in gangbare implementaties). FA4 is niet bedoeld voor Hopper. |
| Je hebt geen Blackwell-hardware (geen B200/B100) | Gebruik geen FA4 | Het heeft geen zin om FA4 te proberen: het is afgestemd op SM10.0 en zal niet correct compileren of draaien op SM8.x/9.x. Kies in plaats daarvan de nieuwste FlashAttention-versie die door je GPU wordt ondersteund (FA2 voor Ampere/Ada, FA3 voor Hopper). |
| U heeft Blackwell (B200/B100) en uw werklast is alleen inferentie | Test FA4 (vooruit) eerst, met een fallback | FA4 is vandaag forward-first, dus inferentie is de beste match. Verwacht het grootste voordeel bij lange reeksen en standaard aandachtspatronen. Houd de cuDNN/SDPA-terugval ingeschakeld om harde fouten of regressies te voorkomen als een functie ontbreekt. |
| Je hebt Blackwell en je werkbelasting is training (moet terug) | Geef de voorkeur aan een volwassen trainingspad totdat FA4 backward bestaat | Training vereist een backward pass. Met FA4 forward-only valt je backward waarschijnlijk terug op een andere kernel, wat de stap tijd kan domineren. Opties: (a) train op Hopper met FA3 indien beschikbaar, (b) accepteer voorlopig de tragere backward op Blackwell, (c) wacht op FA4 backward-ondersteuning. |
Uw model heeft variabele batchverwerking nodig (ongelijke batches via cu_seqlens) | Vermijd FA4 tenzij je kunt opvullen of een alternatief accepteert | Als FA4 geen varlen-ondersteuning in je stack heeft, zul je fouten of stille terugvallen zien. Oplossingen: opvullen tot uniforme lengtes, indelen op lengte, of FA4 uitschakelen voor varlen-gevallen. |
| Uw model gebruikt GQA/MQA (gegroepeerde-querykoppen, Llama-varianten, enz.) | Controleer zorgvuldig; wees klaar om FA4 uit te schakelen | Als GQA niet wordt ondersteund in FA4 voor jouw pad (vooral achteruit, en soms vooruit), kun je verkeerd gedrag krijgen of terugvallen. Gebruik een bekend werkende backend (FA3/cuDNN/SDPA) totdat GQA in jouw omgeving is bevestigd. |
| Je wilt FP4- of ultra-lage precisiefuncties | Ga er niet van uit dat FA4 dit al ondersteunt | De adoptie van FA4 zou moeten beginnen met BF16/FP16. Het gebruik van FP4 is afhankelijk van ondersteuning door de kernel en het framework en is niets om op te rekenen voor vroege FA4-implementaties, tenzij dit expliciet in je toolchain gedocumenteerd is. |
| Je hebt maximale stabiliteit en ‘strijd-geteste’ prestaties nodig | Kies de meest volwassen optie voor je GPU (vaak FA3 op Hopper, FA2 op Ampere, cuDNN/SDPA fallback op Blackwell) | FA4 is nieuw en in ontwikkeling; vroege releases kunnen ontbrekende functies en bugs in randgevallen hebben. Als het risico in productie onaanvaardbaar is, geef dan prioriteit aan volwassen kernels en introduceer FA4 alleen achter een feature-flag met strikte correctheidscontroles. |
| Je kunt experimenteren en agressief optimaliseren | Voer FA4 stapsgewijs in op Blackwell | Beste aanpak: schakel FA4 in voor een klein segment (inference, long-seq buckets, niet-GQA, vaste lengte), meet doorvoer/latentie, controleer de numerieke waarden en breid vervolgens de dekking uit naarmate de ondersteuning verbetert. |
Veelgestelde vragen
Welk probleem probeert FlashAttention 4 (FA4) op te lossen?
Het vermindert het zware HBM-geheugenverkeer van aandacht door aandacht te berekenen tegel-voor-tegel op de chip, waardoor het materialiseren van de volledige QK⊤-matrix wordt voorkomen.
Wat is de belangrijkste architecturale verandering in FA4 ten opzichte van FA3?
FA4 gebruikt een warp-gespecialiseerde, ongeveer 5-fasen pipeline (laden, berekenen, softmax/normaliseren, herschalen/reduceren, opslaan) om overlap en hergebruik op de chip te vergroten op Blackwell (SM10.x).
Waarom berekent FA4 exponentiële functies op CUDA-kernen in plaats van op SFU's?
Aangezien SFU's schaars zijn en gemakkelijk een knelpunt kunnen worden bij het berekenen van softmax, wijkt FA4 in plaats daarvan uit naar het berekenen van een softwarematige benadering van exp2() op CUDA-cores.
Wat verandert “adaptieve online herschaling” in softmax?
In plaats van elke keer opnieuw te schalen wanneer een nieuw maximum verschijnt, schaalt FA4 alleen wanneer dat maximum aanzienlijk toeneemt. Dit vermindert de her-schaalkosten terwijl de numerieke stabiliteit behouden blijft.
Wanneer zou een ingenieur vandaag FA4 in productie moeten toepassen?
Begin met Blackwell alleen-inferentie, vaste lengte, standaard aandacht achter een feature-flag; houd cuDNN/SDPA (en FA3/FA2 op oudere GPU's) als terugvalopties totdat backward/varlen/GQA ondersteuning volwassen is.
Conclusie
FlashAttention 4 bouwt voort op het doel van FlashAttention om de geheugenbandbreedtevereisten van attention te verminderen door meer van het Q/K/V-werk op de chip uit te voeren. In tegenstelling tot eerdere versies doet FA4 dit echter met een Blackwell-specifieke warpspecialistische 5-fasenpijplijn en twee belangrijke softmax-verbeteringen (het gebruik van software-exponentials op CUDA-cores om SFU-flessenhalzen te verlichten; en het gebruik van adaptieve online herschaling om overbodige stabiliteitsberekeningen te elimineren). FA4 heeft respectabele doorvoersnelheidsverbeteringen in de forward-pass laten zien ten opzichte van cuDNN bij lange sequenties, maar blijft gericht op forward-first en is alleen voor Blackwell. Bovendien heeft FA4 momenteel aanzienlijke tekortkomingen in functionaliteit (ontbrekende backward, varlen, GQA, enz.), en is de ondersteuning vanuit het ecosysteem nog niet volledig ontwikkeld. De conclusie voor nu is om FA4-paden voor Blackwell-inferentie te overwegen als een potentieel veelbelovende optie, die adoptie vereist onder streng benchmarken, correctheid en back-ups. Tegelijkertijd zouden trainingsworkloads en bredere hardware de volwassen FA3/FA2-codepaden voor productie moeten blijven gebruiken.
Referenties
- FlashAttention-3: Snelle en Nauwkeurige Aandacht met Asynchroniteit en Lage Precisie
- FlashAttention 4: Doorbreken van de petaflop-grens in GPU-attentiekernels
- Hoe pas je FA4 toe op de B200?
- Ondersteuning voor FA4 terugwaartse doorgang op Blackwell
Bedankt dat je samen met de Linux-Console.net-community hebt geleerd.




