Monarch v3: Paginação KV Inspirada no NES para Inferência de LLM 78% Mais Rápida

✍️ OpenClawRadar📅 Publicado: April 13, 2026🔗 Source
Monarch v3: Paginação KV Inspirada no NES para Inferência de LLM 78% Mais Rápida
Ad

O que o Monarch v3 Faz

O Monarch v3 é uma implementação de código aberto de paginação de memória inspirada no NES para inferência de transformers que aborda o crescimento linear do cache KV com o comprimento da sequência. Em 4K tokens, a maior parte do cache KV fica inutilizada enquanto consome VRAM em precisão total.

Como Funciona

O sistema divide o cache KV em duas regiões:

  • Região quente: Tokens recentes mantidos em precisão total
  • Região fria: Tokens mais antigos comprimidos para ~20 bytes cada (vs 64-128 bytes quentes)

Quatro componentes trabalham juntos:

  • Compressão TurboQuant: Quantiza KV para inteiros de 4 bits com codificação polar e correção residual, alcançando ~97% de redução de tamanho com ~0,3% de perda de perplexidade
  • Eliminação por Janela Deslizante: Os N tokens mais recentes permanecem quentes por padrão, tokens antigos são comprimidos para armazenamento frio
  • Promoção Ponderada por Atenção: Tokens com alta atenção retornam para a região quente com mecanismo adesivo para evitar trashing
  • Trocas de Página: Pequenos lotes de tokens frios são materializados no acesso com loop de decodificação local substituindo matmul em lote

Resultados de Benchmark

Configuração: TinyLlama-1.1B fp16, 50 tokens gerados

  • Padrão: 17,01 tok/s, 2112 MB VRAM
  • Monarch-v3: 30,42 tok/s, 2131 MB VRAM, 512 tokens quentes, 1024 tokens frios
  • Ganho: +78,7% de throughput, +0,9% VRAM
Ad

Loop de Decodificação Simplificado

for step in 1..100:
    q = project_query(next_token)
    # Computar atenção: apenas quente (rápido)
    scores_hot = q @ kv_hot.T
    # Acessar frio se alta atenção (raro)
    if max(scores_hot) < threshold:
        kv_cold_promoted = decompress(cold_pages)
        scores_cold = q @ kv_cold_promoted.T
        # Mover para quente no próximo passo
    # Agregar, softmax, aplicar attn ...
    # Eliminar tokens antigos de quente → frio
    if len(kv_hot) > window_size:
        evict_oldest_to_cold()

Status Atual

  • Implementação: Funcionando no Hugging Face Transformers com backend de cache personalizado
  • Licença: Apache 2.0
  • Artigo: Especificação técnica completa disponível
  • Próximo: Fusão de kernel CUDA para descompressão fria planejada

Como Experimentar

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

Limitações

A abordagem depende da recência (tokens recentes = alta atenção), o que funciona para a maioria das tarefas, mas pode não funcionar para cargas de trabalho intensivas em recuperação. A extração de atenção está disponível em modelos base, mas não em variantes de chat; o fallback usa paginação apenas por janela.

📖 Read the full source: r/LocalLLaMA

Ad

👀 See Also