El problema fundamental que ds4.c aborda es la limitación de memoria RAM en máquinas personales para la inferencia de modelos de lenguaje grandes (LLMs) con ventanas de contexto extensas. Tradicionalmente, el KV cache, que almacena las claves y valores de atención para tokens previamente procesados, reside completamente en RAM, lo que impone un cuello de botella significativo para contextos de millones de tokens. ds4.c desafía esta suposición al tratar el KV cache como un ciudadano de primera clase en disco, aprovechando la velocidad de los SSD modernos en MacBooks.
Esta aproximación es relevante ahora debido a la creciente demanda de ejecutar LLMs potentes localmente y la evolución de modelos como DeepSeek V4 Flash, que ofrecen ventanas de contexto de hasta 1 millón de tokens. La capacidad de persistir y reutilizar el KV cache en disco no solo reduce los requisitos de RAM, sino que también permite reanudar sesiones de inferencia sin recalcular prefijos largos, mejorando la eficiencia y la experiencia del usuario en escenarios de agentes conversacionales y desarrollo iterativo.
Arquitectura del Sistema
ds4.c es un motor de inferencia monolítico y altamente especializado. Su núcleo es un executor de grafos Metal específico para DeepSeek V4 Flash, que maneja la carga del modelo, el renderizado de prompts, la gestión del estado del KV cache y una API de servidor. La implementación se basa en la experiencia de proyectos como llama.cpp y GGML, adaptando sus kernels y formatos de cuantización (GGUF) para las particularidades de DeepSeek V4 Flash.
La característica arquitectónica distintiva es el sistema de KV cache en disco. Este cache almacena 'checkpoints' de sesiones de inferencia, incluyendo IDs de tokens, logits para el siguiente token, y el estado interno del modelo (filas KV comprimidas y tensores de frontera del compresor/indexer). Los archivos de cache se identifican por el SHA1 de los IDs de tokens y se escriben directamente al disco sin mmap, evitando la sobrecarga de mapeos de memoria virtual. El sistema soporta diferentes estrategias de guardado (cold, continued, evict, shutdown) y permite la reutilización de prefijos de tokens entre sesiones e incluso entre variantes de cuantización (2-bit y 4-bit) del modelo. La cuantización de 2-bit es asimétrica, aplicando IQ2_XXS y Q2_K solo a los expertos MoE ruteados, dejando otros componentes sin tocar para mantener la calidad.
Flujo de Inferencia con KV Cache en Disco
- 1 Cliente Envía una solicitud de inferencia (e.g., chat completion) al servidor ds4-ser...
- 2 ds4-server Recibe la solicitud y compara el prefijo de tokens con el KV cache en memoria.
- 3 KV Cache (Memoria) Si el prefijo coincide, reanuda la sesión desde el checkpoint en memoria.
- 4 KV Cache (Disco) Si no hay coincidencia en memoria, busca un checkpoint en disco (SHA1 de toke...
- 5 ds4-server Carga el checkpoint de disco si existe, evitando el prefill completo.
- 6 Motor Metal Realiza la inferencia (prefill si es necesario, luego generación de tokens).
- 7 ds4-server Guarda el estado del KV cache en disco (cold, continued, evict, shutdown) y e...
- 8 Cliente Recibe la respuesta (streaming o final).
| Capa | Tecnología | Justificación |
|---|---|---|
| compute | Metal | Backend principal para la ejecución de grafos de inferencia, optimizado para Apple Silicon. vs CUDA (futuro potencial), CPU (solo para depuración/verificación) |
| storage | Sistema de archivos local (SSD) | Persistencia del KV cache para contextos largos y reutilización entre sesiones, aprovechando la velocidad de los SSD modernos. vs RAM (enfoque tradicional, limitado por capacidad) --kv-disk-dir, --kv-disk-space-mb |
| data-processing | GGUF (adaptado) | Formato de archivo para modelos cuantizados, adaptado para las particularidades de DeepSeek V4 Flash y su cuantización asimétrica. vs GGUF genérico (rechazado por especialización) Cuantización asimétrica (IQ2_XXS, Q2_K para expertos ruteados) |
| networking | HTTP API (OpenAI/Anthropic compatible) | Interfaz de servicio para la inferencia, permitiendo la integración con clientes de agentes de código y otras aplicaciones. |
Trade-offs
Ganancias
- ▲ Capacidad de contexto largo en hardware local
- ▲ Reducción de requisitos de RAM para KV cache
- ▲ Reutilización de prefijos de conversación entre sesiones
- ▲ Rendimiento de inferencia competitivo en Apple Silicon
Costes
- ▲ Especialización a un modelo/arquitectura específica (DeepSeek V4 Flash)
- ▲ Dependencia de hardware Apple Silicon (Metal)
- △ Complejidad de gestión de cache en disco
- △ Overhead de E/S de disco para el KV cache
KVC fixed header, 48 bytes
u32 rendered_text_bytes
rendered_text_bytes of UTF-8-ish token text
DS4 session payload, payload_bytes from the KVC header{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ds4": {
"name": "ds4.c (local)",
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "http://127.0.0.1:8000/v1",
"apiKey": "dsv4-local"
},
"models": {
"deepseek-v4-flash": {
"name": "DeepSeek V4 Flash (ds4.c local)",
"limit": {
"context": 100000,
"output": 384000
}
}
}
}
},
"agent": {
"ds4": {
"description": "DeepSeek V4 Flash served by local ds4-server",
"model": "ds4/deepseek-v4-flash",
"temperature": 0
}
}
}Fundamentos Teóricos
El concepto de gestionar el estado de un modelo en disco, especialmente el KV cache, se relaciona con principios de sistemas de memoria jerárquica y paginación, fundamentales en la arquitectura de computadoras. Aunque no hay un paper único que prediga directamente el 'KV cache en disco', la idea de extender la memoria principal con almacenamiento secundario para manejar conjuntos de datos más grandes es un pilar de la computación desde los primeros sistemas operativos con memoria virtual. La optimización del acceso a disco para datos estructurados como el KV cache puede verse como una aplicación de técnicas de bases de datos, donde la persistencia y la recuperación eficiente de grandes volúmenes de datos son críticas. La compresión del KV cache, mencionada como 'incredibly compress', se alinea con investigaciones en compresión de datos para reducir la huella de memoria y mejorar el rendimiento de E/S, un campo con décadas de estudio en la ciencia de la computación.