Atome LM est un modèle de langage assez petit pour être compilé dans le firmware d'un microcontrôleur. Pas un modèle qu'on appelle via une API. Pas un modèle qu'on rétrécit pour un téléphone. Un modèle qui tient dans la même image flash que le reste du firmware, sur un composant à deux dollars, sans système d'exploitation, sans pile réseau et sans allocateur mémoire.
Le checkpoint de 944 000 paramètres pèse 271 Ko de poids et le moteur qui l'exécute 2,6 Ko de C99 compilé. Sur un ESP32-WROOM-32 physique, il génère du texte cohérent à environ 1,0 jeton par seconde, entièrement hors ligne, avec pour tout matériel la puce et un câble USB.
Le problème qu'il résout vraiment
Sur un microcontrôleur, la contrainte intéressante n'est presque jamais « sait-il penser ». C'est « est-ce que ça rentre, et puis-je prouver ce que ça fera ». Trois conséquences, et c'est tout le design :
- Tenir. Un composant avec 128 Ko de flash et 20 Ko de SRAM ne fait pas tourner un modèle de 1 milliard de paramètres quantifié, quelle que soit la qualité du quantificateur. Il fait tourner quelque chose conçu pour 20 Ko de SRAM dès la première ligne.
- Prouver. Un appareil certifié — médical, automobile, industriel — doit démontrer que ce qui a été validé est ce qui est livré. Un modèle dont la référence Python et le moteur C embarqué produisent une sortie identique octet pour octet transforme cette démonstration en test plutôt qu'en argumentation.
- Se taire. Pas d'allocateur, pas de sockets, pas de descripteurs de fichiers. L'absence de sortie réseau est une propriété du binaire, pas une promesse dans une politique de confidentialité.
Ce que ce n'est pas
- Ce n'est pas un agent conversationnel. À 944 000 paramètres, entraîné large, il produit du texte incohérent. C'est une limite de capacité, pas un bug, et aucun prompt ne la corrige. Il est cohérent quand il est entraîné étroit : un domaine, un vocabulaire, une tâche.
- Ce n'est pas un GPT compressé. On n'arrive pas ici en quantifiant un grand modèle. Les modèles ternaires sont entraînés ternaires dès le départ.
- Il ne gagne pas partout. À 60 000 paramètres, le bloc ternaire routé bat un transformeur FP32 à paramètres égaux d'environ 22 % en perplexité TinyStories. À 944 000 paramètres, le modèle flottant gagne d'environ 11 %. Le pari porte délibérément sur le régime sous-1M, et en dehors nous perdons. Tout est sur la page des limites.
Les deux lignes de produit
| Atome LM (le modèle de langage) | Atome LM EDGE (le moteur de capteurs) | |
|---|---|---|
| Ce qu'il fait | Génère et classe du texte sur l'appareil | Classe des fenêtres de capteurs sur l'appareil |
| Taille typique | 60 000 – 944 000 paramètres | ~6 567 paramètres |
| Empreinte | 20 Ko – 271 Ko de poids | 15 444 o de flash au total |
| Vérifié contre | Cortex-M3 sous QEMU, et un ESP32-WROOM-32 physique | 2 947 fenêtres de test via le vrai moteur C |
| Public ? | Oui — Apache-2,0 | Engagement pilote |
La comparaison avec TensorFlow Lite for Microcontrollers concerne la ligne EDGE. Les chiffres de perplexité concernent le modèle de langage. Les mélanger, c'est citer une empreinte de l'un et une précision de l'autre.
Comment il est construit
Chaque bloc exécute en parallèle trois opérations structurellement différentes — une convolution causale profonde à 5 prises, un modèle d'état diagonal et une attention parcimonieuse top-k=4 — et un routeur softmax par jeton décide de la part de chacune pour le caractère courant. Trois petits spécialistes coûtent moins de mémoire qu'un gros généraliste à qualité égale. Toutes les projections sont ternaires, échelle par tenseur. La page architecture détaille tout cela.