- 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 »
-
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 »
- 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 neutre
WHY? : remise en cause de la question
R U? : doute sur l’existence
MAYBE : incertitude
AM I? : question réflexive
- Ces réponses courtes incitent l’utilisateur à déduire lui-même le contexte
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
Licence
- MIT ou Apache-2.0, au choix
Aucun commentaire pour le moment.