Hur minskar Flash Attention minnestrafiken under lokal inferens?

Eva Wong är Teknisk skribent och den boende fixaren på ZimaSpace. En livslång nörd med en passion för hemma-labb och öppen källkod, hon specialiserar sig på att översätta komplexa tekniska koncept till tillgängliga, praktiska guider. Eva tror att självhosting ska vara roligt, inte skrämmande. Genom sina handledningar ger hon gemenskapen verktyg att avmystifiera hårdvaruinstallationer, från att bygga sin första NAS till att bemästra Docker-containrar.

Flash Attention minskar minnestrafiken genom att dela upp exakt attention i block, så att mellanliggande resultat kan bearbetas på chippet i stället för att upprepade gånger skrivas till och läsas från GPU:ns HBM.

På en lokal AI-server blir effekten viktigare när promptlängden ökar, eftersom standardattention skapar allt större mellanliggande arbetsdata. Flash Attention ändrar inte modellens kunskap och tar inte bort dess KV-cache; den omorganiserar attention-beräkningen för att flytta mindre data genom de långsammaste nivåerna i GPU:ns minneshierarki.

Standardattention flyttar stora mellanliggande tensorer genom HBM

Attention börjar med query-, key- och value-tensorer och måste beräkna poäng, normalisera dem och kombinera dem med values. En enkel implementation materialiserar stora mellanliggande matriser i högbandbreddsminnet mellan dessa steg.

Den ursprungliga FlashAttention-artikeln hävdar att attentionprestanda inte bara begränsas av aritmetik, utan också av läsningar och skrivningar mellan HBM och SRAM på chippet. Långa sekvenser förstärker denna trafik eftersom poängmatrisen växer med antalet tokenpar.

En GPU i hemmet kan därför lägga betydande tid på att flytta data i stället för att utföra användbara matrisberäkningar, särskilt när kontextlängden ökar.

Flash Attention delar upp problemet i arbetsmängder på chippet

Flash Attention bearbetar block av queries, keys och values som är dimensionerade för att få plats i det snabba minnet på chippet. Varje block utför flera attentionsteg innan mellanliggande data lämnar chippet.

FlashAttention-3 beskriver familjens grundläggande metod som en blockindelning som undviker trafik för mellanliggande data i globalminnet. Algoritmen producerar fortfarande exakt attention för den formulering som stöds.

Blockstorleken beror på hårdvaruresurser och kernelimplementation. Den viktiga mekanismen är datalokalitet: återanvänd inlästa värden medan de befinner sig nära beräkningsenheterna.

Online-softmax undviker att hela poängmatrisen lagras

Vanlig softmax verkar kräva alla poäng för en rad före normaliseringen, vilket skulle tvinga implementationen att materialisera en stor matris. Flash Attention upprätthåller i stället löpande normaliseringsstatistik över flera block.

Tritons tutorial om sammanslagen attention visar sammanslagen attention med blockbaserat softmax-tillstånd. Det gör att delvisa poängblock kan bearbetas och kasseras utan att varje mellanliggande värde skrivs tillbaka till HBM.

Det är här minskad minnestrafik och minskad mängd temporärt minne möts: algoritmen omorganiserar beräkningen så att ett stort mellanliggande objekt aldrig behöver finnas i globalminnet.

Kernel-sammanslagning håller mer av attentionkedjan i samma körningsväg

Poängberäkning, skalning, maskning, normalisering och aggregering av values kan sammanfogas i en samordnad kernel i stället för att köras som separata kernels som utbyter fullständiga mellanliggande resultat via globalminnet.

PyTorchs gränssnitt för skalär punktprodukt-attention kan välja sammanslagna attentionimplementationer när enheten, datatypen, formen och de begärda funktionerna stöds.

Resultatet kan bli snabbare promptbearbetning och mindre maximalt temporärt minne, men den exakta vinsten beror på om körmiljön faktiskt väljer en flash-kompatibel kernel.

Minskad IO är inte samma sak som att ta bort KV-cache

Under autoregressiv inferens måste tidigare genererade keys och values fortfarande finnas tillgängliga för senare token, om inte modellen eller körmiljön använder en separat strategi för borttagning, komprimering, fönstring eller avlastning.

AMDs ROCm-dokumentation beskriver Flash Attention som en förbättring av minneslokaliteten mellan lagring på chippet och HBM. Optimeringen påverkar hur attention läser och beräknar på aktivt tillstånd, inte om historiskt KV-tillstånd finns.

Denna skillnad förhindrar ett vanligt planeringsfel: Flash Attention kan minska arbetsminne och IO, samtidigt som en server med lång kontext ändå får slut på kapacitet eftersom den sparade KV-cachen fortsätter att växa.

Hårdvara och tensorformer avgör om den snabba vägen används

Flash-kernels är specialiserade. Huvuddimension, datatyp, attentionmask, GPU-arkitektur, körmiljöversion och andra funktioner kan tvinga fram en reservlösning med en annan implementation.

ZimaSpaces artikel om attentionminne jämfört med modellparametrar behandlar kapacitetssidan. Flash Attention bör mätas separat som en optimering av körningsvägen.

Testa korta och långa promptar, bekräfta vilken backend som valts och registrera fördröjning vid förfyllning, maximalt allokerat minne, minnesbandbredd och hastighet för utmatningstoken. ZimaSpaces guide till lokal AI-hårdvara ger den bredare kapacitetsbaslinje som kerneloptimering inte kan ersätta.

NVIDIAs Transformer Engine beskriver optimerade attention-backends och hårdvaruberoende körning som en del av en bredare stack för val av kernels.

Teknik- och AI-hubb

Mer att läsa

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.