Cómo ejecutar una red neuronal de 744 mil millones de parámetros en un ordenador normal
Cuando abres la página de un modelo como GLM-5.2 con 744 mil millones de parámetros o Kimi K3 con 2.8 billones, el primer pensamiento es bastante directo: necesitas un rack de servidores con una docena de GPUs H100. Si no tienes esos recursos a mano, la única opción que queda es pagar por llamadas a la API.
Hace poco me encontré con el proyecto JustVugg/colibri. El autor escribió un motor de inferencia ligero en C puro sin dependencias de terceros. El motor logra ejecutar modelos MoE masivos en un escritorio o portátil normal con 24 GB de RAM, extrayendo los pesos directamente desde un SSD rápido.
Cuál es el truco
La arquitectura Mixture-of-Experts (MoE) está diseñada para que no sea necesario tener todo el modelo para generar un solo token. Por ejemplo, en GLM-5.2 de los 744 mil millones de parámetros, solo unos 40 mil millones están activos. Además, de token a token, solo cambian unos 11 GB de pesos, correspondientes a los expertos seleccionados por el enrutador.
En lugar de intentar meter 370 GB de modelo en la memoria de vídeo, el motor distribuye los datos a través de una jerarquía de almacenamiento:
- La parte densa del modelo (embeddings, atención, capas compartidas) pesa aproximadamente 9.9 GB en cuantización int4 y permanece permanentemente en la RAM.
- Casi 20,000 expertos residen en un SSD NVMe rápido y se cargan bajo demanda mediante E/S asíncrona.
- Los expertos de uso frecuente se establecen en la caché LRU de la RAM o VRAM.
Esencialmente, esto funciona como un compilador JIT, pero para los pesos de redes neuronales. El motor rastrea estadísticas de acceso, recuerda las ramas activas y almacena en caché exactamente los expertos necesarios para el contexto actual.
Cómo funciona el motor
La base de código es concisa. El núcleo está escrito en C (cada familia de modelos está separada en su propio archivo, por ejemplo c/colibri.c para GLM) y se compila con gcc o clang con soporte para OpenMP. Sin marcos gigantes ni entornos de ejecución monstruosos. Python se usa solo para la conversión de pesos única vez y el envoltorio de la interfaz web.
Al generar cada token, el motor realiza varios pasos:
- Calcula el enrutamiento una capa por delante a través de un hilo de prefetch separado. El enrutador predice el experto necesario con aproximadamente un 71% de precisión, por lo que las lecturas de disco ocurren en paralelo con los cálculos.
- Fusiona las solicitudes a expertos idénticos en un lote para eliminar lecturas duplicadas.
- Lee las tres matrices de cada experto en una única llamada al sistema
pread. - Guarda las estadísticas de aciertos en un archivo de historial para que en ejecuciones posteriores, las capas activas se pre-asignen en memoria.
El soporte para dos dispositivos de almacenamiento está implementado de forma interesante. Si distribuyes copias de pesos en dos SSD diferentes, el motor distribuye las solicitudes de expertos proporcionalmente a la velocidad de lectura de cada disco. Un par de unidades con velocidades de 9 GB/s y 3 GB/s acelera la lectura en aproximadamente un tercio.
Para la aceleración del cálculo, se admiten CUDA, Metal en chips Apple Silicon y Vulkan. La variante Vulkan funciona incluso con GPUs más antiguas como la AMD RX 580 a través del controlador RADV, para el cual el proveedor cerró el soporte para el último ROCm hace mucho tiempo.
El paquete incluye un panel web con visualización de actividad de expertos. En la página Atlas, puedes rotar un mapa 3D de miles de expertos y observar cómo diferentes grupos manejan código, temas legales o idiomas extranjeros.
Cifras reales de velocidad
No hay milagros, por lo que la velocidad está limitada por el rendimiento del disco y la memoria disponible.
Los benchmarks del proyecto registraron los siguientes resultados en el modelo GLM-5.2:
- Un portátil con 25 GB de RAM y una caché fría produce unos modestos 0.05-0.1 tokens por segundo. Es lento, pero el modelo responde sin distorsión lógica.
- Una estación de trabajo con 128 GB de RAM sin GPU dedicada ofrece aproximadamente 1.8 tokens por segundo con una caché caliente.
- Un portátil con una RTX 5070 Ti móvil acelera hasta 1.07 tokens por segundo gracias al pipeline de la GPU.
- Un servidor con seis tarjetas RTX 5090 mantiene a los expertos completamente en la memoria de vídeo y muestra 5.8-6.8 tokens por segundo.
Modelos soportados
Además del GLM-5.2 base, el autor añadió soporte para cuatro arquitecturas más:
- Inkling (975B) — ejecutar la parte densa en int4 requiere aproximadamente 25 GB de RAM y 469 GB de espacio en disco.
- Kimi K3 (2.8T) — un gigante que pesa 1.6 TB, lee pesos nativos MXFP4 directamente desde fragmentos originales sin pre-conversión.
- DeepSeek V4 Flash (284B) — funciona con 167 GB de pesos en formato fp4/fp8 y requiere de 16 a 22 GB de RAM.
- OLMoE (7B) — una variante compacta con 4 GB de pesos para experimentos rápidos con 8 GB de RAM.
Cómo ejecutar
El motor se distribuye como binarios precompilados para Linux, macOS y Windows, o puede construirse desde el código fuente en un minuto:
git clone https://github.com/JustVugg/colibri && cd colibri/c
./setup.sh
Después de construir, descarga los pesos cuantizados para el modelo deseado desde Hugging Face (por ejemplo, GLM-5.2 int4 ocupa aproximadamente 372 GB) e inicia el chat a través de la terminal:
COLI_MODEL=/path/to/glm52_i4 ./coli chat
Si quieres un servidor local compatible con la API de OpenAI junto con el panel web, ejecuta:
./coli web --model /path/to/glm52_i4
Antes de lanzar, vale la pena verificar la distribución de memoria con ./coli plan y ejecutar una prueba rápida de hardware con ./coli tune.
A quién le será útil este proyecto
Es poco probable que Colibrì sea adecuado para producción de alta carga debido a la latencia de lectura de disco en hardware de consumo. Sin embargo, es un gran hallazgo para investigadores, entusiastas y desarrolladores que necesitan probar el razonamiento de los mejores modelos de código abierto localmente sin comprar GPUs de servidor por millones de rublos. El código central es compacto y transparente, lo que hace que el motor sea conveniente para usar como un playground para tus propios experimentos con E/S y cuantización.
Proyectos relacionados