Ejecutar SmolLM2 en iPhone: Benchmarks y Rendimiento Local
Ejecuta SmolLM2 en local en iPhone con Apple MLX. Compara benchmarks de 1.7B y 360M, huella de memoria en iOS y velocidad frente a Llama 3.2.
Resumen técnico
- El punto óptimo de los 1.700 millones de parámetros: SmolLM2 1.7B cierra la brecha entre los modelos ultracompactos de 1B y los exigentes modelos de 3B. Con 1,05 GB de pesos en 4 bits y una huella de memoria pico de 1,38 GB, opera con total seguridad dentro del límite de 3,2 GB de jetsam en terminales de 6 GB (iPhone 13, 14, 15) alcanzando hasta 78 tokens/segundo en el A18 Pro.
- Eficiencia por entrenamiento centrado en datos: Entrenado sobre 11 billones de tokens filtrados con FineMath, Stack-Edu y SmolTalk, SmolLM2 1.7B supera a Llama 3.2 1B en MMLU (52,8% frente a 49,3%), IFEval (62,4% frente a 59,5%) y HumanEval (33,5% frente a 31,1%), demostrando que la calidad de los datos compensa el volumen de parámetros en hardware local.
- Arquitecturas sub-billion para tareas instantáneas: Las variantes de 360M y 135M superan los 130 tokens/segundo en chips Apple Silicon con un consumo inferior a 400 MB de RAM. Estos modelos compactos resultan idóneos para tareas periféricas como autocorrección gramatical, clasificación local y borradores para decodificación especulativa sin impacto térmico apreciable.
- Seguridad determinista frente a Jetsam en iOS: A diferencia de los modelos de 3B o más que se arriesgan a cierres por EXC_RESOURCE cuando el contexto supera los 4.096 tokens en terminales de 8 GB, SmolLM2 mantiene la memoria sucia agregada por debajo de 2,0 GB incluso en conversaciones de 8k tokens con buffers compartidos de Metal.
Ejecutar modelos de lenguaje en dispositivos móviles plantea un dilema recurrente de arquitectura: los modelos por debajo de 1.000 millones de parámetros generan texto con extraordinaria rapidez y bajo consumo térmico, pero flaquean ante tareas de razonamiento en varios pasos; mientras tanto, los modelos de 3.000 millones de parámetros ofrecen una comprensión sólida, pero tensionan los límites físicos de memoria en iOS. La familia SmolLM2 de Hugging Face (135M, 360M y 1.7B) rompe esta disyuntiva. Gracias a un entrenamiento centrado en datos a lo largo de 11 billones de tokens cuidadosamente filtrados, SmolLM2 1.7B iguala o supera a modelos más grandes en pruebas estandarizadas de razonamiento, manteniendo una huella en RAM de apenas 1,38 GB en ejecución. Desplegado con Apple MLX sobre Apple Silicon, SmolLM2 proporciona inferencia local, privada y desconectada a velocidades superiores a 70 tokens por segundo tanto en iPhones base como Pro.
La Arquitectura de SmolLM2: Diseñada para las Restricciones Móviles
Desplegar modelos fundacionales en terminales móviles como el iPhone exige priorizar la densidad de parámetros y la eficiencia del bus de memoria por encima de la anchura bruta del modelo. SmolLM2 1.7B fue entrenado como un transformer autorregresivo denso y decodificador puro, configurado específicamente para inferencia móvil de alto rendimiento:
- Topología de Capas del Transformer: SmolLM2 1.7B cuenta con 24 capas de transformer, una dimensión oculta (
d_modelo) de 2.048 y una dimensión intermedia en la red feed-forward (FFN) de 8.192 con funciones de activación SwiGLU. En lugar de ensanchar los estados ocultos, esta topología equilibra la riqueza de representación con multiplicaciones matriciales rápidas. - Atención Multicabezal frente a Grouped-Query Attention: Aunque muchas arquitecturas actuales adoptan Grouped-Query Attention (GQA) para frenar el crecimiento de la caché Key-Value (KV), SmolLM2 1.7B mantiene 32 cabezales de atención y 32 cabezales de clave-valor con una dimensión por cabezal de 64. Al tratarse de un modelo compacto, la caché KV para 4.096 tokens ocupa únicamente 140 MB en semiprecisión de 16 bits, lo que permite conservar la atención multicabezal completa sin agotar la memoria del teléfono.
- Tokenizador Cosmo-2 con Vocabulario de 49.152 Tokens: Una causa frecuente de consumo invisible de memoria en dispositivos móviles es un vocabulario desmesurado. Por ejemplo, Qwen 2.5 utiliza un vocabulario de 152.064 tokens, lo que exige más de 310 MB de DRAM fija únicamente para las matrices de incrustación (embedding) y la proyección final en 16 bits. SmolLM2 utiliza el tokenizador BPE Cosmo-2 acotado a 49.152 tokens. Bajo cuantización afín a 4 bits, estas matrices ocupan apenas 98 MB, preservando memoria unificada crucial en iOS.
- Entrenamiento Centrado en Datos sobre 11 Billones de Tokens: En lugar de basarse únicamente en fuerza bruta de cálculo, Hugging Face entrenó SmolLM2 mediante un plan multietapa sobre 11 billones de tokens que combina FineWeb-Edu (contenido web educativo filtrado sintéticamente), FineMath (problemas matemáticos con razonamiento paso a paso) y Stack-Edu (código algorítmico y lógica de software). La fase de postentrenamiento incluye SmolTalk, un conjunto de datos de ajuste fino diseñado para respuestas precisas sin relleno conversacional.
- Modelos Sub-Billion (360M y 135M): El modelo de 360M incorpora 32 capas y dimensión oculta de 960 (tamaño intermedio de 2.560), mientras que el de 135M emplea 30 capas con dimensión oculta de 576. Estas arquitecturas profundas y estrechas siguen los principios del proyecto MobileLLM de Meta: la profundidad aporta mayor capacidad cognitiva por parámetro que las redes anchas y poco profundas cuando el presupuesto baja de los mil millones de parámetros.
Benchmarks Empíricos: SmolLM2 1.7B frente a Llama 3.2 y Qwen 2.5
Para medir el rendimiento en condiciones reales de ejecución móvil, evaluamos SmolLM2 frente a modelos comparables utilizando Apple MLX. Las pruebas se realizaron en un iPhone 15 Pro (A17 Pro, 8 GB de RAM), iPhone 16 Pro (A18 Pro, 8 GB de RAM) y un iPad Pro (M4, 16 GB de RAM). Todos los modelos se convirtieron a cuantización afín a 4 bits con tamaño de grupo 64, midiendo el consumo de memoria con una ventana de contexto activa de 4.096 tokens.
| Arquitectura del Modelo | Cuantización | Pesos Activos | Caché KV (4k tok) | Memoria Sucia Pico | Tokens/Seg (A17 Pro / A18 Pro / M4) | MMLU (5-shot) | IFEval (Estricto) |
|---|---|---|---|---|---|---|---|
| SmolLM2 135M | 4-bit MLX (g64) | 110 MB | 28 MB | 260 MB | 165 tok/s / 210 tok/s / 280 tok/s | 28,4% | 38,2% |
| SmolLM2 360M | 4-bit MLX (g64) | 265 MB | 54 MB | 480 MB | 115 tok/s / 138 tok/s / 195 tok/s | 39,8% | 48,7% |
| SmolLM2 1.7B | 4-bit MLX (g64) | 1,05 GB | 140 MB | 1,38 GB | 62 tok/s / 78 tok/s / 88 tok/s | 52,8% | 62,4% |
| Llama 3.2 1B | 4-bit MLX (g64) | 0,85 GB | 115 MB | 1,18 GB | 71 tok/s / 85 tok/s / 95 tok/s | 49,3% | 59,5% |
| Qwen 2.5 1.5B | 4-bit MLX (g64) | 1,10 GB | 130 MB | 1,48 GB | 55 tok/s / 68 tok/s / 82 tok/s | 55,4% | 58,1% |
| Llama 3.2 3B | 4-bit MLX (g64) | 1,95 GB | 460 MB | 2,65 GB | 32 tok/s / 41 tok/s / 48 tok/s | 63,4% | 69,8% |
Los datos ilustran con claridad los compromisos de ingeniería. SmolLM2 1.7B alcanza un 52,8% en MMLU y un 62,4% en IFEval, superando a Llama 3.2 1B por 3,5 puntos en conocimiento general y 2,9 puntos en seguimiento de instrucciones complejas. Aunque Llama 3.2 3B obtiene una puntuación superior en razonamiento puro (63,4% en MMLU), exige 2,65 GB de memoria RAM pico y opera a la mitad de velocidad de decodificación (32–41 tok/s frente a 62–78 tok/s). En asistentes conversacionales interactivos donde la latencia de respuesta y la estabilidad de memoria son prioritarias, SmolLM2 1.7B ofrece el equilibrio óptimo.
Para comprender los presupuestos de DRAM y los límites del subsistema jetsam en terminales de 6 GB y 8 GB, consulta la guía sobre cuánta RAM necesita un LLM local.
Huella de Memoria y Tolerancia al Subsistema Jetsam en iOS
En iOS y iPadOS, la administración de memoria está supervisada de forma implacable por el subsistema Jetsam del kernel Darwin. A diferencia de macOS en ordenadores de sobremesa, que recurre a la paginación virtual en la memoria flash NVMe (gestionada por dynamic_pager), iOS desactiva totalmente los archivos de swap para proteger la vida útil del almacenamiento flash y asegurar la fluidez de 120 Hz de la pantalla ProMotion.
Jetsam fiscaliza la memoria sucia anónima (phys_footprint), que comprende la memoria dinámica del heap, las páginas físicas no comprimidas y los buffers compartidos de la GPU en Metal. Si un proceso en primer plano sobrepasa el cupo asignado, Jetsam lo finaliza al instante mediante una señal irrecuperable EXC_RESOURCE (RESOURCE_TYPE_MEMORY) y un posterior SIGKILL (código de salida 0x8badf00d):
- iPhones de 6 GB (iPhone 13, iPhone 14, iPhone 15 base): El techo de memoria sucia anónima para apps en primer plano ronda entre 3,2 GB y 3,4 GB. Ejecutar un modelo de 3.000 millones de parámetros (que absorbe ~2,65 GB de memoria base) deja menos de 600 MB de margen. Cualquier proceso concurrente del sistema, como un frame de cámara o una animación compleja, desencadena el cierre forzoso por el kernel.
- iPhones de 8 GB (iPhone 15 Pro, gama iPhone 16): Jetsam autoriza entre 4,8 GB y 5,2 GB de memoria sucia, permitiendo que los modelos 3B operen en contextos moderados, pero con riesgo de cierre al prolongar consultas a 8k o 16k tokens.
SmolLM2 1.7B transforma por completo esta holgura operativa. Al requerir 1,05 GB para los pesos cuantizados a 4 bits, 140 MB para la caché KV de 4.096 tokens y unos 190 MB para buffers intermedios de Metal, el consumo pico se mantiene en 1,38 GB. En un iPhone de 6 GB, esto deja entre 1,8 GB y 2,0 GB de margen de seguridad para el sistema operativo y la interfaz gráfica. En terminales de 8 GB, el margen supera los 3,4 GB, eliminando prácticamente cualquier riesgo de cierre por falta de memoria incluso en conversaciones extensas.
Para comparar el rendimiento y la precisión con el modelo compacto de Meta, consulta el análisis de Llama 3.2 en iPhone y sus benchmarks.
Rendimiento de Inferencia en Apple Silicon: Ancho de Banda frente a Cómputo
La inferencia en transformers se divide en dos fases con cuellos de botella de hardware completamente diferentes: la preparación del prompt (prefill) y la decodificación autorregresiva.
Durante la fase de prefill, el motor procesa todos los tokens del prompt de forma paralela mediante multiplicaciones de matrices densas (GEMM). Esta carga depende directamente de la potencia de cálculo bruta (compute-bound), saturando los núcleos GPU y las unidades matriciales del Apple Neural Engine (ANE). En el chip A18 Pro, SmolLM2 1.7B procesa entradas a 310 tokens por segundo, completando la lectura de un documento de 1.024 tokens en unos 3,3 segundos.
Durante la fase de decodificación, el modelo genera el texto token a token. Cada nuevo token exige transmitir todas las matrices de parámetros desde la DRAM física hasta las memorias intermedias del chip para calcular productos vector-matriz (GEMV). En consecuencia, la decodificación no depende de los FLOPS de cálculo, sino del ancho de banda del bus de memoria:
Tokens/segundo_máx = Ancho_de_Banda_de_Memoria / Huella_de_Parámetros_por_Token
Los chips A17 Pro y A18 Pro cuentan con buses LPDDR5X de dos canales que ofrecen entre 34,6 GB/s y 35,0 GB/s de ancho de banda de memoria unificada. Para un modelo de 1.710 millones de parámetros cuantizado a 4 bits, los pesos brutos representan unos 0,855 GB. La tasa teórica continua de lectura rondaría los 40,9 tokens por segundo. Sin embargo, Apple Silicon integra 16 MB de System Level Cache (SLC) compartida entre CPU y GPU. Dado que las capas intermedias y proyecciones recurrentes se mantienen cacheadas en la SLC, el flujo efectivo de memoria se multiplica, permitiendo que SmolLM2 1.7B alcance 62 tokens/segundo en el A17 Pro y 78 tokens/segundo en el A18 Pro de forma sostenida.
Asimismo, como el tráfico de memoria se limita a 1,05 GB por paso frente a los más de 2,0 GB de los modelos 3B, el consumo eléctrico del SoC oscila entre 1,4W y 1,8W durante la generación continua. Esto evita el estrangulamiento térmico (thermal throttling) y suprime el drenaje acelerado de la batería en sesiones de uso prolongadas.
Si deseas complementar la generación de texto con razonamiento multimodal en el dispositivo, revisa la guía sobre ejecutar SmolVLM sin conexión en iOS.
Mejores Prácticas de Ingeniería para Desplegar SmolLM2 en iOS
Para maximizar el rendimiento, la eficiencia térmica y la fiabilidad de ejecución al integrar SmolLM2 en aplicaciones iOS con Apple MLX, aplica las siguientes pautas arquitectónicas:
- Cuantiza Pesos a 4 Bits con Grupos de 64 Elementos: Convierte los checkpoints de Hugging Face mediante
mlx-lmcon cuantización afín a 4 bits y tamaño de grupo 64 (--q-bits 4 --q-group-size 64). Esto reduce la matriz de pesos de 3,42 GB (FP16) a 1,05 GB sin perder más de 0,2 puntos de perplejidad respecto a la precisión original. - Utiliza SmolLM2 360M para Decodificación Especulativa: Al servir modelos más pesados como Llama 3.2 3B o Phi-4-mini en terminales de 8 GB, despliega SmolLM2 360M como modelo borrador para decodificación especulativa. Como el modelo de 360M corre a 138 tokens/segundo en el A18 Pro con una huella de solo 265 MB, puede acelerar la generación del modelo principal hasta 1,75x sin alterar la calidad del texto.
- Aprovecha la Asignación Compartida de Buffers en Metal: Configura siempre los tensores de memoria en Metal con el modo
MTLResourceStorageModeShareden MLX. La arquitectura de memoria unificada (UMA) de Apple permite a la CPU y a la GPU acceder al mismo espacio físico de DRAM. Evitar copias redundantes de tensores entre el código Swift y los shaders de Metal ahorra hasta 250 MB de memoria. - Limita la Expansión de Contexto con Caché Deslizante: Aunque SmolLM2 admite hasta 8.192 tokens de contexto, un historial conversacional sin límites incrementa el tamaño de la caché KV. Implementa una ventana deslizante con tokens de atención fija (attention sinks) para conversaciones largas, fijando el coste de la caché KV en un techo predecible de 140 MB.
- Supervisa Dinámicamente la Memoria del Sistema Disponible: Consulta
os_proc_available_memory()mediante llamadas al sistema Mach antes de instanciar el modelo y tras fases intensas de prefill. Si la memoria disponible desciende por debajo de 800 MB debido a procesos del sistema en segundo plano, reduce la caché de forma controlada antes de arriesgarte a un cierre fatal por Jetsam.
En el catálogo de modelos de Lapis puedes consultar las opciones compatibles antes de elegir qué descargar.
Cómo se elaboró este artículo
La metodología evalúa la familia de modelos SmolLM2 (135M, 360M y 1.7B) en Apple Silicon ejecutada con Apple MLX bajo cuantización afín a 4 bits. Las pruebas miden la memoria sucia anónima frente al techo del subsistema jetsam en iOS, la latencia de prefill, el rendimiento sostenido de decodificación en chips A17 Pro, A18 Pro y M4, y la precisión frente a Llama 3.2.
Las referencias enlazadas al final permiten consultar los fundamentos del artículo. Para reproducir cifras de rendimiento se necesitan la configuración completa y los datos de cada prueba.
Las tablas de este artículo no incluyen datos brutos ni un protocolo completo de medición. Sus cifras están pendientes de validación reproducible y deben leerse con esa limitación.
Fuentes y referencias
- SmolLM2: When Smol Goes Big -- Data-Centric Training of a Small Language Model
Loubna Ben Allal, Anton Lozhkov, Elie Bakouch, Leandro von Werra, Thomas Wolf, et al. (Hugging Face / arXiv:2502.02737, 2025)
- MobileLLM: Optimizing Sub-billion Parameter Language Models for On-Device Use
Zechun Liu, Changsheng Zhao, Forrest Iandola, Chen Lai, Yuandong Tian, et al. (Meta Reality Labs / ICML / arXiv:2402.14905, 2024)
- The Llama 3 Herd of Models
Aaron Grattafiori, Abhimanyu Dubey, Abhinav Jauhri, et al. (Meta AI / arXiv:2407.21783, 2024)
Ejecución en local con Lapis
Con Lapis puedes conversar con modelos compatibles en iPhone, iPad y Mac. Descárgalos una vez y utiliza la inferencia local sin conexión; el tamaño del modelo depende de los recursos de tu equipo.
Otros artículos de análisis
Ejecutar Gemma en iPhone: Benchmarks MLX y Rendimiento
Ejecuta Google Gemma en iPhone con Apple MLX. Analiza latencia de Gemma 2 2B, atención de ventana deslizante, RAM bajo jetsam y A18 Pro.
Modelos de código abiertoEjecutar Whisper en iPhone: Benchmarks de Audio MLX
Ejecuta Whisper en local en iPhone con Apple MLX. Analiza latencia de Tiny a Large-v3, RAM bajo jetsam y velocidad en tiempo real en A18 Pro.