File size: 6,043 Bytes
87efc66
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# 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)*