Z80-μLM, une « IA conversationnelle » dans 40 Ko
(github.com/HarryR)- Z80-μLM est un modèle d’intelligence artificielle conversationnel ultra-compact qui fonctionne sur un processeur Z80 de 1976 (4 MHz, 64 Ko de RAM)
- Grâce à l’apprentissage sensible à la quantification (QAT), il réalise une génération de texte au niveau des caractères avec seulement des poids sur 2 bits et des opérations entières 16 bits
- Un fichier exécutable .COM d’environ 40 Ko contient à lui seul le moteur d’inférence, les poids et l’interface de chat
- Un encodage par hachage trigramme convertit l’entrée en 128 buckets, ce qui permet de produire des réponses robustes aux fautes de frappe et à l’ordre des mots
- Il est incapable de comprendre un contexte complexe, mais attire l’attention comme modèle d’IA expérimental fonctionnant même dans un environnement 8 bits limité
Aperçu du projet
- Z80-μLM est un modèle de langage ultra-compact pouvant fonctionner dans un environnement de rétro-informatique
- Il tourne sur un CPU Z80 avec 64 Ko de RAM et génère des réponses conversationnelles au niveau des caractères
- La taille totale, incluant le modèle, le code d’inférence et l’interface, est d’environ 40 Ko
- La question centrale du projet était : « Jusqu’à quel point peut-on le réduire tout en conservant une personnalité ? », avec une distribution auto-hébergée également possible
- Sans atteindre le niveau du test de Turing, il prend la forme d’un système capable d’amuser l’utilisateur par des échanges simples
Deux exemples inclus
-
tinychat
- Un chatbot simple entraîné sur des données de questions-réponses du quotidien
- Il fournit des réponses courtes et pleines de personnalité pour les salutations, la présentation de soi et les conversations générales
- Ex. : « hello » → « HI », « are you a robot » → « YES », « do you dream » → « MAYBE »
- Un chatbot simple entraîné sur des données de questions-réponses du quotidien
-
guess
- Un modèle sous forme de jeu des 20 Questions
- Il connaît un sujet secret et répond par YES/NO/MAYBE
- Lorsque l’utilisateur trouve la bonne réponse, il affiche « WIN »
- Un modèle sous forme de jeu des 20 Questions
- Les données d’entraînement peuvent être générées à l’aide d’Ollama ou de l’API Claude, avec un outil d’équilibrage de la distribution des classes inclus
Fonctionnalités principales
- Encodage par hachage trigramme : le texte d’entrée est haché dans 128 buckets, avec tolérance aux fautes de frappe et indépendance vis-à-vis de l’ordre des mots
- Quantification des poids sur 2 bits : chaque poids vaut {-2, -1, 0, +1}, avec 4 poids stockés par octet
- Inférence entière 16 bits : utilisation des opérations arithmétiques 16 bits du Z80
- Fichier .COM d’environ 40 Ko : adapté à la Transient Program Area (TPA) de CP/M
- Génération autorégressive : la sortie est générée caractère par caractère
- Aucune opération en virgule flottante, utilisation d’un redimensionnement en virgule fixe
- Prise en charge du mode conversationnel : exécution avec la commande
CHAT
Mode d’interaction
- Le modèle ne « comprend » pas l’entrée, mais réagit en fonction de la forme (shape) de celle-ci
- La phrase d’entrée est convertie en 128 buckets de trigrammes, ce qui préserve une similarité sémantique
- Ex. : « hello there » et « there hello » sont traités avec la même structure de buckets
- Il a du mal à distinguer les phrases longues ou dépendantes de l’ordre
-
Le sens des réponses courtes
- Même des réponses d’un ou deux mots peuvent exprimer des nuances étonnantes
OK: acceptation neutreWHY?: remise en cause de la questionR U?: doute sur l’existenceMAYBE: incertitudeAM I?: question réflexive
- Ces réponses courtes incitent l’utilisateur à déduire lui-même le contexte
- Même des réponses d’un ou deux mots peuvent exprimer des nuances étonnantes
Points forts et limites
- Points forts
- Réponses de type classification cohérentes pour des entrées courtes
- Bonne robustesse face aux fautes de frappe, reformulations et changements d’ordre des mots
- Expression d’une personnalité par le choix du vocabulaire
- Exécution possible même sur un matériel 8 bits limité
- Limites
- Impossible de générer de nouvelles phrases
- Impossible de suivre un contexte sur plusieurs tours
- Incapable de comprendre la grammaire
- Reste loin d’un niveau d’intelligence générale
Architecture
- Couche d’entrée : 128 buckets de requête + 128 buckets de contexte
- Couches cachées : exemple de configuration 256 → 192 → 128
- Couche de sortie : 1 neurone par caractère du jeu de caractères
- Fonction d’activation : ReLU
-
Contraintes de quantification
- Le Z80 est un CPU 8 bits, mais il effectue l’accumulation et l’activation à l’aide de paires de registres 16 bits (HL, DE, BC)
- Les poids sont stockés 4 par octet (sur 2 bits chacun)
- Un accumulateur 16 bits évite les débordements lors de la somme de 256 entrées
- La quantification sur 2 bits limite la capacité d’expression et, sans QAT, peut produire des résultats d’entraînement instables
-
Boucle interne du Z80
- Le cœur de l’inférence est une boucle multiply-accumulate (MAC)
- Les poids sont décompressés, puis ajoutés ou soustraits de l’accumulateur (ACC) selon les valeurs -2~-1~0~+1
- Après le calcul de chaque couche, un décalage à droite de 2 bits est appliqué pour éviter les débordements
- L’ensemble du processus d’inférence répète environ 100 000 opérations par caractère
- Le cœur de l’inférence est une boucle multiply-accumulate (MAC)
Licence
- MIT ou Apache-2.0, au choix
2 commentaires
Je trouve vraiment fascinant de voir les technologies les plus récentes fonctionner sur du matériel ancien.
Quand l’AGI arrivera dans le futur, sera-t-il possible de la faire tourner si l’on rassemble toute la puissance de calcul actuellement disponible sur Terre ?
Avis Hacker News
Capture d’écran
Je ne pensais pas que quelqu’un publierait quelque chose d’aussi parfaitement adapté. Une coïncidence vraiment étrange, mais incroyable
J’ai créé un émulateur CP/M et un IDE dans le navigateur : lockboot.github.io/desktop
J’allais justement publier ça, mais je suis tombé dans un terrier de lapin en cherchant une « démo sympa »
J’avais codé un MLP en Fortran IV pour une machine à cartes perforées des années 60 (projet Xortran)
Même sans mécanisme d’attention et avec un contexte limité au trigramme de la dernière phrase, l’interaction était plutôt correcte
Si ce genre de chose avait été possible sur le matériel des années 60, la science-fiction et la science de l’époque auraient été complètement différentes
Pour parler comme un conspirationniste, on dirait que l’une des raisons pour lesquelles les entreprises d’IA achètent de la RAM en masse est d’empêcher les gens de réaliser qu’on est à un moment comparable à la révolution des micro-ordinateurs
J’utilise une machine avec 1 To de RAM, et avec des agents personnalisés j’obtiens de meilleures performances que les modèles commerciaux. C’est personnel, sûr et pas monétisé
Et la question suivante, c’est : peut-on créer un petit modèle capable d’apprendre en consultant des données externes ?
Si on pouvait faire un modèle minuscule qui apprend en temps réel, on aurait alors un assistant personnel entièrement local
Un très petit modèle avec très peu de connaissances encyclopédiques, mais doté d’un raisonnement de base et de la capacité d’utiliser des outils
Tweet de référence
Dans ce cas, le monde d’aujourd’hui serait sans doute complètement différent
C’est une étude de cas expérimentale sur l’idée de ce que donnerait un RNN adapté aux LLM
C’est incroyablement rapide sur CPU
En revanche, il serait probablement difficile d’en tirer parti avec une grande fenêtre de contexte
je me demande si, en ayant accès aux poids du modèle, on pourrait reconstituer ce secret à rebours, ou s’il ne serait accessible qu’à travers les questions
Il traite de la manière d’implanter des portes dérobées indétectables à l’intérieur de modèles qui semblent fonctionner normalement en surface
En général, cela relève du problème de l’interprétabilité (interpretability)
Il avait une architecture de mots de 32K×36 bits et ne prenait pas en charge les opérations sur octets
Y transférer tel quel un exécutable Z80 de 40 Ko aurait été assez serré
Mais comme il s’agit en grande partie de poids sur 2 bits, ça aurait peut-être été possible
Le matériel ultérieur, en particulier le Z80 de 1976, aurait offert bien plus de marge
Je prévois de l’étendre dans la prochaine version, donc je compte absolument essayer
À l’époque, seuls les mots-clés exacts fonctionnaient, ce qui rendait le tout assez maladroit
Le dernier jeu de ce type était probablement Wizardry 8 en 2001