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.
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.
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 auflocalhost 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.