La ejecución de modelos de lenguaje grandes (LLMs) en dispositivos con recursos limitados, como teléfonos móviles o laptops de consumo, presenta un desafío fundamental en la computación distribuida y de sistemas: cómo gestionar la memoria y el ancho de banda de E/S cuando el tamaño del modelo excede la RAM disponible. Tradicionalmente, esto ha requerido la descarga a servidores remotos o el uso de modelos significativamente más pequeños. Swiftlet aborda este problema implementando un patrón de 'expert streaming' para modelos Mixture-of-Experts (MoE).
Los modelos MoE, como la familia Qwen3-Next, distribuyen la complejidad computacional a través de una gran cantidad de 'expertos', pero solo un subconjunto pequeño de estos expertos se activa para procesar cada token. Esta característica inherente permite una estrategia de paginación o streaming de pesos, donde solo los expertos necesarios se cargan en memoria en el momento preciso. Swiftlet capitaliza esta arquitectura para desacoplar el tamaño total del modelo del pico de uso de RAM, permitiendo la inferencia de modelos de decenas de miles de millones de parámetros en entornos con gigabytes de RAM, no terabytes.
Arquitectura del Sistema
Swiftlet se compone de varios módulos clave: un runtime de Swift + Metal, un empaquetador de modelos (.qpack), y una capa de sesión para la interacción con el usuario. El corazón de la arquitectura es el mecanismo de 'expert streaming'. Los pesos del modelo se dividen en dos categorías: pesos densos (atención, proyecciones DeltaNet, routers, expertos compartidos, embeddings) que residen permanentemente en RAM, y los expertos dispersos que se almacenan en disco.
El empaquetador swiftlet-repack organiza los expertos dispersos en un contenedor .qpack con un formato de 'fixed-stride blobs'. Esto significa que cada experto se almacena en una posición predecible y de tamaño fijo, permitiendo que la lectura de un experto desde SSD sea una operación pread única y eficiente, evitando el uso de mmap y el 'page-cache thrash'. Durante la inferencia, el router del modelo determina qué expertos son necesarios para el token actual. Swiftlet utiliza un pool de slots con una política de desalojo LFU (Least Frequently Used) más recencia para cachear los expertos 'calientes'. La baja latencia de los SSD de Apple minimiza el impacto de los 'cache misses'.
La ejecución del 'forward pass' se realiza completamente en Metal, utilizando shaders compilados en tiempo de ejecución. Esto elimina la necesidad de una toolchain de Metal en tiempo de compilación y asegura la compatibilidad entre iOS y macOS. Además, el 75% de las capas utilizan Gated DeltaNet linear attention con un estado recurrente de tamaño fijo, lo que elimina el crecimiento del KV cache para esas capas, un problema común en transformers tradicionales. Swiftlet también incluye una implementación de cuantificación MLX affine int4/int8 en Metal, con kernels direccionados por bytes y gestión explícita de riesgos.
Flujo de Inferencia con Expert Streaming
- 1 Token Input El token de entrada se procesa por las capas densas del modelo (embeddings, a...
- 2 Router MoE El router del modelo determina qué expertos dispersos son necesarios para el ...
- 3 Cache de Expertos Se verifica si los expertos requeridos están en el pool de caché (LFU + recen...
- 4 Cache Hit Si el experto está en caché, se utiliza directamente.
- 5 Cache Miss Si no está en caché, se realiza una operación `pread` desde el `.qpack` en SSD.
- 6 Carga de Experto El experto se carga en un slot disponible del pool de caché.
- 7 Forward Pass (Metal) El cálculo del forward pass se ejecuta en la GPU (Metal) con los expertos car...
- 8 Token Output Se genera el token de salida.
| Capa | Tecnología | Justificación |
|---|---|---|
| compute | Apple Silicon (GPU/NPU) | Proporciona la capacidad de cómputo de alto rendimiento y bajo consumo para la inferencia del modelo, especialmente a través de su API Metal. vs CPU (inferencia más lenta), otras GPUs (no compatibles con Metal) Uso de Metal con shaders compilados en tiempo de ejecución para portabilidad iOS/macOS. |
| storage | SSD (NVMe) | Almacena los pesos de los expertos dispersos en el formato `.qpack`. La baja latencia de los SSD de Apple es crítica para el rendimiento del expert streaming. vs HDD (latencia inaceptable), RAM (costo/capacidad prohibitiva para modelos grandes) Lecturas `pread` de 'fixed-stride blobs' para eficiencia. |
| orchestration | SwiftletCore | Biblioteca central que gestiona la carga de modelos, el expert streaming, la caché de expertos, la inferencia en Metal y la coordinación de la presión de memoria en iOS. vs Implementaciones de frameworks ML existentes (no optimizados para expert streaming MoE) Integración con `SwiftletSession` para gestión de chat y `swiftlet-repack` para preparación de modelos. |
| data-processing | MLX affine int4/int8 group quantization | Reduce el tamaño de los modelos y el ancho de banda de memoria requerido para los pesos, sin una pérdida significativa de precisión. vs Float32 (mayor consumo de memoria), otras cuantificaciones (compatibilidad, rendimiento) Kernels de Metal byte-addressed con offsets de 64 bits para shards multi-gigabyte. |
| cache | Bounded slot pool with LFU + recency eviction | Almacena temporalmente los expertos más utilizados en RAM para reducir las lecturas de disco y mejorar la latencia de inferencia. vs LRU (menos óptimo para patrones de acceso MoE), sin caché (mayor dependencia de E/S) Tamaño de caché optimizado para el rendimiento de SSD. |
Trade-offs
Ganancias
- ▲▲ Reducción del pico de uso de RAM
- ▲ Capacidad de ejecutar modelos de gran escala en dispositivos edge
- ▲ Portabilidad iOS/macOS con el mismo código
Costes
- △ Dependencia del rendimiento del SSD
- △ Complejidad de implementación del expert streaming y la gestión de caché
- ▲ Rendimiento de 'recall' de hechos limitado a los ~3B parámetros activos por token
.build/release/swiftlet-repack \
--from-hf Leonickson/Qwen3.6-35B-A3B-qpack \
--output ~/models/qwen3.6-35b.qpack.build/release/swiftlet chat ~/models/qwen3.6-35b.qpack \
"Who wrote One Hundred Years of Solitude?" "What language did he write it in?"Fundamentos Teóricos
El concepto de 'expert streaming' y la optimización de la carga de modelos grandes desde almacenamiento se relaciona con principios fundamentales de la gestión de memoria virtual y sistemas de archivos. La idea de cargar solo las partes activas de un programa o conjunto de datos es análoga a la paginación bajo demanda en sistemas operativos, donde las páginas de memoria se cargan desde disco solo cuando son referenciadas. En el contexto de LLMs, esto se vuelve crítico debido al tamaño masivo de los modelos.
Este enfoque se inspira en trabajos previos como TurboFieldfare, que demostró la viabilidad del 'expert streaming' para modelos Gemma en Macs, y Colibrì, que informó las políticas de caché y colocación. La eficiencia de la operación pread para cargar bloques de datos específicos sin la sobrecarga de mmap es un principio bien establecido en el diseño de sistemas de archivos de alto rendimiento y bases de datos. La gestión de la caché con políticas LFU y recencia es un algoritmo clásico de reemplazo de caché, estudiado extensamente en la literatura de sistemas operativos y bases de datos para optimizar el rendimiento de la memoria jerárquica.