L'exploit impossible : un LLM de 29M sur une puce à 8 $
Le développeur ukrainien Slava S. a accompli un exploit extraordinaire en faisant tourner avec succès un modèle de langage de 28,9 millions de paramètres sur un microcontrôleur ESP32-S3 à 8 $. Ce système révolutionnaire fonctionne entièrement hors ligne, générant du texte localement sans aucune connexion Wi-Fi ou serveur. Cela démontre un bond remarquable dans les capacités de l'IA embarquée, rendant le traitement du langage puissant accessible sur un matériel minimal, loin de l'infrastructure cloud.
Cet accomplissement redéfinit radicalement ce qui est possible pour les microcontrôleurs. Auparavant, les plus grands modèles de langage déployés avec succès sur de telles puces plafonnaient à environ 260 000 paramètres. L'innovation de Slava S. multiplie ce chiffre par 110, remodelant fondamentalement le paysage de l'IA sur appareil et prouvant que les limitations de taille sévères ne sont pas toujours insurmontables.
Les spécifications brutes de l'ESP32-S3 rendent cet exploit encore plus remarquable. La puce offre à peine 512 kilo-octets de SRAM, une capacité mémoire inférieure à celle d'un ordinateur personnel typique des années 1990. Malgré cette contrainte profonde, le système génère du texte à une vitesse respectable de neuf jetons par seconde, démontrant comment une ingénierie méticuleuse peut surmonter des limitations matérielles sévères pour permettre une inférence IA sophistiquée dans des environnements à très faible consommation et déconnectés.
L'astuce mémoire : la mémoire flash, pas la RAM
Le développeur ukrainien Slava S. a tiré parti d'une solution ingénieuse, inspirée par les modèles Gemma de Google. Cette technique, appelée plongements par couche (per-layer embeddings), repense le fonctionnement des paramètres des grands modèles de langage. L'idée centrale reconnaît que la plupart des paramètres d'un LLM résident dans une table de recherche statique — un vaste dictionnaire de représentations de mots — plutôt que de participer activement au calcul en temps réel.
Cette distinction fondamentale permet une stratégie de mémoire radicale. Au lieu d'essayer de faire entrer tout le modèle dans les minuscules 512 Ko de SRAM rapide de l'ESP32-S3, l'énorme table de plongement de 25 millions de lignes, pesant environ 15 Mo, est stratégiquement déplacée. Elle trouve sa place dans les 16 Mo de mémoire flash plus lente et moins chère de la puce.
Pendant l'inférence, le système récupère dynamiquement uniquement la poignée de lignes de plongement absolument nécessaires pour le jeton actuel. Par exemple, seules six lignes — totalisant environ 450 octets — sont extraites de la mémoire flash vers la SRAM. Cette approche ingénieuse laisse la SRAM haute vitesse limitée principalement libre pour le travail de calcul réel du modèle : les têtes d'attention et les couches feed-forward qui traitent et génèrent le jeton suivant.
Le retour à la réalité : ce n'est pas ChatGPT
L'exploit de Slava S., bien que révolutionnaire, ne produit pas un grand modèle de langage à usage général. Ce modèle de 28,9 millions de paramètres est exclusivement entraîné sur le jeu de données TinyStories de Microsoft. Cette collection organisée présente des récits simples et cohérents, spécifiquement conçus pour que les petits modèles — même ceux avec seulement quelques millions de paramètres — apprennent à générer du texte cohérent sans produire le charabia typique auquel on s'attendrait d'un modèle de cette taille sur un jeu de données plus large.
Des limitations significatives apparaissent lors de l'interaction. Le modèle revient systématiquement à une histoire spécifique sur une petite fille, indépendamment de l'invite initiale de l'utilisateur. Par exemple, même des entrées comme "une histoire sur un robot" ou une phrase d'ouverture sur le thème de "Star Wars" redirigent rapidement vers ce récit par défaut après quelques phrases, démontrant une compréhension extrêmement limitée et une incapacité à maintenir des fils de conversation inédits. Ce comportement souligne les modèles appris contraints du modèle.
De plus, une interaction dynamique n'est pas possible. L'ajustement de l'invite nécessite un reflash complet du microcontrôleur ESP32-S3, un processus qui écrase la mémoire de l'appareil. Le système ne peut exécuter qu'une seule invite pré-enregistrée à la fois, ce qui en fait une preuve de concept convaincante, bien que limitée, plutôt qu'un outil polyvalent et dynamique pour la génération de texte arbitraire. Pour ceux qui souhaitent explorer le code et la méthodologie sous-jacents, consultez le dépôt GitHub du projet : Running a 28.9M parameter LLM on an $8 microcontroller - GitHub.
Cet article vous plaît ? Recevez-en un comme celui-ci chaque matin.
un e-mail par jour · désinscription en deux clics · aucun traqueur tiers
Le plan de Karpathy : comment le construire
Ce projet impressionnant s'appuie directement sur les travaux fondamentaux 'llama2.c' d'Andrej Karpathy. Karpathy a démontré que l'inférence efficace de grands modèles de langage (LLM) était réalisable en code C pur et portable, en évitant complètement Python ou les dépendances complexes. Son plan a prouvé que les LLM pouvaient fonctionner sur des systèmes minimaux, une idée fondamentale pour cette implémentation sur ESP32-S3, rendant le concept entier possible.
La réplication de ce LLM à faible coût nécessite un matériel spécifique, un composant non négociable pour réussir. Une variante ESP32-S3 N16R8 est obligatoire, choisie pour sa configuration mémoire généreuse. Ce modèle particulier dispose de 16 Mo de flash et de 8 Mo de PSRAM. Le fichier du modèle entraîné de 15 Mo nécessite impérativement cette capacité flash plus importante ; les cartes avec moins de 16 Mo de flash, comme les versions courantes de 4 Mo ou 8 Mo, ne peuvent tout simplement pas stocker le modèle entier.
Le dépôt GitHub original de Slava S. héberge tout le code nécessaire pour ceux qui souhaitent explorer les détails de l'implémentation et les mécanismes sous-jacents. Pour un chemin plus direct vers le déploiement, le créateur de la vidéo fournit un script one-shot simplifié, rationalisant considérablement la configuration. Ce script complet automatise l'ensemble du processus de construction, gérant l'installation de la chaîne d'outils, la préparation des données, l'entraînement du modèle sur le jeu de données TinyStories, et enfin le flashage de l'ESP32-S3 avec le modèle compilé.
Foire aux questions
Comment un LLM de 28,9 millions de paramètres tient-il sur un microcontrôleur avec seulement 512 Ko de SRAM ?
Le modèle utilise une astuce mémoire où la plus grande partie — une table d'embedding de 25 millions de paramètres — est stockée dans la mémoire flash de 16 Mo de la puce, plus grande mais plus lente. Seule la petite partie de calcul et les lignes d'embedding spécifiques nécessaires pour le jeton actuel sont chargées dans la SRAM rapide de 512 Ko.
Quel matériel spécifique est requis pour reproduire ce projet ?
Vous avez besoin d'une variante de microcontrôleur ESP32-S3 avec au moins 16 mégaoctets de mémoire flash et 8 mégaoctets de PSRAM. C'est ce qu'on appelle couramment la variante N16R8.
Quelles sont les limites du LLM fonctionnant sur l'ESP32 ?
C'est un modèle très simple entraîné sur le jeu de données TinyStories, il ne peut donc générer que des récits simples et ne peut pas effectuer de tâches complexes. Il a également tendance à dériver vers une histoire par défaut et nécessite de reflasher toute la puce pour changer l'invite initiale.
Quels projets open-source ont rendu cela possible ?
Ce projet, créé par le développeur Slava S., s'appuie sur le projet llama2.c d'Andrej Karpathy, qui a démontré l'exécution de l'inférence LLM en C pur. Le modèle lui-même a été entraîné sur le jeu de données TinyStories développé par Microsoft Research.

