LLM de 29M parámetros en microcontrolador ESP32: inferencia local sin Wi-Fi
Un investigador logró ejecutar un modelo de lenguaje de 28,9 millones de parámetros en un ESP32-S3, el microcontrolador que cuesta alrededor de 8 dólares. Genera texto a aproximadamente 9,5 tokens por segundo, completamente en el chip, sin conexión a ningún servidor.
El récord anterior en un chip de esta categoría era de 260 mil parámetros. El salto, cien veces mayor, proviene de una idea tomada de los modelos Gemma de Google: la mayoría de los parámetros de un LLM residen en una tabla de embedding que el modelo consulta, no calcula. Si la dejas en la memoria flash lenta del chip y cargas solo las pocas filas que necesitas para cada token (aproximadamente 450 bytes), el modelo “grande” cuesta casi nada en RAM.
Como comentamos el 20 de julio con los LLM de 1 bit en el navegador, la inferencia local está bajando por la cadena de dispositivos. Del Mac al navegador, ahora al microcontrolador de 8 dólares sin Wi-Fi.
Para quienes construyen sobre hardware limitado o hacen proyectos offline, la señal es que el umbral para un agente que funciona en el dispositivo se está reduciendo. Este modelo específico solo sabe escribir historias cortas (fue entrenado en TinyStories), no responde preguntas ni sigue instrucciones. Pero la arquitectura, el truco de memoria que permite que un modelo cien veces más grande quepa en un chip sin expansión, es lo que realmente importa.
En detalle
El problema clásico de la inferencia en microcontroladores es la RAM. El ESP32-S3 tiene 512KB de SRAM, la memoria rápida donde el chip realiza los cálculos. Un modelo de lenguaje, incluso pequeño, normalmente debe estar completamente en esa memoria para ejecutarse. 512KB es suficiente para aproximadamente 260 mil parámetros, y ahí se había detenido el récord anterior en este tipo de hardware.
El truco proviene de los modelos Gemma 3n y Gemma 4 de Google, llamado Per-Layer Embeddings. En un LLM, la mayoría de los parámetros (en este caso 25 millones de 28,9 totales) forman una tabla de embedding: el vocabulario que el modelo consulta para transformar palabras en números y viceversa. El modelo lee de esta tabla, pero no realiza cálculos pesados en ella. Por lo tanto, puedes dejarla en la memoria flash del chip, lenta pero espaciosa (16MB), y cargar en SRAM solo las pocas filas que necesitas para el token actual: aproximadamente 450 bytes por paso, seis filas de la tabla.
La parte que hace el razonamiento real, el núcleo de 3,9 millones de parámetros, vive en SRAM. La tabla de 25 millones reside en flash y se muestrea poco a poco. El resultado es un modelo de 14,9MB de 4 bits que genera texto a 9,5 tokens por segundo, de extremo a extremo, en un chip que consume una fracción de watt.
El modelo fue entrenado en TinyStories, un conjunto de datos de historias breves y simples diseñado para modelos minúsculos. Escribe frases coherentes del tipo “el perro corre en el parque”, pero no responde preguntas, no sigue instrucciones, no conoce datos. La limitación no está en la memoria, está en la parte del modelo que hace el razonamiento, y el truco de memoria no la cambia. El proyecto es honesto sobre esto: el interés está en la arquitectura, no en lo que el modelo sabe decir.
¿Qué cambia para el lector? Hasta ayer, “inferencia local” significaba una laptop, o un navegador con WebGPU. Ahora el umbral baja a un chip de 8 dólares con 512KB de RAM y sin conexión de red. Para quienes diseñan dispositivos embebidos, sensores con algo de lógica, interfaces de voz para prototipos offline, la arquitectura demuestra que un modelo de lenguaje puede estar dentro del dispositivo mismo. Sin cloud, sin latencia de red, sin clave API.
Queda abierto cuánto es replicable en tareas útiles. El repositorio incluye firmware, esquemas de conexión e instrucciones de flasheo, además del código de entrenamiento y cuantización en Python. Pero el salto de “escribe historias” a “sigue instrucciones” requiere un modelo más capaz. Y un modelo más capaz requiere más parámetros activos en SRAM, lo que vuelve al cuello de botella original. El truco de memoria expande la tabla de embedding, no el cerebro.