Un modelo de lenguaje de 14,3 millones de parámetros corre entero en un microcontrolador ESP32-S3 y toma cada decisión de alto nivel de un pequeño acuario virtual. Comer, esconderse, explorar, socializar, descansar o huir. El cerebro es un archivo de 7,56 MB que se lee directo desde la memoria flash, sin red y sin nube, y el acuario vive en una pantalla AMOLED de 1,8 pulgadas que cabe en una mano. No hay servidor, API ni conexión de por medio. El pez decide solo y en el momento.

El proyecto muestra que un modelo destilado desde uno de unos 26.000 millones de parámetros puede correr en un microcontrolador que cuesta unos pocos dólares. El modelo alumno se llama pocket-tank y tiene 14,3 millones de parámetros, dimensión 384, 8 capas y 8 cabezas de atención, o sea unas 1.818 veces menos que el modelo maestro. En fp32 pesaría 57 MB y en 4 bits baja a 7,56 MB. Su vocabulario es de 58 tokens, un léxico de esquema cerrado, contra los cerca de 262.000 tokens del maestro.

Tres capas que se compilan igual en el simulador y en el firmware

La arquitectura se divide en tres capas, todas en la carpeta common/ y compiladas de la misma forma en el simulador y en el firmware. Son la capa de reflejos (tank.c), el asesor LLM (llm/) y la capa de progresión (progression.c). La capa de reflejos se encarga de la física, la dirección del movimiento, el nado en cardumen, los gestos táctiles, la alimentación, la economía del hambre, la vegetación y las algas. Corre en cada cuadro y nunca se queda esperando al modelo. El asesor LLM es un motor de inferencia de 4 bits al estilo de llama2.c, con un tokenizador por palabras y un codificador de estado compartido.

El modelo corre en el segundo núcleo del ESP32-S3, con productos punto SIMD y activaciones cuantizadas en la SRAM interna. Los pesos se mapean en memoria desde la flash y nunca se copian. Por eso el acuario se mueve fluido mientras el modelo piensa. A cada pez se le vuelve a consultar solo cuando su situación cambia de forma importante, y así cuatro o seis peces comparten un mismo cerebro.

El ciclo de decisión funciona así.

  • Cada pez le describe al modelo su situación en una sola línea de texto, con hambre, energía, miedo, quién está cerca y su personalidad.
  • El modelo completa la línea con un objetivo y una urgencia.
  • La capa de reflejos convierte ese objetivo en movimiento.
  • El modelo muestrea su propia distribución en vez de tomar siempre la respuesta más probable.
  • Cuando las dos primeras opciones están cerca, el pez duda a la vista antes de decidirse.
  • No hay heurísticas de respaldo que pasen por encima de la decisión.

¿Qué tan bien imita al modelo maestro?

Las cifras del entrenamiento muestran la calidad de la destilación. El modelo se entrenó con 51.162 situaciones etiquetadas por el maestro. El alumno elige el mismo objetivo que el maestro en el 75% de los casos, mientras que el maestro coincide consigo mismo en el 82%. Un pez con hambre elige seek_food al menos el 89% de las veces, con cualquier personalidad. La cuantización a 4 bits no destruyó el comportamiento aprendido.

La placa, la partición de 8 MB y los tiempos medidos

El firmware se basa en ESP-IDF v5.4 con 8 MB de PSRAM octal. La placa de destino tiene 16 MB de flash y 8 MB de PSRAM. El modelo vive en una partición cruda dedicada de 8 MB y se graba una sola vez, en la dirección 0x290000. En hardware, el proyecto usa una Waveshare ESP32-S3-Touch-AMOLED-1.8 con ESP32-S3R8, pantalla AMOLED de 368×448, pantalla táctil capacitiva, IMU, PMIC y RTC. La placa con pantalla y batería cuesta cerca de 35 dólares.

En la placa real una decisión toma unos 3,6 segundos a 12 tokens por segundo, mientras el otro núcleo dibuja el acuario a entre 25 y 30 cuadros por segundo. En emulación con QEMU, una decisión toma unos 2,3 segundos. El acuario parte con dos alevines y crece hasta cinco peces. Una comida dura cinco o seis minutos mientras los peces están despiertos. Si se mantiene un dedo sobre el vidrio durante tres segundos, se acercan los peces que confían en uno. El aviso de reinicio desaparece tras veinte segundos sin actividad.

Cada pez muestra su información de salud y personalidad en pantalla

¿Qué se necesita para replicarlo?

Para reconstruir el proyecto, la cadena de software incluye ESP-IDF v5.4, un motor de inferencia de 4 bits al estilo de llama2.c, LVGL v9.2.2, SDL2, ESP Web Tools, los scripts tools/make_installer.py y tools/director.py, y QEMU en su versión de Espressif. Hay otras placas con pantalla integrada y gráficos LVGL que podrían servir, pero el corazón del proyecto sigue siendo la partición cruda de 8 MB y el motor de 4 bits. El código, los scripts y el procedimiento de grabación están en el repositorio del proyecto.

El IMU de 9 ejes y el reloj de tiempo real por I2C que permiten sumar orientación al acuario y llevar la hora con la placa apagada ya vienen en la placa de destino, así que el cableado queda alineado con el firmware existente.