TurboQuant: 6-fach kleinerer LLM-KV-Cache ohne Genauigkeitsverlust
Bei der autoregressiven Generierung von Sprachmodellen basiert die Aufmerksamkeit auf Key- und Value-Vektoren aus vorherigen Tokens. Die vollständige Neuberechnung des gesamten Kontexts bei jedem Schritt ist ineffizient, daher werden Zwischenrepräsentationen zwischengespeichert. Der KV-Cache wächst linear mit der Kontextlänge und begrenzt Durchsatz und maximale Kontextgröße.
Bei langen Sequenzen erreicht die Inferenz die Speicherbandbreiten-Grenze: GPUs verbringen mehr Zeit mit dem Lesen von Daten als mit Berechnungen. Dies erhöht die Latenz und die Kosten. TurboQuant löst dieses Problem, indem er den Cache komprimiert, während die semantische Bedeutung für die Aufmerksamkeit erhalten bleibt.
Wie PolarQuant funktioniert
Der erste Schritt ist PolarQuant. Vektoren werden nach einer zufälligen Rotation in Polarkoordinaten umgewandelt. Der Radius kodiert die Vektorlänge, der Winkel die Richtung.
# Pseudocode: PolarQuant
rotated = rotate_random(vector)
rho = norm(rotated) # Radius
phi = angle(rotated) # Winkel
quantized = quantize(rho, phi)
Die zufällige Rotation vereinfacht die Datenausbreitung und macht sie für die Quantisierung vorhersagbar. Keine zusätzlichen Parameter oder Codebooks erforderlich – die Kompression erreicht 3–4 Bit pro Wert ohne Feinabstimmung des Modells.
Fehlerkorrektur durch QJL
Die Quantisierung führt zu Rauschen. Der zweite Schritt ist QJL (Quantized Johnson-Lindenstrauss), das den Restfehler in nur 1 Bit pro Wert kodiert. Die Transformation bewahrt euklidische Abstände zwischen Vektoren – entscheidend für Dot-Product-Aufmerksamkeit.
QJL approximiert die Johnson-Lindenstrauss-Lemma in quantisierter Form:
- Eingabe: Rest nach PolarQuant
- Ausgabe: 1-Bit-Korrektur
- Eigenschaft: ||Qx - Qy|| ≈ ||x - y|| für x, y ∈ KV-Cache
Zusammen erreichen sie 1,25–2 Bit pro Wert mit minimaler Degradation der Perplexität.
Benchmarking & Leistung
Getestet auf Llama-3.1-8B-Instruct (LongBench):
- Kompression: 6–8x gegenüber Baseline
- Beschleunigung der Logit-Berechnung: bis zu 8x auf H100 (JAX-Baseline)
- Qualität: weniger als 1 % Abfall bei Needle-in-Haystack- und Langkontextaufgaben
Auf GloVe (d=200) übertrifft TurboQuant die Balance zwischen Recall und Kompressionsrate (1:k optimal).
| Methode | Bit/Wert | Kompression | Perplexitätsabfall |
|--------|------------|-------------|------------------|
| Baseline | 16 | 1x | 0% |
| INT8 | 8 | 2x | 0,5% |
| TurboQuant (3-Bit) | 3 | 6x | 0,2% |
Erreicht bis zu 3 Bit ohne Neutrainings – ein Durchbruch für Zero-Shot-Quantisierung.
Wichtige Erkenntnisse
- Extrem hohe Kompression: KV-Cache um 6x reduziert bei 3 Bit pro Wert.
- Schnellere Inferenz: Bis zu 8x Geschwindigkeitszuwachs bei speicherbasierten Workloads.
- Abstandserhaltung: QJL sorgt für Kompatibilität mit Aufmerksamkeit.
- Universelle Anwendbarkeit: Funktioniert für Vektor-Suche und RAG.
- Keine Feinabstimmung nötig: Plug-and-Play-Ersatz für bestehende LLMs.
Mehr als nur LLMs
TurboQuant geht über Transformer-Architekturen hinaus. In Vektor-Datenbanken bewahrt die Embedding-Kompression die Leistung von ANN-Suchen (HNSW, FAISS). Auf Edge-Geräten verringert es den DRAM-Verbrauch und ermöglicht Inferenz direkt am Gerät.
Für Senior-Engineer: Integrieren Sie es in eigene Inferenz-Engines. JAX/Flax-Unterstützung erleichtert die Prototypentwicklung. Testen Sie auf langen Kontexten (>128k Tokens), um echte Vorteile zu nutzen.
— Editorial Team
Noch keine Kommentare.