# TurboQuant auf Consumer-Hardware ## 100.000 Token Context auf einer RTX 3090 — Schritt für Schritt > AI Engineering Lab | April 2026 > Getestet auf: NVIDIA RTX 3090 (24 GB VRAM), Windows + Docker Desktop > Modell: Mistral-Small-3.2-24B-Instruct-2506-Q4_K_M --- ## Executive Summary TurboQuant ist eine KV-Cache-Quantisierungsmethode aus dem Paper "TurboQuant: Ultra-Low-Bit KV-Cache Quantization for LLMs" (ICLR 2026, arXiv:2504.19874). **Das Ergebnis in einer Zeile:** Mit TurboQuant turbo3 (3-bit KV-Cache) erreichen wir auf einer RTX 3090 einen Context von **100.000 Tokens** — bei nur 8,5% Geschwindigkeitsverlust und ohne Änderung der Modellgewichte. | | Baseline (f16) | TurboQuant turbo3 | Delta | |--|:---:|:---:|:---:| | **Context** | 8.192 | **100.000** | **+12,2×** | | **VRAM** | 15,4 GB | 17,2 GB | +1,8 GB | | **Tokens/s** | 49,2 | 45,0 | −8,5% | | **KV-Cache** | ~1 GB (f16) | ~2,8 GB (3-bit) | 4,3× Kompression | --- ## 1. Das Problem: Der KV-Cache frisst VRAM Wenn ein LLM läuft, berechnet es für jeden Token Key-Value-Paare (KV). Diese werden im VRAM gecacht, damit spätere Tokens darauf zugreifen können. Das Problem: Der KV-Cache **wächst linear mit der Kontextlänge**. Für Mistral-Small-3.2 24B auf einer RTX 3090 (24 GB, davon ~14,4 GB für Modellgewichte): ``` Context KV-Cache (f16) Verfügbar nach Modell Passt? 8.192 ~1 GB 9,6 GB ✅ 32.000 ~4 GB 9,6 GB ✅ 100.000 ~12 GB 9,6 GB ❌ OOM 100.000 ~2,8 GB (turbo3) 9,6 GB ✅ ``` 100K Context ist ohne Optimierung auf einer 24-GB-GPU schlicht nicht möglich. --- ## 2. Was TurboQuant macht TurboQuant komprimiert den KV-Cache von 16-bit auf 2–4-bit. **NICHT die Modellgewichte** — nur den Laufzeit-Cache. ``` f16 KV-Cache (16 bit) → turbo3 KV-Cache (3 bit) = 4,3× weniger Speicher ``` Das Modell liest den quantisierten Cache und generiert Text ganz normal. Qualitätsverlust: laut Paper <1% Perplexity-Anstieg bei turbo3. --- ## 3. Das Ecosystem — Zwei Repos, ein häufiger Fehler Es gibt zwei TurboQuant-Repositories mit verwirrenden Namen: | Repo | Was es ist | Wann benutzen | |------|-----------|--------------| | `TheTom/turboquant_plus` | Python-Bibliothek | HuggingFace-Modelle, Forschung | | `TheTom/llama-cpp-turboquant` | llama.cpp-Fork | **Dieser Guide — llama-server** | **Dieser Guide verwendet `TheTom/llama-cpp-turboquant`, Branch `feature/turboquant-kv-cache`.** Kritisch: Der Default-Branch `master` ist ein normales llama.cpp **ohne TurboQuant**. Die Implementierung liegt auf `feature/turboquant-kv-cache`. --- ## 4. Setup — Schritt für Schritt ### 4.1 Branch verifizieren (vor dem Build!) ```bash curl -s "https://api.github.com/repos/TheTom/llama-cpp-turboquant/branches" \ | python3 -c "import sys,json; [print(b['name']) for b in json.load(sys.stdin)]" # Erwartet: feature/turboquant-kv-cache, master ``` ### 4.2 Docker Image bauen (~20 Minuten) ```bash docker build -t turboquant:feature . # Verifizieren: turbo2, turbo3, turbo4 müssen erscheinen docker run --rm turboquant:feature llama-server -h 2>&1 | grep -A3 "cache-type-k" ``` ### 4.3 Modell herunterladen (~14 GB) ```bash export HF_TOKEN=hf_dein_token bash scripts/download-model.sh ``` ### 4.4 Baseline starten (Referenzwert) ```bash bash scripts/run-baseline.sh # → Port 8180, f16 KV-Cache, 8192 Context ``` ### 4.5 TurboQuant starten ```bash bash scripts/run-turbo.sh # → Port 8182, turbo3 KV-Cache, 100.000 Context ``` --- ## 5. Fehler-Protokoll Alle 5 Fehler aus unserem Setup — damit du sie nicht wiederholst: ### Fehler 1: Falsches Repository **Symptom:** Kein `turbo2`/`turbo3`/`turbo4` nach dem Build. **Ursache:** `TheTom/turboquant_plus` (Python-Bibliothek) statt `TheTom/llama-cpp-turboquant` gebaut. **Fix:** Richtiges Repo verwenden — siehe Dockerfile. ### Fehler 2: Falsches cmake-Flag **Symptom:** Kein CUDA, CPU-Fallback. **Ursache:** `-DLLAMA_CUBLAS=ON` wurde umbenannt. **Fix:** `-DGGML_CUDA=ON` (modernes llama.cpp, post-GGML-Refactor). ### Fehler 3: libcuda.so.1 fehlt beim Build **Symptom:** Linker-Fehler beim cmake-Build. **Ursache:** Docker-Build-Time hat keinen NVIDIA-Treiber — nur ein Stub ohne `.1`-Suffix. **Fix:** Symlink VOR cmake setzen (siehe Dockerfile). ### Fehler 4: Falscher Branch **Symptom:** `Unsupported cache type: turbo3` zur Laufzeit. **Ursache:** Master-Branch geklont (standard llama.cpp, kein TurboQuant). **Fix:** `git clone --branch feature/turboquant-kv-cache` ### Fehler 5: Falscher HuggingFace-Repo-Name **Symptom:** 404 beim Modell-Download. **Ursache:** Repo-Namen aus dem Gedächtnis rekonstruiert — falsch. **Fix:** Immer live via HF Search API verifizieren (nie aus dem Kontext nehmen). --- ## 6. Benchmark-Methodik Jede Messung: 1. VRAM messen nach Server-Start (nvidia-smi) 2. 3× curl an `/v1/chat/completions` mit "Count from 1 to 200" 3. Durchschnitt aus 3 Läufen 4. Container stoppen, 30s warten, nächste Messung TPS-Berechnung: `completion_tokens / (total_duration_ms / 1000)` --- ## 7. Produktions-Checkliste Bevor du TurboQuant in Produktion einsetzt: - [ ] Image gebaut von `feature/turboquant-kv-cache` (NICHT master) - [ ] Verifiziert: `llama-server -h | grep turbo` zeigt turbo2, turbo3, turbo4 - [ ] VRAM-Budget berechnet: Modell + KV-Cache + Overhead ≤ GPU-VRAM - [ ] Port-Konflikte geprüft (kein anderer Service auf dem Port) - [ ] Startup-Zeit eingeplant: 100K Context braucht ~90s Startzeit - [ ] Qualität getestet: Stichproben-Outputs mit turbo3 vs f16 verglichen - [ ] Modell-Download via HF Search API verifiziert (nicht aus Erinnerung) --- ## 8. Rohdaten Alle Benchmark-Rohdaten: [`results/turboquant-rtx3090-2026-04-01.json`](results/turboquant-rtx3090-2026-04-01.json) --- *AI Engineering Lab · April 2026 · [ai-engineering.at](https://ai-engineering.at)* *Basierend auf TurboQuant (arXiv:2504.19874) von Thomas et al. (ICLR 2026)*