El problema fundamental que Janas-LLM aborda es la brecha entre la creciente escala de los modelos de lenguaje (LLM), especialmente los modelos Mixture-of-Experts (MoE) con decenas o cientos de miles de millones de parámetros, y las limitaciones de memoria y capacidad de cómputo del hardware de consumo. Tradicionalmente, estos modelos requieren infraestructuras de GPU de alta gama y grandes cantidades de RAM, haciéndolos inaccesibles para usuarios individuales o entornos con presupuestos limitados. Janas-LLM busca democratizar el acceso a LLMs de gran escala, permitiendo su ejecución eficiente en laptops y PCs de escritorio con 32 GB de RAM o menos.
La relevancia de este problema es crítica en la era actual de la IA, donde la innovación en LLMs avanza rápidamente, pero su adopción se ve frenada por los requisitos de hardware. Al permitir la ejecución local de modelos grandes, Janas-LLM habilita nuevas aplicaciones de IA en el edge, mejora la privacidad al reducir la dependencia de servicios en la nube, y fomenta la experimentación y el desarrollo descentralizado. Este enfoque se alinea con la tendencia de optimización de inferencia en dispositivos, un campo que ha visto avances significativos en los últimos años, pero que aún lucha con la escala de los modelos más recientes.
Arquitectura del Sistema
Janas-LLM está diseñado en C, sin dependencias externas más allá de la biblioteca estándar de C, lo que subraya su enfoque en la eficiencia y el control de bajo nivel. Su arquitectura clave reside en la gestión inteligente de la memoria y el almacenamiento para modelos MoE. Los pesos del modelo permanecen en disco, y solo los 'expertos' necesarios para procesar un token específico se transmiten desde un NVMe SSD a la memoria RAM. Los expertos que se utilizan con frecuencia se mantienen en un caché en memoria, optimizando la latencia de acceso.
El sistema utiliza O_DIRECT para lecturas de disco, lo que permite un acceso directo al almacenamiento sin pasar por la caché del sistema operativo, maximizando el rendimiento del NVMe SSD. La asignación de memoria para el caché de expertos se realiza de forma dinámica, ocupando la memoria libre disponible al iniciar el modelo. Para el cómputo, Janas-LLM aprovecha las capacidades de la CPU (incluyendo extensiones como AVX2, FMA, F16C, AVX-VNNI) y, opcionalmente, la GPU integrada (a través de Vulkan/Mesa en Linux o drivers Intel en Windows). El motor mide el rendimiento del hardware en tiempo de ejecución y adapta sus estrategias, como el número de hilos de CPU a utilizar (priorizando los núcleos de rendimiento) y la distribución de la carga entre CPU y GPU, para optimizar la latencia y el throughput. La arquitectura también incluye un mecanismo de 'drafting' o borrador, donde un bloque de predicción más pequeño o un modelo asistente genera borradores de tokens que el modelo principal verifica, acelerando la generación de texto.
Flujo de Inferencias de Token con MoE
- 1 Solicitud de Token El modelo necesita generar el siguiente token.
- 2 Gating Network La red de gating determina qué expertos son relevantes para el token actual.
- 3 Caché de Expertos (RAM) Verifica si los expertos requeridos están en el caché de memoria.
- 4 Carga de Expertos (NVMe SSD) Si no están en caché, los expertos se cargan desde el NVMe SSD usando O_DIRECT.
- 5 Cómputo de Expertos (CPU/GPU) Los expertos cargados procesan el token en CPU (con AVX-VNNI) o GPU integrada.
- 6 Combinación de Salidas Las salidas de los expertos se combinan para producir el logits del token.
- 7 Generación de Token El token final se selecciona y se añade a la secuencia de salida.
| Capa | Tecnología | Justificación |
|---|---|---|
| compute | Intel Core Ultra 9 185H (CPU) | Procesamiento principal de inferencia, especialmente para modelos densos y expertos MoE. Utiliza extensiones AVX2, FMA, F16C, AVX-VNNI para aceleración. vs AMD CPUs, otras arquitecturas x86-64 sin AVX-VNNI El motor adapta el número de hilos de CPU (performance cores, efficiency cores) dinámicamente según mediciones de rendimiento. |
| compute | Intel Arc GPU (integrada) | Aceleración de inferencia para prompts y, en algunos casos, para la generación de tokens. Utiliza Vulkan en Linux y drivers Intel en Windows. vs GPU discretas de NVIDIA/AMD, ejecución exclusiva en CPU Uso opcional (JANAS_GPU=0 para desactivar). El motor decide cuándo y cómo usarla basándose en mediciones de rendimiento. |
| storage | NVMe SSD (1 TB, ~5.7 GB/s) | Almacenamiento persistente de los pesos completos del modelo y carga rápida de expertos MoE bajo demanda. Crucial para modelos que exceden la RAM. vs SATA SSDs, HDDs Utiliza O_DIRECT para acceso directo al disco, evitando la caché del sistema operativo para maximizar el throughput. |
| cache | DDR5 RAM (32 GB) | Caché de expertos MoE más utilizados y almacenamiento de datos intermedios. La memoria libre se utiliza para el caché de expertos. vs menos RAM, RAM más lenta --cache <GiB> permite establecer un límite duro en la memoria utilizada por el caché de expertos. |
| networking | GNU libmicrohttpd, yyjson, Mbed TLS | Implementación de servidores HTTP (janas-server) y clientes MCP para servicios como API de OpenAI, completado de código y servicios externos (ej. janas-flights, janas-quakes). vs otras bibliotecas HTTP/JSON/TLS libmicrohttpd (LGPL 2.1), yyjson (MIT), Mbed TLS (Apache-2.0/GPL-2.0-or-later). |
Trade-offs
Ganancias
- ▲ Ejecución de LLMs de gran escala en hardware de consumo
- ▲ Rendimiento de inferencia (throughput)
- ▲ Eficiencia de recursos (memoria, disco)
Costes
- △ Complejidad de la implementación (C, O_DIRECT, gestión manual de caché)
- △ Estabilidad del sistema bajo carga extrema (posible uso de swap, driver resets de GPU)
- △ Portabilidad a hardware no probado (CPUs sin AVX-VNNI, GPUs discretas, discos más lentos)
Fundamentos Teóricos
El concepto de Mixture-of-Experts (MoE) tiene sus raíces en la investigación de redes neuronales de la década de 1990, con trabajos seminales como los de Jacobs et al. (1991) y Jordan y Jacobs (1994) que exploraron la combinación de múltiples redes (expertos) para resolver problemas complejos. Estos primeros trabajos sentaron las bases para la idea de que diferentes partes de un modelo podrían especializarse en diferentes aspectos de la entrada, y un 'gate' o 'gating network' aprendería a seleccionar o ponderar las salidas de los expertos.
La aplicación de MoE a modelos de lenguaje a gran escala, como se ve en Janas-LLM, se ha popularizado más recientemente con arquitecturas como Switch Transformers (Fedus et al., 2021) y GShard (Lepikhin et al., 2021). Estos papers demostraron cómo los MoE pueden escalar a miles de millones de parámetros con una fracción del costo computacional de los modelos densos equivalentes, al activar solo un pequeño subconjunto de expertos por token. El desafío de la gestión de memoria y la latencia de acceso a disco que Janas-LLM aborda es una consecuencia directa de la naturaleza dispersa y masiva de los MoE, donde los pesos del modelo exceden la capacidad de la memoria RAM, requiriendo estrategias eficientes de paginación y caching de expertos, un problema análogo a la gestión de memoria virtual en sistemas operativos o la paginación de datos en bases de datos.