Wat verandert PagedAttention aan de KV-geheugentoewijzing voor LLMs?

Automatische vertaling

Dit artikel is automatisch vertaald vanuit de oorspronkelijke Engelse versie.

Met PagedAttention kan de attention-cache van een verzoek afzonderlijke geheugenblokken van vaste grootte gebruiken in plaats van één grote aaneengesloten toewijzing. Een bloktabel koppelt de logische tokenposities van het verzoek aan fysieke blokken. Hierdoor hoeft minder vaak vooraf geheugen voor de maximaal mogelijke sequentielengte van een verzoek te worden gereserveerd.

Het belangrijkste voordeel is flexibelere KV-geheugentoewijzing voor gelijktijdige verzoeken. De hoeveelheid key/value-data die voor elke opgeslagen token nodig is, neemt hierdoor niet af.

Ongebruikte ruimte in blokken berekenen

Neem een voorbeeldimplementatie met blokken van 16 tokens. Een sequentie van 35 tokens heeft drie blokken nodig, met ruimte voor 48 tokens. Dertien posities in het laatste blok blijven ongebruikt: ongeveer 27% van de toegewezen posities voor deze korte sequentie.

Alleen het laatste blok hoeft gedeeltelijk gevuld te zijn. Naarmate sequenties groeien, vormt die ongebruikte ruimte een kleiner deel van hun toewijzing. De werkelijke blokgrootte en ondersteunde indelingen hangen af van de runtime, de attention-backend en de versie.

Het PagedAttention-artikel beschrijft het ontwerp voor de koppeling en toewijzing. Er worden extra blokken toegewezen wanneer een sequentie groeit en vrijgegeven wanneer het verzoek eindigt, in plaats van per verzoek een groot aaneengesloten bereik te reserveren.

Delen vereist meer dan toewijzing

Meerdere verzoeken kunnen naar hetzelfde compatibele cacheblok verwijzen. Prefix caching vindt herbruikbare blokken voor identieke voorvoegsels; copy-on-write laat verzoeken uiteenlopen zonder de gedeelde toestand te beschadigen. Een indeling in blokken maakt dit mogelijk, maar levert niet automatisch een beleid voor het opzoeken van cachegegevens en garandeert geen hergebruik tussen verzoeken.

De oorspronkelijke introductie van vLLM rapporteerde 60–80% verspilling bij de eerdere toewijzingsmethoden waarmee werd vergeleken en minder dan 4% bij de gemeten PagedAttention-workloads. De berekening voor een korte sequentie hierboven laat zien waarom minder dan 4% geen universele bovengrens is. De grote verschillen in throughput in de vergelijkingen omvatten ook verschillen in de volledige runtime en mogen daarom niet alleen aan de toewijzing worden toegeschreven.

Meet toegewezen blokken, gebruikte tokenposities, cacheverwijderingen of onderbrekingen en de capaciteit voor gelijktijdige verzoeken. Vergelijk dezelfde lengtes en cacheprecisie. Als de ruwe KV-data al niet in het geheugen passen, kan bloktoewijzing die data niet laten verdwijnen; minder KV-heads, ondersteunde cache-quantization of een kleinere workload kunnen ook nodig zijn.

Engineeringgids: PagedAttention bevat een voorbeeld van een bloktabel.