La ejecución de modelos de lenguaje grandes (LLMs) en hardware de consumo presenta un desafío fundamental en la computación: cómo gestionar modelos que exceden la capacidad de memoria RAM disponible. Tradicionalmente, esto ha requerido hardware especializado con grandes cantidades de VRAM. Colibrì aborda este problema aprovechando la arquitectura Mixture-of-Experts (MoE), donde solo un subconjunto de parámetros (expertos) se activa por cada token. Esto permite un diseño donde la mayoría de los expertos residen en disco y se cargan bajo demanda, transformando el cuello de botella de la memoria en un problema de latencia de E/S.

Este enfoque se alinea con principios de gestión de memoria virtual y paginación, pero aplicado a la carga dinámica de componentes de un modelo de IA. La clave es reconocer que no todos los parámetros son necesarios simultáneamente, permitiendo un 'swapping' inteligente de las partes menos utilizadas. La relevancia de este problema ha crecido exponencialmente con el tamaño de los LLMs, haciendo que la inferencia eficiente en el 'edge' o en dispositivos con recursos limitados sea un área crítica de investigación y desarrollo.

Arquitectura del Sistema

Colibrì es un motor de inferencia escrito en C puro, sin dependencias externas en tiempo de ejecución (excepto OpenMP para paralelización CPU y opcionalmente CUDA). El modelo GLM-5.2 MoE de 744B parámetros se divide en una parte densa (~17B parámetros) que reside en RAM (9.9 GB en int4) y 21,504 expertos (~19 MB cada uno en int4) que se almacenan en disco (~370 GB).

La arquitectura se basa en un sistema de streaming de expertos bajo demanda. Cuando un token requiere un experto específico, este se carga desde disco. Para mitigar la latencia de E/S, Colibrì implementa una caché LRU por capa para los expertos, un 'hot-store' opcional en RAM (o VRAM con CUDA), y aprovecha la caché de páginas del sistema operativo como una caché L2 gratuita. Utiliza kernels de punto entero (Q8_0-style int8 activations, AVX2 maddubs) para las operaciones de matriz, optimizando el rendimiento de la CPU. La atención MLA (q/kv-LoRA, RoPE parcial intercalado) con KV-cache comprimida reduce significativamente el uso de memoria. El enrutador sigmoid estilo DeepSeek-V3 decide qué expertos activar. Para la decodificación especulativa, emplea el cabezal de predicción multi-token (MTP) de GLM-5.2, que genera borradores de tokens verificados por el modelo principal en un forward por lotes. Un prefetcher de expertos (PILOT) utiliza la predictibilidad del enrutamiento para cargar expertos de la siguiente capa de forma asíncrona (WILLNEED). La persistencia de la KV-cache permite reanudar conversaciones sin re-prefill. La cuantización de FP8 a int4 se realiza offline, shard por shard, para evitar requerir el checkpoint completo en disco simultáneamente.

Flujo de Inferencia de Token con Streaming de Expertos

  1. 1 Input Token El token de entrada se procesa por la parte densa del modelo (en RAM).
  2. 2 Router (CPU) El router sigmoid determina qué expertos son necesarios para la siguiente capa.
  3. 3 Expert Cache (RAM/Disk) Se verifica si los expertos requeridos están en la caché LRU en RAM.
  4. 4 Disk I/O (NVMe) Si no están en caché, los expertos se cargan desde disco (con prefetching así...
  5. 5 Expert Computation (CPU) Los expertos cargados realizan sus cálculos (kernels int8/int4 AVX2).
  6. 6 Output Token El resultado se combina y se genera el siguiente token.

Flujo de Conversión de Modelo FP8 a int4

  1. 1 Descarga Shard Se descarga un shard del modelo FP8 (ej. ~5 GB).
  2. 2 Dequantización El shard se dequantiza a formato de punto flotante.
  3. 3 Requantización Se requantiza al contenedor int4 del motor (con escalas por fila).
  4. 4 Almacenamiento int4 El shard convertido se guarda en disco.
  5. 5 Eliminar Shard FP8 El shard FP8 original se elimina para liberar espacio.
  6. 6 Repetir El proceso se repite para todos los shards hasta completar el modelo.
CapaTecnologíaJustificación
compute C (pure) Motor de inferencia principal, optimizado para rendimiento CPU y bajo consumo de recursos. vs Python (runtime), Rust, C++ Compilación con OpenMP para paralelización CPU, AVX2 para kernels de enteros.
storage NVMe SSD Almacenamiento primario para los expertos del modelo, crucial para el streaming de alta velocidad. vs HDD, NFS (red) Rutas ext4, acceso directo (O_DIRECT) para evitar el overhead del sistema de archivos.
cache LRU Cache (in-memory) Caché de expertos por capa para reducir las lecturas de disco repetitivas. vs LFO, LFU Tamaño auto-ajustable basado en la RAM disponible (MemAvailable).
compute CUDA (opcional) Aceleración para tensores residentes y expertos 'hot' en VRAM, aunque el streaming principal sigue en CPU. vs OpenCL, ROCm CUDA_DENSE=1 para tensores densos en GPU, CUDA_EXPERT_GB para presupuesto de VRAM de expertos.
data-processing Quantization Kernels (int8/int4) Optimización de memoria y velocidad de cálculo para las operaciones de matriz. vs FP16, FP32 Per-row scales, AVX2 maddubs, packing int4/int2.
networking HTTP API (OpenAI-compatible) Interfaz de servicio para el motor de inferencia, permitiendo integración con aplicaciones externas. vs gRPC, REST (custom) Python standard library gateway, SSE streaming, localhost por defecto.

Trade-offs

Ganancias
  • ▲▲ Capacidad de ejecutar modelos muy grandes
  • Reducción de requisitos de RAM
  • Costo de hardware reducido
Costes
  • Latencia en frío (cold start)
  • Dependencia del rendimiento del disco
  • Complejidad de gestión de caché y E/S
posix_fadvise(fd, offset, length, POSIX_FADV_WILLNEED);
Uso de la sugerencia WILLNEED para el kernel de Linux para prefetch de datos de expertos, solapando E/S con cómputo.
/* Ejemplo conceptual, el código real es más complejo y específico de AVX2 */
void matmul_int8_avx2(int8_t *A, int8_t *B, int32_t *C, int M, int N, int K) {
    // ... AVX2 intrinsics like _mm256_maddubs_epi16, _mm256_add_epi32 ...
}
Implementación de kernels de multiplicación de matrices de enteros (int8/int4) utilizando instrucciones AVX2 para eficiencia.

Fundamentos Teóricos

El concepto de cargar componentes de un programa o datos desde almacenamiento secundario a memoria principal bajo demanda es un pilar de los sistemas operativos modernos, conocido como paginación o 'demand paging', formalizado en los primeros trabajos sobre memoria virtual. Colibrì extiende esta idea al dominio de los modelos de IA, donde los 'expertos' actúan como 'páginas' lógicas que se cargan según la necesidad computacional. La gestión de la caché LRU es un algoritmo clásico de reemplazo de páginas, estudiado extensamente en la literatura de sistemas operativos y bases de datos, con autores como Belady (1966) que sentaron las bases para su análisis.

La arquitectura Mixture-of-Experts (MoE) tiene sus raíces en trabajos como 'Adaptive Mixture of Local Experts' de Jacobs et al. (1991), que propuso combinar múltiples redes neuronales especializadas para mejorar el rendimiento. Más recientemente, papers como 'Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer' de Shazeer et al. (2017) han popularizado el uso de MoE en modelos de gran escala, sentando las bases teóricas para la eficiencia computacional que Colibrì explota. La optimización de la E/S y el prefetching se basan en principios de sistemas distribuidos y bases de datos, donde la anticipación de accesos a datos es crucial para la latencia.