Wat FlashAttention verandert bij transformer-inference
Automatische vertaling
Dit artikel is automatisch vertaald vanuit de oorspronkelijke Engelse versie.
FlashAttention berekent exacte attention zonder de volledige matrices met attention-scores en waarschijnlijkheden in het hoofdgeheugen van de GPU op te slaan. Het verwerkt kleinere blokken en combineert hun resultaten met een online softmax. Dit vermindert het geheugenverkeer en de opslag van tussenresultaten, terwijl de hoeveelheid rekenwerk voor dichte attention kwadratisch blijft groeien met de sequentielengte.
Minder geheugengebruik maakt de groei van het rekenwerk voor dichte attention niet lineair.
Maak onderscheid tussen opslag en rekenwerk
Standaard gematerialiseerde attention berekent scores voor elk zichtbaar query/key-paar, normaliseert die scores en vermenigvuldigt ze met de values. Een vierkante attention-matrix zonder masker bevat N² elementen voor N tokens.
Het oorspronkelijke FlashAttention-artikel verdeelt die berekening in blokken die op de chip passen. Het houdt normalisatiestatistieken en uitvoeraccumulatoren bij in plaats van alle waarschijnlijkheden naar HBM te schrijven. Bij vaste head-dimensies groeit de benodigde opslag voor attention-tussenresultaten lineair met de sequentielengte. Het blijft de dichte query/key-interacties berekenen die het attention-masker vereist.
Het algoritme berekent exacte attention; een andere uitvoeringsvolgorde van floating-pointbewerkingen kan kleine numerieke verschillen veroorzaken. Het is geen benaderende sparse-attentionmethode die bepaalde tokenparen weglaat.
Implementatie en werklast blijven van belang
| Vraag | Waarom je dit moet controleren |
|---|---|
| Ondersteunt de backend deze GPU en precisie? | Kernelimplementaties richten zich op specifieke hardware |
| Worden de head-dimensie, het masker en de cache-indeling ondersteund? | Niet-ondersteunde vormen kunnen tot de keuze van een andere backend leiden |
| Beslaat attention een groot deel van de aanvraagtijd? | Een grote winst in de kernel kan een klein totaaleffect hebben |
| Gaat het om prefill of decode van één token? | Hun parallel uitvoerbare werk verschilt |
FlashAttention-2 paralleliseert ook blokken van de query-sequentie, naast batches en heads, en vermindert andere uitvoeringskosten. FlashAttention-3 richt zich op uitvoeringsfuncties die specifiek zijn voor Hopper. Versienamen beschrijven algoritmen en implementaties; ze tonen niet aan welke backend je server daadwerkelijk heeft geselecteerd.
Controleer de geselecteerde backend in de serving-runtime met vastgezette versie. Meet prompt-latency, piekgeheugengebruik en end-to-end-throughput bij representatieve lengtes en batchgroottes. Vergelijk identieke maskers en precisie. Een benchmark die alleen kernel-TFLOPS rapporteert, toont geen verbetering aan van de token-latency die de gebruiker ervaart.
Engineeringgids: FlashAttention behandelt opeenvolgende versies en hun metingen binnen de bijbehorende afbakening.