Hoeveel geheugen heeft de KV cache van een LLM-aanvraag nodig?

Automatische vertaling

Dit artikel is automatisch vertaald vanuit de oorspronkelijke Engelse versie.

Bij een conventionele transformer met volledige attention groeit het geheugen van de KV cache met het aantal gecachte tokens, lagen, key/value heads en bytes per waarde. Vermenigvuldig de toewijzing per sequentie met het aantal gelijktijdige sequenties om de ruwe gegevensomvang te schatten. Reserveer daarna extra geheugen voor weights en runtimewerk.

Deze schatting helpt serving-engineers een workload te dimensioneren. Multi-head latent attention (MLA), sliding-window-, hybride en recurrente caches vereisen schattingen die specifiek zijn voor de architectuur.

Gebruik KV heads in plaats van query heads

De cache bewaart de key- en value-projecties van eerdere tokens, zodat het model ze niet bij elke generatiestap opnieuw berekent. Dense attention leest nog steeds een groeiende tokengeschiedenis. Voor caches met volledige attention en afzonderlijke key/value heads, zoals bij MHA, MQA of GQA, en sequenties van gelijke lengte geldt:

cache bytes = 2 × layers × KV_heads × head_dimension
                × cached_tokens × concurrent_sequences × bytes_per_element

De factor twee telt keys en values. Gebruik bij sequenties van verschillende lengtes de som van hun aantallen gecachte tokens. Lees een expliciete head_dim uit de modelconfiguratie als die beschikbaar is; hidden_size / num_attention_heads is alleen een alternatief voor architecturen die deze verhouding gebruiken.

Meta’s tabel met de Llama 3-architectuur geeft de dimensies voor deze voorbeelden met een FP16/BF16-cache van twee bytes per waarde:

ModelLagen / KV heads / dimensie van de headsTokens per sequentieRuwe cache per sequentie
Llama 3.1 8B32 / 8 / 1288,1921 GiB
Llama 3.1 8B32 / 8 / 128131,07216 GiB
Llama 3.1 70B80 / 8 / 1284,0961.25 GiB
Llama 3.1 70B80 / 8 / 128131,07240 GiB

Een cachebudget van 40 GiB biedt volgens deze berekening ruimte voor maximaal 32 volledige 70B-sequenties van 4,096 tokens. Dit telt alleen de cachegegevens; kies de limiet voor gelijktijdige sequenties nadat u runtimegeheugen hebt gereserveerd.

Controleer de werkelijke geheugentoewijzing van de server

Weights, tijdelijke buffers, activations, gedeeltelijk gevulde blokken en gereserveerde capaciteit vereisen meer geheugen. Gedistribueerde servers kunnen KV heads verdelen of repliceren. Een ondersteunde cache van één byte halveert deze ruwe gegevensomvang, maar schaalfactoren, ondersteuning in de implementatie en kwaliteit kunnen de bruikbare capaciteit veranderen.

Meet de maximale geheugentoewijzing en preëmptie met representatieve prompt- en uitvoerlengtes. PagedAttention verbetert de bloktoewijzing; het verwijdert de opgeslagen key/value-gegevens niet en maakt de sequentielengte niet irrelevant.

Engineeringgids: geheugen van de KV cache bevat een uitvoerbare capaciteitsberekening.