Pendant des mois, notre ligne honnête était la même : le moteur d'inférence Atome passait la parité bit-exacte en Python et sous QEMU, mais nous n'avions pas encore flashé de carte physique. Nous avions écrit que, le jour venu, nous le publierions avec la même franchise que le reste. Voici ce billet. Le modèle Atome 944K tourne désormais sur un vrai ESP32-WROOM-32 à 5 $ — il génère du texte cohérent, entièrement hors ligne, avec seulement la puce et un câble USB.
Ce qui a réellement tourné
La carte est un ESP32-WROOM-32 classique (le double cœur ESP32-D0WD-V3, 4 Mo de flash, sans PSRAM). Elle démarre, charge le checkpoint 944K directement depuis le flash, et génère sur la puce, sans réseau ni cloud :
config : d=256 layers=8 head=64 seq=24 state=159 KB (cpu 240 MHz, flash 80 MHz)
Once -> upon a time, there
The dog -> was so excited.
A girl -> was so happy to h
average : 1.0 tok/s (953 ms/token)
Du texte TinyStories cohérent et dans la distribution, produit entièrement sur un microcontrôleur. Le journal de démarrage complet — identifiant de puce, horloges, mémoire, générations — est versionné dans le dépôt, et le binaire exact qui l'a produit est dans la release.
Reproduisez-le vous-même en deux minutes
Une affirmation sur le matériel ne vaut que ce qu'un tiers peut vérifier. Récupérez l'image fusionnée pré-compilée depuis la release, vérifiez-la avec le SHA256SUMS publié, flashez-la en une commande, et regardez :
pip install esptool pyserial
esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash 0x0 atome_esp32_merged.bin
python3 -m serial.tools.miniterm /dev/ttyUSB0 115200 # press the board's EN button
Aucun ESP-IDF, aucune chaîne de compilation nécessaire pour vérifier. Le firmware embarque le moteur C99 du dépôt lui-même — celui à la parité bit-exacte avec Python — donc ce que vous flashez est ce que nous avons mesuré.
Pas de PSRAM ? Une fenêtre courte plutôt qu'un cerveau réduit
Un ESP32 nu affiche 369 Ko de RAM libre, mais son plus grand bloc contigu ne fait que ~168 Ko — la fragmentation mémoire classique de l'ESP32. La qualité du modèle 944K est indépendante de la longueur de contexte ; seule sa RAM en dépend. Plutôt que de basculer sur un modèle plus bête, nous avons réduit la fenêtre de contexte à 24 tokens, ce qui ramène l'état de travail à 159 Ko et le fait tenir. Vous obtenez le modèle pleine qualité avec des complétions plus courtes. Une carte à PSRAM (ESP32-WROVER ou ESP32-S3-R8) exécute la configuration pleine longueur ; ce sera le prochain point de mesure.
Ce que c'est — et ce que ce n'est pas
Il s'agit d'une preuve d'exécution : le modèle tourne sur du silicium réel, de façon reproductible, et vous pouvez le vérifier. Ce n'est pas une victoire de benchmark ni un avantage défendable. Environ 1 token par seconde est un terrain connu — le débit est limité par le flash, puisque ~270 Ko de poids ternaires sont lus depuis le flash SPI à chaque token. Nous n'avons pas mené de comparaison directe à puce et budget égaux contre un autre LLM sur microcontrôleur, et les parties favorables de l'histoire d'Atome restent dépendantes du régime (elles tiennent à la taille par défaut ~60K, pas à 944K). Dire « le modèle tourne sur une puce » est vrai ; dire « le plus rapide » ou « le meilleur » ne le serait pas, et nous ne le disons pas.
Pourquoi cela compte tout de même
Cela referme la seule réserve qui planait sur chaque chiffre de ce site : « QEMU uniquement, pas de silicium ». Cette phrase est désormais retirée. Un modèle de langue qui n'existait que comme simulation et suite de tests est, aujourd'hui, un objet que l'on peut tenir, alimenter depuis un chargeur de téléphone, et regarder écrire des mots sans aucune connexion. À partir d'ici, le travail est concret et mesurable : la configuration pleine fenêtre sur une carte à PSRAM, l'énergie par token sur matériel réel, et une comparaison honnête à puce égale. Nous publierons chacun comme celui-ci — avec le binaire, le journal et les réserves dans la même phrase.
Questions fréquentes
Atome tourne-t-il sur un vrai ESP32 maintenant, pas seulement sous QEMU ?
Oui. Le checkpoint 944K tourne sur un ESP32-WROOM-32 physique (sans PSRAM), générant du texte cohérent entièrement hors ligne à environ 1 token par seconde. Un binaire pré-compilé, le journal série et un flash en une commande sont dans la release GitHub pour que chacun puisse le reproduire.
Quelle est la vitesse d'Atome sur un vrai ESP32 ?
Environ 1,0 token par seconde (~953 ms/token) à 240 MHz avec un flash à 80 MHz. Le débit est limité par le flash — environ 270 Ko de poids lus par token. C'est un chiffre de preuve d'exécution, pas une victoire de benchmark.
← Tous les articles Binaire & journal série → Code sur GitHub