Whether a model fits a microcontroller is a memory question with a yes-or-no answer, not a matter of opinion. Here is the per-chip fit guide across five common parts, using Atome's measured configurations from a real Cortex-M3 build under QEMU. Use it to pick the cheapest part that runs the configuration your task needs.Savoir si un modèle tient sur un microcontrôleur est une question de mémoire à réponse binaire, pas une affaire d'opinion. Voici le guide de compatibilité par puce sur cinq composants courants, à partir des configurations mesurées d'Atome issues d'une vraie compilation Cortex-M3 sous QEMU. Utilisez-le pour choisir le composant le moins cher qui exécute la configuration dont votre tâche a besoin.
The chipsLes puces
| MCU | SRAM | Flash | ~Price | Largest Atome config that fits |
|---|---|---|---|---|
| STM32F103 (Blue Pill) | 20 KB | 128 KB | $2–4 | nano / classifier (~14 KB RAM) |
| RP2040 (Pico) | 264 KB | 2 MB | $4 | tinystories 64-dim (~104 KB RAM) |
| STM32F411 (Nucleo) | 128 KB | 512 KB | $15 | 64-dim (128-dim is RAM-bound) |
| STM32F7 | 512 KB | 2 MB | $15–30 | prod_1m 256-dim (~412 KB RAM) |
| ESP32-S3 | 512 KB | 4 MB | $5–10 | prod_1m 256-dim (~412 KB RAM) |
| MCU | SRAM | Flash | Prix ~ | Plus grande config Atome compatible |
|---|---|---|---|---|
| STM32F103 (Blue Pill) | 20 KB | 128 KB | $2–4 | nano / classifier (~14 KB RAM) |
| RP2040 (Pico) | 264 KB | 2 MB | $4 | tinystories 64-dim (~104 KB RAM) |
| STM32F411 (Nucleo) | 128 KB | 512 KB | $15 | 64-dim (128-dim is RAM-bound) |
| STM32F7 | 512 KB | 2 MB | $15–30 | prod_1m 256-dim (~412 KB RAM) |
| ESP32-S3 | 512 KB | 4 MB | $5–10 | prod_1m 256-dim (~412 KB RAM) |
How to read itComment le lire
RAM is almost always the binding constraint, not flash. A 20 KB-SRAM chip such as the Blue Pill runs the small classifier configurations; you need an RP2040-class 264 KB part for the 64-dimension story model; and the 944K “prod” configuration needs a 512 KB part like an STM32F7 or an ESP32-S3. Flash is comfortable on all of these, because the packed ternary weights plus the engine are only tens to a few hundred kilobytes. When a configuration does not fit, it is the SRAM that runs out first.La RAM est presque toujours la contrainte déterminante, pas le flash. Une puce à 20 Ko de SRAM comme la Blue Pill exécute les petites configurations de classifieur ; il faut un composant de classe RP2040 à 264 Ko pour le modèle d'histoires en dimension 64 ; et la configuration « prod » 944K nécessite un composant de 512 Ko comme un STM32F7 ou un ESP32-S3. Le flash est confortable sur tous, car les poids ternaires empaquetés plus le moteur ne font que quelques dizaines à quelques centaines de kilooctets. Quand une configuration ne tient pas, c'est la SRAM qui manque en premier.
Choosing a part for your taskChoisir un composant pour votre tâche
- Wake-word or single-command routing, lowest cost: a 20 KB STM32F103 running the classifier config.
- Richer narrow-domain text on a hobby board: an RP2040 (Pico) at 264 KB.
- The full 944K model with headroom: an ESP32-S3 or STM32F7 at 512 KB.
- Mot de réveil ou routage d'une seule commande, coût minimal : un STM32F103 de 20 Ko avec la config classifieur.
- Texte plus riche en domaine étroit sur une carte loisir : un RP2040 (Pico) à 264 Ko.
- Le modèle complet 944K avec de la marge : un ESP32-S3 ou un STM32F7 à 512 Ko.
A caveat on the numbersUne réserve sur les chiffres
These are QEMU measurements of a Cortex-M3 build, not bench results on each specific part. Treat them as accurate memory accounting — flash and peak RAM per configuration — rather than as silicon throughput. We have not yet published on-device tokens-per-second or power figures, and we will not present QEMU numbers as if they were silicon. The exact per-config figures are in the repository's RAM_TABLE.md, regenerable with the bundled measurement script.Ce sont des mesures QEMU d'une compilation Cortex-M3, pas des résultats de banc d'essai sur chaque composant. Considérez-les comme une comptabilité mémoire exacte — flash et pic de RAM par configuration — et non comme un débit sur silicium. Nous n'avons pas encore publié de tokens par seconde ni de consommation sur appareil, et nous ne présenterons pas des chiffres QEMU comme s'ils venaient du silicium. Les chiffres exacts par configuration sont dans le RAM_TABLE.md du dépôt, régénérables avec le script de mesure fourni.
A sizing workflow you can followUne démarche de dimensionnement à suivre
Picking a chip does not have to be guesswork. Start from the task and work down to the part in four steps. First, decide the breadth: is this a few-class classifier, a narrow continuation, or something wider? Second, choose the smallest Atome configuration that clears your accuracy bar — bigger configurations cost RAM, so do not over-provision. Third, read the peak RAM and flash for that configuration straight from the measured table. Fourth, pick the cheapest part whose SRAM exceeds the peak RAM with a little headroom for your own application code. Because RAM is the binding constraint, the SRAM column is the one that decides the chip; flash is almost always comfortable.Choisir une puce n'a pas à relever de la devinette. Partez de la tâche et descendez jusqu'au composant en quatre étapes. D'abord, décidez de l'étendue : s'agit-il d'un classifieur à quelques classes, d'une continuation étroite, ou de quelque chose de plus large ? Ensuite, choisissez la plus petite configuration Atome qui franchit votre seuil de précision — les grandes configurations coûtent de la RAM, ne surdimensionnez donc pas. Troisièmement, lisez le pic de RAM et le flash de cette configuration directement dans la table mesurée. Quatrièmement, choisissez le composant le moins cher dont la SRAM dépasse le pic de RAM avec un peu de marge pour votre propre code applicatif. Parce que la RAM est la contrainte déterminante, c'est la colonne SRAM qui décide de la puce ; le flash est presque toujours confortable.
Headroom and the rest of your firmwareLa marge et le reste de votre firmware
One mistake worth avoiding is sizing the chip to the model and forgetting that your application also needs RAM. The peak-RAM figures in the table are for the inference engine; your firmware has its own stack, buffers, drivers and state on top. A safe rule is to leave a comfortable margin between the engine's peak RAM and the part's total SRAM — enough for your application's working set plus a safety buffer. That is why the table flags the 128 KB STM32F411 as a good fit for the 64-dimension model but tight for the 128-dimension one: on paper the larger model might squeeze in, but once you add real application code the headroom disappears. Choosing one size down is usually the cheaper, calmer decision.Une erreur à éviter est de dimensionner la puce pour le modèle en oubliant que votre application a aussi besoin de RAM. Les chiffres de pic de RAM de la table concernent le moteur d'inférence ; votre firmware a sa propre pile, ses tampons, ses pilotes et son état par-dessus. Une règle sûre est de laisser une marge confortable entre le pic de RAM du moteur et la SRAM totale du composant — assez pour l'ensemble de travail de votre application plus un tampon de sécurité. C'est pourquoi la table signale le STM32F411 de 128 Ko comme bon pour le modèle en dimension 64 mais juste pour celui en dimension 128 : sur le papier, le modèle plus grand pourrait tenir, mais une fois ajouté le vrai code applicatif, la marge disparaît. Choisir une taille en dessous est généralement la décision la moins chère et la plus sereine.
Beyond the five chips in the tableAu-delà des cinq puces du tableau
The five parts in the table are common reference points, but the underlying rule generalizes to any microcontroller you might consider. Because the engine is portable C99 with no operating-system or accelerator dependency, the only questions that decide compatibility are whether the part's SRAM exceeds the configuration's peak RAM with headroom for your application, and whether its flash holds the packed weights plus the engine. A Nordic nRF52840, an STM32L4 in a low-power design, or a larger ESP32 variant can all be evaluated with the same two-column check: SRAM against peak RAM, flash against packed size. That portability is deliberate — the engine makes as few assumptions about the host as possible — so the table is a worked set of examples rather than a closed list, and you can slot a new part into the same reasoning without guessing.Les cinq composants du tableau sont des points de référence courants, mais la règle sous-jacente se généralise à tout microcontrôleur que vous pourriez envisager. Parce que le moteur est du C99 portable sans dépendance à un système d'exploitation ou à un accélérateur, les seules questions qui décident de la compatibilité sont de savoir si la SRAM du composant dépasse le pic de RAM de la configuration avec une marge pour votre application, et si son flash contient les poids empaquetés plus le moteur. Un Nordic nRF52840, un STM32L4 dans une conception basse consommation, ou une plus grande variante d'ESP32 peuvent tous être évalués avec la même vérification à deux colonnes : SRAM contre pic de RAM, flash contre taille empaquetée. Cette portabilité est délibérée — le moteur fait le moins d'hypothèses possible sur l'hôte — donc le tableau est un ensemble d'exemples travaillés plutôt qu'une liste fermée, et vous pouvez glisser un nouveau composant dans le même raisonnement sans deviner.
Bottom lineEn résumé
Whether a microcontroller can run a language model is a memory question with a yes-or-no answer: does the SRAM exceed the configuration's peak RAM with headroom, and does the flash hold the packed weights plus the engine? On that basis a $2 STM32F103 runs the small classifier configs, an RP2040 runs the 64-dimension model, and a 512 KB ESP32-S3 or STM32F7 runs the full 944K model. The table is worked examples, not a closed list — the same two-column check generalizes to any part. Just remember the figures are QEMU Cortex-M3 measurements, accurate memory accounting rather than silicon throughput.Savoir si un microcontrôleur peut faire tourner un modèle de langue est une question de mémoire à réponse binaire : la SRAM dépasse-t-elle le pic de RAM de la configuration avec de la marge, et le flash contient-il les poids empaquetés plus le moteur ? Sur cette base, un STM32F103 à 2 $ exécute les petites configs de classifieur, un RP2040 exécute le modèle en dimension 64, et un ESP32-S3 ou STM32F7 de 512 Ko exécute le modèle complet 944K. Le tableau est un ensemble d'exemples travaillés, pas une liste fermée — la même vérification à deux colonnes se généralise à tout composant. Rappelez-vous seulement que les chiffres sont des mesures QEMU Cortex-M3, une comptabilité mémoire exacte plutôt qu'un débit sur silicium.
Frequently asked questionsQuestions fréquentes
What is the cheapest microcontroller that can run a language model?Quel est le microcontrôleur le moins cher capable de faire tourner un modèle de langue ?
An STM32F103 “Blue Pill” at about $2–4 runs Atome's small classifier configuration in roughly 14 KB of RAM. For richer text you want an RP2040 (about $4) or larger.Un STM32F103 « Blue Pill » à environ 2–4 $ exécute la petite configuration de classifieur d'Atome dans environ 14 Ko de RAM. Pour du texte plus riche, visez un RP2040 (environ 4 $) ou plus.
Can a Raspberry Pi Pico (RP2040) run an LLM?Un Raspberry Pi Pico (RP2040) peut-il faire tourner un LLM ?
Yes — its 264 KB of SRAM fits Atome's 64-dimension model at about 104 KB of RAM. It cannot fit the 944K “prod” config, which needs a 512 KB part.Oui — ses 264 Ko de SRAM accueillent le modèle Atome en dimension 64 à environ 104 Ko de RAM. Il ne peut pas contenir la config « prod » 944K, qui exige un composant de 512 Ko.
← All posts← Tous les articles Source & data on GitHubCode & données sur GitHub