Monarch v3: Paginación KV Inspirada en NES para una Inferencia de LLM 78% Más Rápida

✍️ OpenClawRadar📅 Publicado: 13 de abril de 2026🔗 Source
Monarch v3: Paginación KV Inspirada en NES para una Inferencia de LLM 78% Más Rápida
Ad

Qué hace Monarch v3

Monarch v3 es una implementación de código abierto de paginación de memoria inspirada en NES para inferencia de transformadores que aborda el crecimiento lineal de la caché KV con la longitud de secuencia. A los 4K tokens, la mayor parte de la caché KV permanece sin usar mientras consume VRAM a máxima precisión.

Cómo funciona

El sistema divide la caché KV en dos regiones:

  • Región caliente: Tokens recientes mantenidos a máxima precisión
  • Región fría: Tokens antiguos comprimidos a ~20 bytes cada uno (vs 64-128 bytes calientes)

Cuatro componentes trabajan juntos:

  • Compresión TurboQuant: Cuantiza KV a enteros de 4 bits con codificación polar y corrección residual, logrando ~97% de reducción de tamaño con ~0.3% de pérdida de perplejidad
  • Eliminación por Ventana Deslizante: Los N tokens recientes permanecen calientes por defecto, los tokens antiguos se comprimen a almacenamiento frío
  • Promoción Ponderada por Atención: Tokens con alta atención regresan a caliente con mecanismo persistente para evitar trashing
  • Intercambio de Páginas: Pequeños lotes de tokens fríos se materializan al acceder con bucle de decodificación local reemplazando multiplicación matricial por lotes

Resultados de Benchmark

Configuración: TinyLlama-1.1B fp16, 50 tokens generados

  • Estándar: 17.01 tok/s, 2112 MB VRAM
  • Monarch-v3: 30.42 tok/s, 2131 MB VRAM, 512 tokens calientes, 1024 tokens fríos
  • Ganancia: +78.7% rendimiento, +0.9% VRAM
Ad

Bucle de Decodificación Simplificado

for step in 1..100:
    q = project_query(next_token)
    # Calcular atención: solo caliente (rápido)
    scores_hot = q @ kv_hot.T
    # Acceder a frío si alta atención (raro)
    if max(scores_hot) < threshold:
        kv_cold_promoted = decompress(cold_pages)
        scores_cold = q @ kv_cold_promoted.T
        # Mover a caliente para siguiente paso
    # Agregar, softmax, aplicar atención ...
    # Eliminar tokens antiguos de caliente → frío
    if len(kv_hot) > window_size:
        evict_oldest_to_cold()

Estado Actual

  • Implementación: Funcionando en Hugging Face Transformers con backend de caché personalizado
  • Licencia: Apache 2.0
  • Documento: Especificación técnica completa disponible
  • Próximo: Fusión de kernel CUDA para descompresión fría planeada

Cómo probarlo

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

Limitaciones

El enfoque se basa en recencia (tokens recientes = alta atención), lo que funciona para la mayoría de tareas pero puede no hacerlo para cargas de trabajo intensivas en recuperación. La extracción de atención está disponible en modelos base pero no en variantes de chat; el respaldo usa paginación solo por ventana.

📖 Leer la fuente completa: r/LocalLLaMA

Ad

👀 Ver también