Zum Hauptinhalt springen
Der KV-Cache ist der laufende Arbeitsspeicher einer Konversation, den ein Modell aufbaut, während es Ihren Prompt verarbeitet und eine Antwort generiert – und er ist der Grund, warum ein längerer Kontext mehr VRAM verbraucht, obwohl die Modellgröße selbst unverändert bleibt. Diese Seite erklärt, was der KV-Cache ist und warum er sich auf diese Weise vergrößert; für die Mechanik von Prefill und Decode, die den Cache aufbauen und nutzen, siehe Wie Inferenz funktioniert.

Was der KV-Cache tatsächlich ist

„KV“ steht für Key/Value (Schlüssel/Wert) – die internen Darstellungen, die das Modell für jedes Token berechnet, das es bisher verarbeitet hat. Anstatt diese Darstellungen für jedes neue Token von Grund auf neu zu berechnen, speichert das Modell sie im KV-Cache und wiederverwendet sie, wobei es bei jedem Hinzufügen eines Tokens zum Sequenzverlauf einen neuen Eintrag anhängt. Dies macht die Generierung überhaupt erst praktikabel. Ohne einen Cache würde die Generierung des Tokens 500 einer Antwort bedeuten, dass alle 499 vorherigen Tokens jedes Mal erneut verarbeitet werden. Mit dem Cache muss das Modell nur die neue Arbeit für jedes neue Token leisten und alles Wiederverwenden, was es bereits berechnet hat. Der Cache wird während des Prefills (wenn das Modell Ihren Prompt liest) aufgebaut und während des Decodes (wenn es die Antwort generiert) um einen Eintrag pro Token erweitert – siehe Wie Inferenz funktioniert, um zu erfahren, wie diese beiden Phasen funktionieren.

Warum ein längerer Kontext mehr Speicher kostet

Der KV-Cache hält einen Eintrag pro Token und pro Layer, solange sich dieses Token im aktiven Kontext befindet. Das bedeutet, dass seine Größe direkt mit folgenden Faktoren skaliert:
  • Context length – mehr aktive Tokens bedeuten mehr Cache-Einträge. Eine Konversation mit 128K Tokens speichert weit mehr zwischengespeicherten Zustand als eine mit 4K Tokens.
  • Batch-Größe – wenn Sie mehrere Anfragen gleichzeitig bedienen, benötigt jede ihren eigenen KV-Cache, sodass sich der gesamte Cache-Speicher mit den gleichzeitigen Anfragen multipliziert.
Dies ist Speicher zusätzlich zu den Modellgewichten, nicht an deren Stelle. Ein Modell, das bei einer kurzen Kontextlänge gerade noch in Ihren VRAM passt, kann bei einer langen Konversation oder einem großen Dokument vollständig aus dem Speicher laufen, da die Gewichte fix bleiben, der Cache jedoch weiter wächst. Siehe Speicher und Auslagern, wie der KV-Cache in die vollständige Berechnungsformel passt, und den GPU-Modellpass-Guide für konkrete VRAM-Tabellen – diese Seite wiederholt diese Zahlen nicht.

Der Kompromiss zwischen Kontext und Geschwindigkeit

Neben dem Speicherverbrauch hat ein größerer KV-Cache auch einen Geschwindigkeitsnachteil. Decode ist durch die Speicherbandbreite begrenzt – bei jedem einzelnen generierten Token liest das Modell den gesamten bisher aufgebauten KV-Cache zusätzlich zu seinen Gewichten (siehe Wie Inferenz funktioniert). Ein größerer Cache bedeutet mehr zu lesende Daten bei jedem Schritt, daher:
  • Ein längerer Kontext verlangsamt das Decode. Die Generierungsgeschwindigkeit (Tokens/Sekunde) neigt dazu, zu sinken, wenn eine Konversation wächst, auch wenn sich das Modell selbst nicht geändert hat.
  • Ein längerer Kontext kostet mehr Speicher, unabhängig vom Geschwindigkeitsnachteil – es ist eine zweite, separate Belastung.
Beide Effekte rühren aus derselben Ursache: Der KV-Cache skaliert mit dem Kontext, und alles am Decode skaliert mit dem KV-Cache.
An diesen Kompromiss kommt man nicht vorbei, indem man eine andere Quantisierung wählt – das Quantisieren der Gewichte und das Quantisieren des KV-Caches sind separate Stellschrauben, und einige Backends unterstützen die KV-Cache-Quantisierung unabhängig als Möglichkeit, längere Kontexte unterzubringen. Dies ist eine backend-spezifische Einstellung; prüfen Sie die Dokumentation Ihrer Laufzeitumgebung auf Unterstützung, bevor Sie sich darauf verlassen.

Praktischer Hinweis

Wenn Sie entscheiden, wie viel Kontext Sie für ein Deployment zuweisen möchten, behandeln Sie dies als ein reales Ressourcenbudget, nicht als eine kostenlose Einstellung. Ein Modell, das mit einem riesigen maximalen Kontext beworben wird (128K, 256K), bedeutet nicht, dass Sie es immer an dieser Grenze ausführen sollten – dimensionieren Sie Ihren Kontext nach dem, was die Aufgabe tatsächlich benötigt, und prüfen Sie die tatsächlichen Speicherkosten mit dem GPU-Modellpass-Guide, bevor Sie sich festlegen.

Tiefer einsteigen

Wie Inferenz funktioniert

Der vollständige Prompt-Lebenszyklus – Prefill, Decode und was wo im Speicher landet.

Speicher und Auslagern

Die vollständige Berechnungsformel, einschließlich Gewichten und Overhead neben dem KV-Cache.

Sobald Kontext und Speicher passen

Die Dimensionierung Ihres KV-Caches ist Teil der Optimierung, damit ein Modell lokal gut läuft. Sobald es läuft und Anfragen auf localhost beantwortet, ist der nächste Schritt, von überall else darauf zuzugreifen.

Geben Sie ihm einen stabilen Endpunkt

Tokios wählt, hostet oder feinabstimmt das Modell nicht – sobald es lokal läuft, verwandelt Tokios es in einen stabilen, authentifizierten Endpunkt, den Sie von überall aus aufrufen können.