KAllgemein

KV-Cache (Key-Value Cache)

Zwischenspeicher für Attention-Zustände zur Beschleunigung

Ein KV-Cache (Key-Value Cache) ist ein Zwischenspeicher in Transformer-Modellen, der bereits berechnete „Key“- und „Value“-Vektoren der Attention pro Token ablegt, damit sie bei der Textgenerierung nicht in jedem Schritt neu berechnet werden müssen. Das reduziert Rechenaufwand und Latenz deutlich – besonders bei langen Prompts und in der Inference.

Was bedeutet KV-Cache (Key-Value Cache)?

„KV“ steht für „Key“ und „Value“ – zwei der drei zentralen Bestandteile der Attention (Query, Key, Value). In einem Large Language Model (LLM) wie ChatGPT erzeugt jede Transformer-Schicht aus den bisherigen Tokens Key- und Value-Repräsentationen. Der KV-Cache speichert diese Repräsentationen, sodass das Modell beim nächsten generierten Token nur noch die neuen Keys/Values für das neue Token berechnen und an den Cache anhängen muss.

Wie funktioniert ein KV-Cache?

Bei autoregressiver Textgenerierung wird ein Text Token für Token erzeugt. Ohne Cache müsste das Modell bei jedem neuen Token die Attention über alle bisherigen Tokens erneut „voll“ durchrechnen. Mit KV-Cache läuft es typischerweise so:

  • Schritt 1: Prompt wird tokenisiert und einmal durch das Modell geschickt; pro Schicht werden Keys/Values für alle Prompt-Tokens berechnet.
  • Schritt 2: Diese Keys/Values werden im KV-Cache gespeichert (meist getrennt nach Layer und Attention-Head).
  • Schritt 3: Für das nächste Token berechnet das Modell nur Query sowie die neuen Keys/Values für dieses Token.
  • Schritt 4: Die Attention nutzt den gespeicherten Cache (alte Keys/Values) + die neuen Einträge, um das nächste Token zu bestimmen.
  • Schritt 5: Der Cache wächst mit jedem generierten Token und beschleunigt die folgenden Schritte.

Ergebnis: Die Berechnung pro neuem Token wird deutlich günstiger, weil die teuren Wiederholungen entfallen. In der Praxis ist KV-Caching einer der wichtigsten Gründe, warum Chat-Modelle flüssig „streamen“ können.

Warum ist KV-Cache wichtig?

  • Weniger Latenz: Antworten kommen schneller, besonders bei langen Konversationen.
  • Höherer Durchsatz: Server können mehr Anfragen pro GPU/CPU bedienen.
  • Stabilere Kosten: In der Inference sinkt der Rechenaufwand pro Token – das wirkt sich direkt auf Betriebskosten aus.

Gerade in Automations-Setups (z. B. mit n8n und Automatisierung (Automation)) kann KV-Caching entscheidend sein, wenn viele Chat-Schritte oder lange Systemprompts genutzt werden.

Beispiel aus der Praxis

Stell dir einen Support-Chatbot vor, der eine lange Wissensbasis-Zusammenfassung im Prompt führt (ggf. via RAG (Retrieval-Augmented Generation)) und dann mehrere Rückfragen beantwortet. Ohne KV-Cache müsste das Modell bei jeder neuen Antwort die Attention über die komplette Historie erneut berechnen. Mit KV-Cache werden die bisherigen Zustände wiederverwendet – die Antwortzeit bleibt auch bei längeren Chats deutlich niedriger.

Grenzen & Trade-offs (Speicher vs. Speed)

Der wichtigste Nachteil: KV-Caches brauchen viel Speicher (VRAM/RAM), weil pro Token und pro Layer Keys/Values gespeichert werden. Bei langen Kontextfenstern kann das zum Engpass werden. Deshalb gibt es Optimierungen wie Quantisierung oder „Paged/Chunked KV-Cache“, um Speicher effizienter zu nutzen. Außerdem gilt: Der Cache hilft vor allem beim Generieren weiterer Tokens; beim ersten Durchlauf über einen neuen Prompt muss trotzdem alles berechnet werden.