KV-Cache quantisieren: Mehr Kontext im selben VRAM mit Ollama und llama.cpp
Wenn dein Modell zwar in den Grafikspeicher passt, aber bei langem Kontext ausgeht, steckt meist der KV-Cache dahinter. Er wächst mit jedem Token im Kontext. Statt eine kleinere Modellquantisierung zu wählen, kannst du auch den Cache selbst komprimieren. Laut Ollama-Doku braucht er mit q8_0 etwa die Hälfte, mit q4_0 etwa ein Viertel des Speichers. Der Preis ist ein kleiner bis mittlerer Verlust an Genauigkeit.
Wie viel VRAM die Modellgewichte bei Q4_K_M, Q5_K_M und Q8_0 brauchen, zeigt unsere VRAM-Rechentabelle. Was Quantisierung grundsätzlich bedeutet, erklärt der Artikel Quantisierung: Wie große Modelle auf kleine Karten passen. Hier geht es nur um den Cache.
So groß wird der KV-Cache
Der Speicherbedarf pro Token lässt sich aus der Modellarchitektur berechnen. Red Hat nennt dafür die Formel:
KV-Cache pro Token = 2 × Schichten × KV-Köpfe × Kopfdimension × Bytes pro Wert
Die 2 steht für Key und Value. Mit der Kontextlänge multipliziert, ergibt das den Cache für eine Anfrage. Die Werte findest du in der config.json des Modells: num_hidden_layers, num_key_value_heads und die Kopfdimension, also hidden_size geteilt durch num_attention_heads.
Beispiel Qwen2.5-7B-Instruct: Laut config.json hat das Modell 28 Schichten und 4 KV-Köpfe, die Kopfdimension liegt bei 3.584 ÷ 28 = 128. In f16 mit 2 Bytes ergibt das:
| Cache-Typ | Pro Token | Bei 32.768 Token | Was es nicht leistet |
|---|---|---|---|
f16 (Standard) | 2 × 28 × 4 × 128 × 2 B = 56 KiB | rund 1,75 GiB | Volle Genauigkeit, aber größter Bedarf |
q8_0 | etwa die Hälfte | etwa 0,9 GiB | Laut Ollama meist kein spürbarer Qualitätsverlust, aber nicht bei jedem Modell |
q4_0 | etwa ein Viertel | etwa 0,45 GiB | Laut Ollama kleiner bis mittlerer Verlust, bei langem Kontext eher spürbar |
Die Werte für q8_0 und q4_0 sind aus den Näherungen der Ollama-Doku abgeleitet. Was tatsächlich belegt wird, zeigt dir die Laufzeitumgebung beim Laden. Bei großen Modellen geht es um ganz andere Mengen: Laut Red Hat braucht ein dichtes 70B-Modell wie Llama 3.3 70B etwa 320 KB pro Token, rund neunmal so viel wie gpt-oss-120b.
Parallele Anfragen zählen mit. Laut Ollama-FAQ wächst der Speicherbedarf mit OLLAMA_NUM_PARALLEL × OLLAMA_CONTEXT_LENGTH. Zwei parallele Anfragen mit je 32k Kontext brauchen also doppelt so viel Cache.
In Ollama aktivieren
Laut Ollama-FAQ wirkt die KV-Cache-Quantisierung nur zusammen mit Flash Attention. Ollama nutzt Flash Attention automatisch, wenn Backend und Gerät es unterstützen. Mit OLLAMA_FLASH_ATTENTION=1 erzwingst du es.
- Variable setzen:
OLLAMA_KV_CACHE_TYPEmit den Wertenf16(Standard),q8_0oderq4_0 - Als systemd-Dienst unter Linux: Trag mit
systemctl edit ollama.serviceunter[Service]die ZeilenEnvironment="OLLAMA_FLASH_ATTENTION=1"undEnvironment="OLLAMA_KV_CACHE_TYPE=q8_0"ein. Danach folgensystemctl daemon-reloadundsystemctl restart ollama. - Gilt global: Laut Ollama gilt die Einstellung derzeit für alle Modelle. Du kannst sie nicht pro Modell festlegen.
Prüf danach mit ollama ps, wie groß das geladene Modell ist und wie viel davon auf GPU und CPU liegt.
In llama.cpp aktivieren
Der llama-server trennt Key- und Value-Cache:
-ctkbzw.--cache-type-kund-ctvbzw.--cache-type-v: Erlaubt sind unter anderemf16(Standard),bf16,q8_0,q5_1,q5_0,q4_1,q4_0undiq4_nl.-fabzw.--flash-attnmiton,offoderauto(Standardauto)-cbzw.--ctx-sizefür die Kontextlänge und-npbzw.--parallelfür die Zahl paralleler Slots
Ein Beispielaufruf: llama-server -m modell.gguf -c 32768 -fa on -ctk q8_0 -ctv q8_0. Beim Start zeigt das Log die reservierte Cache-Größe an. Vergleiche sie mit dem Wert in f16.
Weil K und V getrennt einstellbar sind, kannst du auch nur einen Teil stärker komprimieren. Ob das bei deinem Modell besser abschneidet, zeigt nur dein eigener Vergleich.
Wann sich das lohnt und wann nicht
Eher ja: Du willst langen Kontext für Dokumente, Code oder RAG, und das Modell passt in f16-Cache nur knapp oder gar nicht. Mit q8_0 verdoppelst du grob den Kontext im selben Cache-Budget, und laut Ollama merkt man davon meist nichts.
Mit Vorsicht: Ollama weist darauf hin, dass Modelle mit hohem GQA-Wert, als Beispiel nennt die Doku Qwen2, stärker unter der Cache-Quantisierung leiden können als Modelle mit niedrigem GQA-Wert. Teste dann zuerst q8_0 und geh nur auf q4_0, wenn deine Ergebnisse stabil bleiben.
Eher nein: Du nutzt ohnehin nur kurzen Kontext. Dann ist der Cache klein, und du gewinnst kaum Speicher. Wähle in dem Fall eher die passende Modellquantisierung.
So vergleichst du die Qualität
Nimm drei bis fünf typische Aufgaben, etwa eine Zusammenfassung eines langen Dokuments, eine Frage zu einer Stelle weit hinten im Kontext und eine Coding-Aufgabe. Lass sie mit f16, q8_0 und gegebenenfalls q4_0 laufen, mit festem Seed und gleicher Temperatur. Prüf vor allem Antworten, die sich auf frühe Teile des Kontexts beziehen. Wie du lokale Modelle allgemein vergleichst, steht in Lokale Coding-LLMs vergleichen.
Häufige Fehler bei der KV-Cache-Quantisierung
| Fehler | Was stattdessen gilt |
|---|---|
| Nur die GGUF-Datei für den VRAM-Bedarf rechnen | Den KV-Cache für deinen Kontext dazurechnen: 2 × Schichten × KV-Köpfe × Kopfdimension × Bytes × Token |
OLLAMA_KV_CACHE_TYPE ohne Flash Attention setzen | Flash Attention muss aktiv sein, sonst wirkt die Einstellung laut Ollama nicht. |
| Die Variable in der Shell setzen, obwohl Ollama als Dienst läuft | Per systemctl edit ollama.service eintragen und den Dienst neu starten. |
| Parallele Anfragen vergessen | Der Cache wächst mit Kontext × Parallelität. |
Direkt auf q4_0 gehen | Mit q8_0 beginnen und die Qualität bei langem Kontext prüfen. |
| Annehmen, die Einstellung gelte pro Modell | Bei Ollama gilt sie derzeit global für alle Modelle. |
| Nur mit kurzem Kontext testen | Mit dem Kontext testen, den du wirklich nutzt. |
Praktische Handlungsempfehlungen November 2026
Rechne deinen Cache aus. Nimm die config.json deines Modells und die Formel und multipliziere mit deinem Kontext und der Zahl paralleler Anfragen.
Aktiviere Flash Attention. In Ollama mit OLLAMA_FLASH_ATTENTION=1, in llama.cpp mit -fa on.
Starte mit q8_0. Prüf Belegung und Ergebnisse, bevor du weiter komprimierst.
Teste lange Kontexte gezielt. Frag nach Details vom Anfang des Kontexts, denn dort zeigt sich Qualitätsverlust zuerst.
Dokumentiere die Einstellung. Notiere Cache-Typ, Kontext und Parallelität, denn bei Ollama gilt die Einstellung für alle Modelle.
Fazit
Den KV-Cache zu quantisieren ist der direkteste Weg zu mehr Kontext, ohne die Modellgewichte anzufassen. Mit q8_0 halbierst du den Cache grob, laut Ollama meist ohne spürbaren Qualitätsverlust. q4_0 spart mehr, kostet aber bei langem Kontext eher Genauigkeit.
Rechne zuerst aus, wie groß dein Cache überhaupt ist. Lohnt es sich, aktiviere Flash Attention, beginne mit q8_0 und vergleiche die Ergebnisse an deinen eigenen Aufgaben mit langem Kontext.
Quellen und weiterführende Informationen
- Ollama FAQ (Flash Attention,
OLLAMA_KV_CACHE_TYPEf16/q8_0/q4_0, GQA-Hinweis,OLLAMA_NUM_PARALLEL) - llama.cpp: llama-server README (
--cache-type-k/-v,--flash-attn,--ctx-size,--parallel) - Red Hat: Wie KI-Inferenz funktioniert (26.8.2026; KV-Cache-Formel, Beispiele gpt-oss-120b und 70B)
- Qwen2.5-7B-Instruct: config.json (Schichten, KV-Köpfe, Hidden Size für das Rechenbeispiel)
Haftungsausschluss
Transparenzhinweis: Dieser Artikel ordnet öffentlich zugängliche Informationen ein, vor allem die oben genannten Dokumentationen (Stand: November 2026). Wir testen und messen nicht selbst. Die Cache-Größen für q8_0 und q4_0 sind aus den Näherungen der Ollama-Doku abgeleitet.
Speicherbedarf: Laufzeitumgebungen reservieren zusätzlich Speicher für Berechnungen. Lass Abstand zur Speichergrenze und prüfe die tatsächliche Belegung im Log oder mit ollama ps.
Stand der Software: Parameter, Standardwerte und unterstützte Cache-Typen können sich mit neuen Versionen von Ollama und llama.cpp ändern. Prüfe vor dem Einsatz die aktuelle Dokumentation.
Affiliate-Hinweis: Enthält dieser Artikel Links zu Produkten oder Händlern, kann es sich um Affiliate-Links handeln: Bei einem Kauf darüber erhält aimageddon.de eine Provision, ohne dass sich dein Preis erhöht. Genannte Markennamen sind Warenzeichen der jeweiligen Inhaber und dienen der sachlichen Information; es handelt sich um keine bezahlte Empfehlung.
Affiliate-Hinweis: Dieser Beitrag enthält Affiliate-Links (mit * oder als Amazon-Partnerlink gekennzeichnet). Bei einem Kauf über diese Links erhalten wir eine kleine Provision – für dich entstehen dabei keine zusätzlichen Kosten. Wir empfehlen nur Produkte, die wir für sinnvoll halten.