22 points par GN⁺ 2025-12-30 | 2 commentaires | Partager sur WhatsApp
  • 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

2 commentaires

 
crawler 2025-12-30

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 ?

 
GN⁺ 2025-12-30
Avis Hacker News
  • Un timing parfait. J’ai intégré dans un jeu Unreal Engine un terminal VT100 (pour exécuter un agent de code), un émulateur Z80 et un pont série permettant de programmer une machine CP/M
    Capture d’écran
    Je ne pensais pas que quelqu’un publierait quelque chose d’aussi parfaitement adapté. Une coïncidence vraiment étrange, mais incroyable
    • On dirait qu’on a eu une sorte de télépathie
      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 »
    • Le livre de James Burke, Connections: Alternative History of Technology, traite très bien ce genre de connexions fortuites
    • Intéressant, mais dommage que je ne puisse pas voir imgur
  • J’adore vraiment. J’ai mis une étoile GitHub immédiatement
    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
    • Ce genre de projet est vraiment fascinant. On a l’impression de voir une voie non empruntée
      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é
  • J’y pense souvent moi aussi. Qu’est-ce qu’un « LLM minimalement fonctionnel » ? Un modèle juste assez capable pour tenir une conversation simple
    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
    • C’est presque exactement l’idée de « cognitive core » dont parle Karpathy
      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
    • Si cette technologie avait existé dans les années 90, il est possible que des LLM rudimentaires aient déjà vu le jour
      Dans ce cas, le monde d’aujourd’hui serait sans doute complètement différent
    • RWKV est intéressant à regarder : rwkv.com
      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
    • Il existe un LLM créé par quelqu’un dans Minecraft qui gère des conversations simples avec 5 millions de poids en 8 bits
      En revanche, il serait probablement difficile d’en tirer parti avec une grande fenêtre de contexte
  • Blague disant que les entreprises d’IA vont racheter toutes les puces Z80 et faire monter les prix
    • Trop tard. Les stocks ont été épuisés l’an dernier
  • Si on entraînait un modèle avec un secret (passphrase) et que l’utilisateur devait le deviner en posant des questions
    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
    • Cette question me fait penser à cet article : Planting Undetectable Backdoors in Machine Learning Models
      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
    • Plus le modèle est petit, plus ce type de secret peut être extrait facilement par analyse des poids
      En général, cela relève du problème de l’interprétabilité (interpretability)
  • Avec le bon code et la bonne infrastructure d’entraînement, ELIZA aurait sans doute pu être bien plus puissante
    • À l’origine, ELIZA tournait sur un mainframe IBM 7094 des années 60
      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
  • J’ai moi aussi conçu et fabriqué mon propre ordinateur Z80. Il embarque actuellement 32 Ko de ROM et 32 Ko de RAM
    Je prévois de l’étendre dans la prochaine version, donc je compte absolument essayer
    • En ce moment, les prix de la RAM sont bien trop élevés
  • Si toute l’entrée est traitée en une seule fois comme un embedding, on dirait une architecture MLP plutôt qu’un Transformer ou un RNN
  • J’aurais aimé qu’il y ait ce genre de fuzzy matcher dans les anciens RPG à saisie libre
    À 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
  • Beau travail. Au fait, quel est le calendrier prévu jusqu’à l’AGI ?
    • Probablement vers début avril
    • Elle doit être juste au prochain tournant