La ejecución de Large Language Models (LLMs) en hardware de consumo, especialmente aquellos con memoria unificada limitada como Apple Silicon, presenta un desafío fundamental: la capacidad de los modelos excede la memoria física disponible. Este problema se agrava con la tendencia de los LLMs a crecer en tamaño, haciendo que la carga ingenua de tensores resulte en 'swap-thrashing' y la intervención del 'OOM killer'. La tesis central de Hypura es que, mediante una comprensión profunda de la arquitectura del modelo y las características del hardware, es posible orquestar una estrategia de gestión de memoria multi-tier que extienda la capacidad efectiva de la memoria más allá de los límites físicos de la RAM, utilizando el almacenamiento NVMe como una capa de memoria de menor latencia y mayor capacidad.

Este enfoque no es nuevo en la computación de alto rendimiento; la jerarquía de memoria ha sido un pilar desde los primeros sistemas. Lo que Hypura aporta es la aplicación inteligente de estos principios a la carga dinámica de tensores de LLMs, explotando patrones de acceso específicos (como la escasez en modelos MoE) y las capacidades de rendimiento del NVMe moderno. Al tratar el NVMe no como un disco de almacenamiento general, sino como una extensión de la memoria principal, se habilita una nueva clase de cargas de trabajo de inferencia en dispositivos de borde y estaciones de trabajo personales que de otro modo serían inviables.

Arquitectura del Sistema

Hypura opera como un planificador de inferencia que asigna tensores de modelos GGUF a diferentes tiers de memoria: GPU (Metal), RAM y NVMe. Inicialmente, perfila el hardware (GPU working set, RAM, ancho de banda NVMe) para construir un modelo de costos. Luego, resuelve un problema de optimización de colocación (LP + greedy) para asignar cada tensor a un tier, basándose en patrones de acceso, costos de ancho de banda y capacidades de hardware.

Para modelos MoE (Mixtral), Hypura implementa un modo 'expert-streaming'. Los tensores de normas y embeddings, pequeños pero de acceso frecuente, se fijan en la GPU. El enrutamiento de expertos se intercepta en el callback de evaluación para identificar los expertos seleccionados, cargando solo los 'strides' necesarios desde NVMe. Un 'neuron cache' rastrea las porciones de expertos cargadas entre tokens, logrando altas tasas de acierto. La co-activación se utiliza para prefetch especulativo. Para modelos densos (Llama 70B), el modo 'dense FFN-streaming' mantiene las capas de atención y normas en GPU, mientras que los pesos FFN se transmiten desde NVMe a través de un 'pool buffer' de tamaño dinámico, con una profundidad de prefetch que escala automáticamente con la memoria disponible. La lectura desde NVMe utiliza direct I/O ('F_NOCACHE' + 'pread') para evitar el cacheo del sistema operativo y optimizar el rendimiento. El sistema se integra con 'llama.cpp' a través de FFI para la ejecución de la inferencia.

Flujo de Inferencia con Expert-Streaming (MoE)

  1. 1 Hypura Scheduler Asigna tensores de normas/embeddings a GPU, expertos a NVMe.
  2. 2 GPU (Metal) Ejecuta capas de normas y embeddings, inicia evaluación.
  3. 3 Router Interception Identifica expertos necesarios para el token actual.
  4. 4 Neuron Cache Verifica si los expertos requeridos están en caché (RAM/GPU).
  5. 5 NVMe Backend Carga solo los 'strides' de expertos faltantes desde NVMe (F_NOCACHE + pread).
  6. 6 GPU (Metal) Ejecuta los expertos cargados y el resto del forward pass.
  7. 7 Co-activation Tracking Predice próximos expertos para prefetch especulativo.

Flujo de Inferencia con Dense FFN-Streaming

  1. 1 Hypura Scheduler Asigna atención/normas a GPU, FFN a NVMe.
  2. 2 GPU (Metal) Ejecuta capas de atención y normas.
  3. 3 NVMe Backend Transmite tensores FFN desde NVMe a 'pool buffer' (RAM/GPU).
  4. 4 Pool Buffer Almacena dinámicamente tensores FFN, gestiona prefetch.
  5. 5 GPU (Metal) Ejecuta capas FFN con tensores del pool buffer.
  6. 6 Prefetch Lookahead Ajusta profundidad de prefetch según memoria disponible.
CapaTecnologíaJustificación
compute Apple Metal GPU Motor principal para la ejecución de tensores de LLMs, aprovechando la memoria unificada de Apple Silicon. recommendedMaxWorkingSetSize para determinar la capacidad de la GPU.
storage NVMe SSD Tier de almacenamiento de baja latencia para tensores que exceden la RAM/GPU, utilizado como extensión de memoria. Uso de F_NOCACHE y pread para direct I/O, evitando el cacheo del OS.
data-processing GGUF format Formato de archivo para modelos LLM, que Hypura lee y perfila para la colocación de tensores.
orchestration Custom Scheduler (Rust) Componente central que perfila hardware, resuelve la optimización de colocación de tensores y gestiona los modos de inferencia. LP + greedy tensor placement.
messaging Ollama-compatible HTTP API (Axum) Interfaz de servicio para la inferencia de LLMs, permitiendo la integración con herramientas existentes. Soporte para NDJSON streaming.

Trade-offs

Ganancias
  • ▲▲ Capacidad de ejecución de modelos
  • Estabilidad del sistema
  • Utilización de hardware existente
Costes
  • Latencia de inferencia para modelos muy grandes
  • Complejidad del sistema de gestión de memoria

Fundamentos Teóricos

La gestión de memoria multi-tier y la optimización de la jerarquía de memoria son conceptos fundamentales en la arquitectura de computadoras, explorados extensamente desde los primeros días de la computación. El principio de localidad (temporal y espacial), descrito por Peter Denning en su trabajo sobre 'working sets' en los años 60, es central para el éxito de Hypura. La idea de mover datos entre diferentes capas de almacenamiento con distintas latencias y capacidades para optimizar el rendimiento es una aplicación directa de estos principios. La explotación de la escasez en modelos MoE para reducir la carga de datos se alinea con investigaciones en 'sparse matrix computations' y 'out-of-core algorithms', que buscan procesar conjuntos de datos más grandes que la memoria principal disponible. Aunque no se cita un paper específico, el diseño de Hypura refleja la aplicación práctica de décadas de investigación en sistemas operativos, bases de datos y computación de alto rendimiento sobre cómo gestionar eficientemente recursos de memoria heterogéneos.