Wat is Flash-Decoding en wanneer versnelt het LLMs?
Automatische vertaling
Dit artikel is automatisch vertaald vanuit de oorspronkelijke Engelse versie.
Flash-Decoding paralleliseert decode-attention over de gecachte key/value-sequentie. Verschillende GPU-blokken verwerken verschillende delen van een lange geschiedenis en combineren vervolgens de gedeeltelijke attention-uitvoer met een numeriek correcte normalisatie. Dit kan generatie met kleine batches helpen wanneer een lange cache meer werk biedt dan de bestaande uitvoeringsplanning voor attention efficiënt kan verwerken.
Het versnelt een attention-bewerking. De resulterende versnelling bij serving hangt ook af van de tijd die andere delen van het model kosten.
Waarom decode een andere uitvoeringsplanning nodig heeft
Tijdens prefill kunnen veel queryposities parallel worden verwerkt. Tijdens gewone decode levert elke actieve sequentie één nieuwe querypositie. Een kleine batch kan daardoor te weinig onafhankelijke blokken bieden om de GPU effectief te benutten, ook al moet elke query een lange geschiedenis lezen.
Flash-Decoding maakt extra werkeenheden door die geschiedenis op te delen. Elke eenheid berekent een gedeeltelijke uitvoer en een log-sum-exp-normalisatiewaarde. Een reductie combineert die tot de uitvoer die attention over de volledige geschiedenis vereist. Zie de uitleg over Flash-Decoding van de Stanford-auteurs.
Bij een korte geschiedenis kan het extra werk voor gedeeltelijke resultaten en de reductie meer kosten dan het oplevert. Een grotere batch kan al voldoende parallel werk bieden. In beide gevallen is winst door verdere opsplitsing van de sequentie niet gegarandeerd.
Het gerapporteerde resultaat interpreteren
De auteurs rapporteerden een tot achtvoudige versnelling van begin tot eind voor hun evaluatie van CodeLlama-34B met batchgrootte één op vier A100-GPUs, met sequentielengtes van 512 tot 64K. Die vergelijking gebruikte de door hen gekozen baseline en uitvoeringsconfiguratie. Ze voorspelt geen achtvoudige verbetering ten opzichte van een huidige server met een al geoptimaliseerde decode-backend.
Als je je server test:
- controleer of de geselecteerde attention-backend de methode daadwerkelijk gebruikt;
- vergelijk hetzelfde model, dezelfde GPU-indeling, cacheprecisie en sequentielengtes;
- test zowel batchgrootte één als een realistisch aantal gelijktijdige aanvragen;
- registreer de tijd van de attention-kernel afzonderlijk van de volledige decode-stap;
- meet de latency van uitvoertokens en de numerieke correctheid.
Een snellere attention-kernel kan ervoor zorgen dat het lezen van weights, feed-forward-berekeningen of communicatie de grootste resterende kostenpost vormt. Gebruik het resultaat van begin tot eind om te beslissen of je de serving-configuratie wijzigt.
Engineeringgids: Flash-Decoding verbindt het opsplitsen van sequenties met het onderscheid tussen prefill en decode.