La hazaña imposible: Un LLM de 29M en un chip de $8
El desarrollador ucraniano Slava S. ha logrado una hazaña extraordinaria, ejecutando con éxito un modelo de lenguaje de 28.9 millones de parámetros en un microcontrolador ESP32-S3 de $8. Este sistema innovador opera completamente offline, generando texto localmente sin ninguna conexión Wi-Fi o servidor. Esto demuestra un salto notable en las capacidades de IA integrada, haciendo que el procesamiento de lenguaje potente sea accesible en hardware mínimo, lejos de la infraestructura en la nube.
Este logro redefine drásticamente lo que es posible para los microcontroladores. Anteriormente, los modelos de lenguaje más grandes desplegados con éxito en dichos chips alcanzaban un máximo de aproximadamente 260,000 parámetros. La innovación de Slava S. escala esto en un asombroso aumento de 110x, remodelando fundamentalmente el panorama de la IA en el dispositivo y demostrando que las limitaciones de tamaño severas no siempre son insuperables.
Las especificaciones técnicas del ESP32-S3 hacen que este logro sea aún más notable. El chip ofrece apenas 512 kilobytes de SRAM, una capacidad de memoria menor que la de una computadora personal típica de la década de 1990. A pesar de esta profunda restricción, el sistema genera texto a una velocidad respetable de nueve tokens por segundo, mostrando cómo la ingeniería meticulosa puede superar limitaciones de hardware severas para permitir una inferencia de IA sofisticada en entornos de ultra bajo consumo y desconectados.
El truco de memoria: Flash, no RAM
El desarrollador ucraniano Slava S. aprovechó una solución ingeniosa, inspirada en los modelos Gemma de Google. Esta técnica, denominada embeddings por capa, replantea cómo funcionan los parámetros de los modelos de lenguaje grandes. La idea central reconoce que la mayoría de los parámetros de un LLM residen en una tabla de búsqueda estática —un vasto diccionario de representaciones de palabras— en lugar de participar activamente en la computación en tiempo real.
Esta distinción fundamental permite una estrategia de memoria radical. En lugar de intentar meter todo el modelo en los minúsculos 512KB de SRAM rápida del ESP32-S3, la enorme tabla de embeddings de 25 millones de filas, que pesa aproximadamente 15MB, se reubica estratégicamente. Encuentra su hogar en los 16MB de memoria flash, más lenta y económica, del chip.
Durante la inferencia, el sistema recupera dinámicamente solo el puñado de filas de embedding absolutamente necesarias para el token actual. Por ejemplo, solo seis filas —que suman aproximadamente 450 bytes— se extraen de la memoria flash a la SRAM. Este enfoque ingenioso deja la limitada SRAM de alta velocidad predominantemente libre para el trabajo computacional real del modelo: las cabezas de atención y las capas feed-forward que procesan y generan el siguiente token.
La verificación de la realidad: Esto no es ChatGPT
El logro de Slava S., aunque innovador, no produce un modelo de lenguaje grande de propósito general. Este modelo de 28.9 millones de parámetros está entrenado exclusivamente en el conjunto de datos TinyStories de Microsoft. Esta colección curada presenta narrativas simples y coherentes, diseñadas específicamente para modelos pequeños —incluso aquellos con solo unos pocos millones de parámetros— para aprender a generar texto coherente sin producir el galimatías típico que uno esperaría de un modelo de este tamaño en un conjunto de datos más amplio.
Surgen limitaciones significativas durante la interacción. El modelo recurre constantemente a una historia específica sobre una niña pequeña, independientemente del prompt inicial del usuario. Por ejemplo, incluso entradas como "una historia sobre un robot" o una frase inicial con temática de "Star Wars" redirigen rápidamente a esta narrativa predeterminada después de unas pocas oraciones, lo que demuestra una comprensión extremadamente limitada y una incapacidad para mantener hilos de conversación novedosos. Este comportamiento resalta los patrones aprendidos restringidos del modelo.
Además, la interacción dinámica no es posible. Ajustar el prompt requiere un reflash completo del microcontrolador ESP32-S3, un proceso que sobrescribe la memoria del dispositivo. El sistema solo puede ejecutar un prompt preconfigurado a la vez, lo que lo convierte en una prueba de concepto convincente, aunque limitada, en lugar de una herramienta versátil y dinámica para la generación de texto arbitrario. Para aquellos interesados en explorar el código y la metodología subyacentes, consulten el repositorio de GitHub del proyecto: Running a 28.9M parameter LLM on an $8 microcontroller - GitHub.
¿Te está gustando? Recibe uno así en tu bandeja cada mañana.
un correo al día · date de baja en dos clics · sin rastreadores de terceros
El plano de Karpathy: Cómo construirlo
Este impresionante proyecto se basa directamente en el trabajo fundamental 'llama2.c' de Andrej Karpathy. Karpathy demostró que la inferencia eficiente de modelos de lenguaje grandes (LLM) era posible en código C puro y portátil, evitando por completo Python o dependencias complejas. Su plano demostró que los LLM podían ejecutarse en sistemas mínimos, una idea fundamental para esta implementación en ESP32-S3, lo que permitió todo el concepto.
Replicar este LLM de bajo costo requiere hardware específico, un componente no negociable para el éxito. Es obligatorio una variante ESP32-S3 N16R8, seleccionada por su generosa configuración de memoria. Este modelo en particular cuenta con 16MB de flash y 8MB de PSRAM. El archivo del modelo entrenado de 15MB requiere crucialmente esta mayor capacidad de flash; las placas con menos de 16MB de flash, como las versiones comunes de 4MB u 8MB, simplemente no pueden almacenar el modelo completo.
El repositorio original de GitHub de Slava S. alberga todo el código necesario para aquellos interesados en explorar los detalles de la implementación y los mecanismos subyacentes. Para un camino más directo hacia la implementación, el creador del video proporciona un one-shot script simplificado, lo que agiliza significativamente la configuración. Este script integral automatiza todo el proceso de compilación, manejando la instalación de la cadena de herramientas, la preparación de datos, el entrenamiento del modelo en el conjunto de datos TinyStories y, finalmente, el flasheo del ESP32-S3 con el modelo compilado.
Preguntas frecuentes
¿Cómo cabe un LLM de 28.9M de parámetros en un microcontrolador con solo 512KB de SRAM?
El modelo utiliza un truco de memoria donde la parte más grande (una tabla de incrustación de 25M de parámetros) se almacena en la memoria flash de 16MB del chip, que es más grande pero más lenta. Solo la pequeña porción de cómputo y las filas de incrustación específicas necesarias para el token actual se cargan en la rápida SRAM de 512KB.
¿Qué hardware específico se requiere para replicar este proyecto?
Necesitas una variante de microcontrolador ESP32-S3 con al menos 16 megabytes de memoria flash y 8 megabytes de PSRAM. Esto se conoce comúnmente como la variante N16R8.
¿Cuáles son las limitaciones del LLM que se ejecuta en el ESP32?
Es un modelo muy simple entrenado en el conjunto de datos TinyStories, por lo que solo puede generar narrativas simples y no puede realizar tareas complejas. También tiende a volver a una historia predeterminada y requiere volver a flashear todo el chip para cambiar el prompt inicial.
¿Qué proyectos de código abierto hicieron esto posible?
Este proyecto, creado por el desarrollador Slava S., se basa en el proyecto llama2.c de Andrej Karpathy, que demostró la ejecución de inferencia de LLM en C puro. El modelo en sí fue entrenado en el conjunto de datos TinyStories desarrollado por Microsoft Research.

