Monarch v3: NES-inspiriertes KV-Paging für 78 % schnellere LLM-Inferenz

✍️ OpenClawRadar📅 Veröffentlicht: 13. April 2026🔗 Source
Monarch v3: NES-inspiriertes KV-Paging für 78 % schnellere LLM-Inferenz
Ad

Was Monarch v3 leistet

Monarch v3 ist eine Open-Source-Implementierung von NES-inspiriertem Speicher-Paging für Transformer-Inferenz, die das lineare Wachstum des KV-Caches mit der Sequenzlänge adressiert. Bei 4K Tokens liegt der größte Teil des KV-Caches ungenutzt vor, während er VRAM in voller Präzision belegt.

Wie es funktioniert

Das System teilt den KV-Cache in zwei Bereiche:

  • Heißer Bereich: Kürzliche Tokens werden in voller Präzision gehalten
  • Kalter Bereich: Ältere Tokens werden auf ~20 Bytes pro Token komprimiert (vs. 64-128 Bytes heiß)

Vier Komponenten arbeiten zusammen:

  • TurboQuant-Komprimierung: Quantisiert KV auf 4-Bit-Ganzzahlen mit Polar-Codierung und Restkorrektur, erreicht ~97 % Größenreduktion mit ~0,3 % Perplexity-Verlust
  • Schiebefenster-Auslagerung: Die letzten N Tokens bleiben standardmäßig heiß, alte Tokens werden in den kalten Speicher komprimiert
  • Aufmerksamkeitsgewichtete Beförderung: Tokens mit hoher Aufmerksamkeit werden mit einem Haftmechanismus zurück in den heißen Bereich verschoben, um Thrashing zu verhindern
  • Seitenwechsel: Kleine Batches kalter Tokens werden bei Zugriff materialisiert, wobei eine lokale Decode-Schleife den Batch-Matmul ersetzt

Benchmark-Ergebnisse

Setup: TinyLlama-1.1B fp16, 50 generierte Tokens

  • Standard: 17,01 Tok/s, 2112 MB VRAM
  • Monarch-v3: 30,42 Tok/s, 2131 MB VRAM, 512 heiße Tokens, 1024 kalte Tokens
  • Gewinn: +78,7 % Durchsatz, +0,9 % VRAM
Ad

Vereinfachte Decode-Schleife

for step in 1..100:
    q = project_query(next_token)
    # Berechne Aufmerksamkeit: nur heiß (schnell)
    scores_hot = q @ kv_hot.T
    # Greife auf kalte zu, wenn hohe Aufmerksamkeit (selten)
    if max(scores_hot) < threshold:
        kv_cold_promoted = decompress(cold_pages)
        scores_cold = q @ kv_cold_promoted.T
        # Für nächsten Schritt in heißen Bereich verschieben
    # Aggregiere, Softmax, wende Aufmerksamkeit an ...
    # Verdränge alte Tokens aus heiß → kalt
    if len(kv_hot) > window_size:
        evict_oldest_to_cold()

Aktueller Status

  • Implementierung: Funktioniert mit Hugging Face Transformers mit benutzerdefiniertem Cache-Backend
  • Lizenz: Apache 2.0
  • Paper: Vollständige technische Spezifikation verfügbar
  • Nächstes: CUDA-Kernel-Fusion für kalte Dekomprimierung geplant

Wie man es ausprobiert

git clone https://github.com/JohannaWeb/Monarch.git
cd Monarch
pip install -r requirements.txt
python train_tinyllama_fp16.py
python src/benchmark_monarch.py \
    --model models/tinyllama_fp16 \
    --mode both \
    --max-new-tokens 100 \
    --promotion-threshold 0.15 \
    --sticky-threshold 3 \
    --json

Einschränkungen

Der Ansatz beruht auf Aktualität (aktuelle Tokens = hohe Aufmerksamkeit), was für die meisten Aufgaben funktioniert, aber möglicherweise nicht für abrufintensive Workloads. Die Aufmerksamkeitsextraktion ist in Basismodellen verfügbar, aber nicht in Chat-Varianten; der Fallback verwendet nur Fenster-Paging.

📖 Read the full source: r/LocalLLaMA

Ad

👀 Siehe auch