Guide matériel

Quels microcontrôleurs peuvent faire tourner un LLM ?

2026-06-03 · Tilelli Lab · 5 min de lecture

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.

Les puces

MCUSRAMFlashPrix ~Plus grande config Atome compatible
STM32F103 (Blue Pill)20 KB128 KB$2–4nano / classifier (~14 KB RAM)
RP2040 (Pico)264 KB2 MB$4tinystories 64-dim (~104 KB RAM)
STM32F411 (Nucleo)128 KB512 KB$1564-dim (128-dim is RAM-bound)
STM32F7512 KB2 MB$15–30prod_1m 256-dim (~412 KB RAM)
ESP32-S3512 KB4 MB$5–10prod_1m 256-dim (~412 KB RAM)

Comment le lire

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.

Choisir un composant pour votre tâche

Une réserve sur les chiffres

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.

Une démarche de dimensionnement à suivre

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.

La marge et le reste de votre firmware

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.

Au-delà des cinq puces du tableau

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.

En résumé

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.

Questions fréquentes

Quel est le microcontrôleur le moins cher capable de faire tourner un modèle de langue ?

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.

Un Raspberry Pi Pico (RP2040) peut-il faire tourner un LLM ?

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.

← Tous les articles Code & données sur GitHub