KV-Cache-Größe berechnen
Eingaben
| Layer | 32 |
|---|---|
| Key/Value-Heads | 32 |
| Head-Dimension | 128 |
| Kontextlänge | 4.096 |
| Batch-Größe | 1 |
| Präzision | FP16 / BF16 (2 Bytes) |
KV-Cache-Größe berechnen
Schätzt den Speicherbedarf des Key-Value-Caches eines Transformers während der Inferenz aus Anzahl der Layer, Key/Value-Heads, Head-Dimension, Kontextlänge, Batch-Größe und Bytes pro Element.
Eingaben
Modell
Workload
Ergebnisse
Geben Sie einen Wert ein, um die Ergebnisse zu sehen.
KV-Cache-Größe
Während der Transformer-Inferenz beachtet das Modell jedes bisher gesehene Token. Um die Key- und Value-Vektoren des gesamten Kontexts nicht bei jedem Generierungsschritt neu zu berechnen, speichert und wiederverwendet es sie — der Key-Value-Cache. Dieser Cache ist beim Serving mit langem Kontext oft der dominierende Verbraucher des Beschleunigerspeichers, mitunter größer als die Modellgewichte selbst. Dieser Rechner schätzt seine Größe aus der Anzahl der Layer, der Anzahl der Key/Value-Heads, der Head-Dimension, der Kontextlänge, der Batch-Größe und den pro gespeicherter Zahl genutzten Bytes.
Warum der Cache existiert
Text Token für Token zu generieren bedeutet, dass jedes neue Token alle vorhergehenden Tokens beachten muss. Ohne Cache würde jeder Schritt den gesamten Prompt und die gesamte bisherige Ausgabe erneut verarbeiten, wodurch die Generierungskosten mit dem Quadrat der Sequenzlänge wachsen. Indem die Keys und Values vergangener Tokens behalten werden, verwandelt das Modell jeden Schritt in Arbeit, die nur proportional zum neuen Token ist. Der Preis dieser Geschwindigkeit ist Speicher: ein Vektorpaar — ein Key und ein Value — für jeden Layer, jeden Key/Value-Head und jedes Token im Kontext.
Die Formel
Der Cache hält zwei Tensoren, Keys und Values, daher beträgt die Größe in Bytes
Kbytes=2⋅L⋅H⋅d⋅s⋅B⋅ewobei die Anzahl der Layer ist, die Anzahl der Key/Value-Heads, die Head-Dimension, die Kontextlänge in Tokens, die Batch-Größe und die Bytes pro gespeichertem Element. Die Division durch ergibt Gigabytes. Die Größe wächst linear mit jedem Faktor, was die Kernintuition ist: Eine Verdopplung des Kontexts, des Batches oder der Anzahl der Layer verdoppelt den Cache.
Grouped-Query-Attention
Die Anzahl der Key/Value-Heads ist genau das, worauf Grouped-Query-Attention (GQA) abzielt. Bei einfacher Multi-Head-Attention besitzt jeder Query-Head ein eigenes Key/Value-Paar. GQA lässt eine Gruppe von Query-Heads einen einzigen Key/Value-Head teilen, und Multi-Query-Attention teilt nur einen über den gesamten Layer. Da der Cache mit skaliert, reduziert ein Übergang von 32 auf 8 Key/Value-Heads den Cache auf ein Viertel, während die Query-Heads — und der Großteil der Modellqualität — erhalten bleiben. Die meisten aktuellen großen Modelle bringen genau aus diesem Grund GQA mit.
Rechenbeispiel
Nehmen wir ein Modell mit 32 Layern, 32 Key/Value-Heads, einer Head-Dimension von 128, das 4.096 Tokens Kontext hält und eine einzelne Sequenz in 16-Bit-Präzision bedient:
Kbytes=2×32×32×128×4096×1×2=2147483648das sind etwa 2,15 GB. Vier solche Sequenzen gleichzeitig zu bedienen vervierfacht den Wert auf rund 8,59 GB. Den Cache auf 8-Bit-Präzision umzustellen würde jede dieser Zahlen halbieren.
Das Ergebnis lesen
Da jeder Faktor linear multipliziert, stapeln sich beim Serving mit langem Kontext und hohem Batch alle Faktoren, und der Cache kann die Gewichte in den Schatten stellen. Deshalb setzen Produktions-Inferenz-Engines auf Cache-Quantisierung zu weniger Bytes pro Element, auf GQA zur Reduktion der Key/Value-Heads und auf Paged Attention, um den Cache ohne Fragmentierung zu packen. Die Compute-Seite desselben Hardware-Budgets findet sich im Attention-Speicher berechnen, und der Modellgewichts-Anteil im VRAM-Rechner für LLM-Inferenz.
Häufig gestellte Fragen (FAQ)
Was ist der KV-Cache?
Während der autoregressiven Generierung beachtet ein Transformer jedes vorherige Token. Statt die Key- und Value-Vektoren für den gesamten Kontext bei jedem Schritt neu zu berechnen, speichert und wiederverwendet er sie — dieser Speicher ist der KV-Cache.
Er tauscht Speicher gegen Geschwindigkeit: ohne ihn würde die Generierung jedes neuen Tokens bedeuten, den gesamten Prompt und die gesamte bisherige Ausgabe erneut zu verarbeiten. Der Cache hält zwei Tensoren, Keys und Values, für jeden Layer und jeden Key/Value-Head, mit einem Eintrag pro Token im Kontext.
Wie verkleinert Grouped-Query-Attention den Cache?
Standard-Multi-Head-Attention hält ein eigenes Key/Value-Paar für jeden Query-Head. Grouped-Query-Attention (GQA) lässt mehrere Query-Heads einen gemeinsamen Key/Value-Head nutzen, und Multi-Query-Attention treibt das auf die Spitze mit einem einzigen gemeinsamen Key/Value-Head.
Da die Cache-Größe proportional zur Anzahl der Key/Value-Heads ist, verkleinert eine Reduktion von etwa 32 auf 8 den Cache um den Faktor vier, während die Query-Heads — und der Großteil der Modellqualität — unberührt bleiben.
Warum ist langer Kontext so speicherintensiv?
Der Cache wächst linear mit der Kontextlänge: Eine Verdopplung der Tokens im Kontext verdoppelt den Cache. Er wächst auch linear mit der Batch-Größe, daher multipliziert das gleichzeitige Bedienen vieler Sequenzen mit langem Kontext beide Faktoren.
Bei großen Kontextlängen kann der KV-Cache den Speicher der Modellgewichte selbst übersteigen, weshalb das Serving mit langem Kontext auf Techniken wie Cache-Quantisierung, GQA und Paged Attention setzt.
Haftungsausschluss
Diese Schätzung zählt nur die Key- und Value-Tensoren bei der angegebenen Präzision und ignoriert Serving-Overhead wie Speicherfragmentierung, Paging-Metadaten und Framework-Reservierungen. Der tatsächliche Verbrauch auf einer konkreten Inferenz-Engine liegt etwas höher.