Nanoserve: motor de inferencia de LLM en PyTorch con caché paged

Fuentes: Nanoserve: A PyTorch-based LLM inference engine with paged KV cache

Nanoserve es un motor de inferencia para modelos de lenguaje de gran escala (LLM) escrito desde cero en PyTorch, diseñado para ofrecer un rendimiento comparable al de vLLM. El proyecto, que cuenta con aproximadamente 1.600 líneas de código, sirve modelos como Qwen3-0.6B mediante una API compatible con OpenAI. Su arquitectura se basa en técnicas modernas de serving, incluyendo una caché KV pagada, enrutamiento continuo (continuous batching) y prefill en bloques, lo que permite gestionar la memoria de forma eficiente sin reservar el tamaño máximo del modelo de antemano.

El núcleo de Nanoserve destaca por su optimización de atención. Utiliza un kernel de Triton para la decodificación pagada, que lee los valores K y V directamente desde la tabla de bloques mediante un softmax en línea, en lugar de recopilarlos en un búfer relleno. Esta técnica logra mejoras de velocidad de entre 14 y 19 veces más rápido que la ruta de recolección estándar en GPUs NVIDIA L4, especialmente en lotes grandes. Además, implementa un sistema de caché de prefijos que reutiliza bloques de tokens ya calculados para prompts compartidos, reduciendo significativamente el tiempo de primer token (TTFT) en consultas con contextos repetitivos.

En términos de rendimiento, Nanoserve supera a las implementaciones estáticas de Hugging Face. En pruebas con 128 solicitudes concurrentes, el motor alcanzó 915 tokens por segundo, frente a los 233 tokens por segundo de la versión de Hugging Face con lotes estáticos de 64, lo que representa una mejora de 3,9 veces. La corrección del software ha sido validada contra la librería transformers de Hugging Face, garantizando que la decodificación codiciosa produzca exactamente los mismos tokens que el sistema de referencia. El proyecto incluye una interfaz de usuario completa con streaming SSE y métricas Prometheus, facilitando su integración en entornos de producción.