KV-Cache quantisieren: VRAM sparen (lang contexte)
Sie haben genug VRAM, um das Modell zu laden, doch sobald Sie den Kontext auf 16k oder 32k Tokens erhöhen, reicht der Speicher nicht mehr aus. Schuld daran ist der KV-Cache: ein verborgener Speicherbereich, der linear mit dem Kontext wächst und bei langen Prompts genauso viel Speicher beanspruchen kann wie das Modell selbst. Die KV-Cache-Quantisierung komprimiert ihn auf Q8 oder Q4, um den auf derselben Karte nutzbaren Kontext zu verdoppeln. Hier erfahren Sie, wie Sie die Quantisierung in Ollama und llama.cpp aktivieren, welche bezifferten Vorteile sie bringt und wie sie sich tatsächlich auf die Qualität auswirkt.
#Warum der KV-Cache Ihren VRAM auffrisst
Wenn ein LLM Text generiert, berechnet es nicht bei jedem neuen Token die Aufmerksamkeit für den gesamten Prompt neu: Es speichert die Schlüsselvektoren (K) und Wertvektoren (V) jedes bereits gesehenen Tokens. Das ist der KV-Cache, und er macht die Generierung schnell. Das Problem: Dieser Speicher wächst linear mit der Länge des Kontexts. Verdoppeln Sie den Kontext, verdoppelt sich auch der KV-Cache.
Bei einem kurzen Prompt mit einigen hundert Tokens ist das vernachlässigbar. Sobald Sie jedoch RAG mit großen Dokumenten, Zusammenfassungen von Transkriptionen oder Agenten mit Langzeitgedächtnis einsetzen, wächst der Kontext enorm – und der KV-Cache mit ihm. Bei einem 70B-Modell mit 32k Kontext kann allein der KV-Cache mehr als 10 GB belegen, zusätzlich zu den etwa 40 GB des Modells. Häufig verursacht er und nicht das Modell den Out-of-Memory-Fehler bei langen Prompts.
#Wie viel Speicher Ihr KV-Cache benötigt
Ihr privates, kostenloses ChatGPT auf Ihrem Rechner in einer Stunde – mit LM Studio, Ollama, Open WebUI und Ihren Dokumenten, ganz ohne Cloud.
- Lebenslanger Online-Zugang
- PDF + Dateien
- Erstattung binnen 30 Tagen
Die Größe des KV-Caches hängt von vier Faktoren ab: der Anzahl der Modellschichten, der Attention-Dimension, der Kontextlänge und der Speicherpräzision. Bei FP16 (Standardeinstellung) lautet die näherungsweise Formel: 2 (K und V) × Schichten × dim_kv × Kontext × 2 Bytes. Merken Sie sich für die Praxis diese Größenordnungen bei FP16 mit einem Kontext von 32.000 Tokens:
- 7-9B (z. B. Qwen 3.5 9B, Granite 4.2 8B)
- Etwa 2 bis 4 GB KV-Cache bei 32k, je nach Architektur (GQA hilft erheblich).
- 14B
- ≈ 4 bis 6 GB bei 32.000 Tokens.
- 32B
- ≈ 8 bis 10 GB bei 32.000 Tokens.
- 70B
- ≈ 10 bis 16 GB bei 32k Tokens — oft der begrenzende Faktor.
#Was die Quantisierung des KV-Caches verändert
Die Idee ist die gleiche wie bei den Modellgewichten: Anstatt jedes Cache-Wert in 16 Bit (FP16) zu speichern, wird er in 8 Bit (Q8_0) oder 4 Bit (Q4_0) gespeichert. Die Cache-Memory wird mechanisch durch 2 (Q8) oder durch 4 (Q4) geteilt. Da der KV-Cache bei langen Kontexten einen großen Anteil an der VRAM ausmacht, ist der Vorteil direkt spürbar: Bei konstanter VRAM können mit Q8 die unterstützbare Kontextlänge etwa verdoppelt werden.
- FP16
- Referenzgenauigkeit, kein Qualitätsverlust, aber der höchste Ressourcenbedarf. Die Standardeinstellung.
- Q8_0
- Halb so viel Speicher, bei den meisten Modellen ein nahezu unmerklicher Qualitätsverlust. Der beste Kompromiss.
- Q4_0
- Nur ein Viertel des Speicherbedarfs, aber messbare Qualitätsverluste, die je nach Modell unterschiedlich ausfallen. Nur für Fälle vorsehen, in denen die VRAM tatsächlich der begrenzende Faktor ist.
#KV-Quantisierung in Ollama aktivieren
Ollama ermöglicht die Quantisierung des KV-Caches über zwei Umgebungsvariablen des Daemons. Zuerst muss Flash Attention aktiviert werden, dann wird der Cache-Typ gewählt. Diese Variablen werden für den Ollama-Dienst gesetzt, nicht beim Aufruf von ollama run.
- 01Flash Attention aktivierenSetzen Sie OLLAMA_FLASH_ATTENTION=1 in der Umgebung des Daemons. Dies ist die Voraussetzung für alle Caches außer FP16.
- 02Den Cache-Typ wählenSetzen Sie OLLAMA_KV_CACHE_TYPE auf den gewünschten Wert: f16 (Standard), q8_0 (empfohlen) oder q4_0 (aggressiv).
- 03Daemon neu startenUmgebungsvariablen werden nur beim Start des Dienstes gelesen. Starten Sie Ollama neu, damit sie wirksam werden.
- 04Den Zugewinn überprüfenLaden Sie ein Modell mit einem großen Kontext und überwachen Sie den VRAM mit nvidia-smi oder ollama ps. Sie müssen num_ctx auf einen höheren Wert als zuvor einstellen können.
#In llama.cpp aktivieren
Per Befehlszeile mit llama.cpp wird die Quantisierung des KV-Caches mit zwei separaten Flags für die Schlüssel (K) und die Werte (V) sowie dem Flash-Attention-Flag gesteuert. K und V können unabhängig voneinander quantisiert werden, in der Praxis werden sie jedoch auf dieselbe Stufe gesetzt.
- -fa
- Aktiviert Flash Attention. Ohne dieses Flag schlagen -ctk/-ctv mit einer Präzision unter f16 fehl.
- -ctk q8_0
- Quantisiert den Schlüsselcache auf 8 Bit. Mögliche Werte: f16, q8_0, q4_0, q4_1, q5_0, q5_1.
- -ctv q8_0
- Quantisiert den Werte-Cache. Dieselben zulässigen Werte wie bei -ctk.
- -c 32768
- Die angestrebte Kontextgröße. Durch die Quantisierung können Sie diese erhöhen, ohne die Speicherkapazität zu überschreiten.
#Wie viel Kontext gewinnt man: echte Zahlen
Der konkrete Gewinn hängt davon ab, welchen Anteil der KV-Cache an Ihrem VRAM-Budget hat. Bei einem Modell, das problemlos in den VRAM passt, schafft die Quantisierung des Caches nur etwas zusätzlichen Spielraum. Bei einem Modell, das den VRAM bereits voll auslastet, kann sie den Unterschied zwischen 8k und 24k Kontext ausmachen. Hier sind beobachtete Größenordnungen bei gleichbleibender VRAM-Kapazität:
- FP16 → Q8_0
- Cache geteilt durch 2. Praktisch: tragbarer Kontext verdoppelt, wenn der Cache den Budgetanteil dominiert.
- FP16 → Q4_0
- Cache geteilt durch 4. Begriffslänge bis zu ~3-4× länger, mit einem messbaren Qualitätsverlust.
- Beispiel 14B auf RTX 4080 16 GB
- Von ~16k Kontext in FP16 auf ~32k+ in Q8_0, wobei das Modell und alles Weitere weiterhin in dieselben 16 GB passen.
- Beispiel 32B auf RTX 4090 24GB
- Die Umstellung des Caches auf Q8_0 ermöglicht es häufig, auch lange RAG-Dokumente ohne CPU-Offloading zu verarbeiten.
#Auswirkungen auf die Qualität je nach Modell
Das ist die entscheidende Frage. Die Quantisierung des Caches bringt Rauschen in den Attention-Mechanismus, und nicht alle Modelle reagieren darauf gleich. Die Faustregel, die sich aus den Community-Tests ergibt:
- Q8_0 im Cache
- Bei der überwiegenden Mehrheit der Modelle ist der Unterschied kaum feststellbar. Perplexität und wahrgenommene Qualität sind nahezu identisch mit denen bei FP16. Diese Einstellung sollten Sie standardmäßig aktivieren – fast ohne darüber nachzudenken.
- Q4_0 im Cache
- Sichtbare und unterschiedlich starke Qualitätseinbußen. Manche Modelle verkraften das sehr gut, andere schweifen bei sehr langen Kontexten ab, verlieren den Faden oder halluzinieren häufiger. Für IHREN Anwendungsfall testen.
- Modelle mit GQA
- Sie sind im Allgemeinen robuster gegenüber der Quantisierung des Caches, da ihr Cache bereits kompakt und gut strukturiert ist.
- Empfindliche Aufgaben (Code, Berechnungen, Extraktion nach strikten Vorgaben)
- Anfälliger für Qualitätseinbußen durch Q4. Bleiben Sie bei Q8 für alles, was sachliche Genauigkeit erfordert.
#Fehlerbehebung
- „flash attention required“ oder Cache ignoriert
- Sie haben -fa (llama.cpp) oder OLLAMA_FLASH_ATTENTION=1 (Ollama) vergessen. Der quantisierte Cache wird ohne Hinweis auf FP16 zurückgesetzt, oder es wird ein Fehler ausgelöst.
- Kein VRAM-Vorteil sichtbar
- Ihr Kontext ist zu kurz, als dass der Cache viel Speicher beanspruchen würde. Die Einsparung zeigt sich nur bei langen Prompts. Erhöhen Sie num_ctx / -c, um sie zu beobachten.
- Die Qualität verschlechtert sich bei langen Prompts
- Sie verwenden wahrscheinlich Q4 bei einem Modell, das damit schlecht zurechtkommt. Stellen Sie K wieder auf q8_0 um (gegebenenfalls sogar alles auf q8_0) und testen Sie erneut.
- Ollama-Variablen ohne Wirkung
- Sie werden nur beim Start des Daemons eingelesen. Starten Sie den Dienst neu, nachdem Sie die Variablen gesetzt haben, und prüfen Sie, ob sie für den ollama-Prozess tatsächlich sichtbar sind.
- Immer noch OOM, trotz Quantisierung
- Das Modell selbst überschreitet die Speicherkapazität, nicht der Cache. Quantisieren Sie auch die Gewichte (Q4_K_M) oder wechseln Sie zu einem kleineren Modell.
#Weiterführende Informationen
Die Quantisierung des KV-Cache ist eine von mehreren Möglichkeiten, große Kontexte lokal unterzubringen. Diese Leitfäden ergänzen den Überblick:
- Flash Attention 2 bei einem lokalen LLM: aktivieren und den Leistungsgewinn per Benchmark messen
- Die Voraussetzung für die KV-Quantisierung und zugleich ein eigenständiger Vorteil bei Speicherverbrauch und Geschwindigkeit. Zuerst lesen, wenn Flash Attention bei Ihnen noch nicht aktiv ist.
- Quantisierung wählen (Q4, Q5, Q8, FP16)
- Zur Quantisierung der Modellgewichte – des anderen großen Postens beim VRAM-Verbrauch, ergänzend zur Quantisierung des Caches.
- Ollama installieren: Windows, macOS und Linux
- Falls Ihr Stack noch nicht eingerichtet ist: mit den GPU-Voraussetzungen für die passende Dimensionierung.
Haben Sie Feedback, einen Fehler entdeckt oder möchten Sie etwas präzisieren? Geben Sie uns Bescheid – so wird der Guide für alle besser.