- Z80-μLM ist ein ultrakompaktes konversationelles KI-Modell, das auf einem Z80-Prozessor aus dem Jahr 1976 (4 MHz, 64 KB RAM) läuft
- Durch den Einsatz von quantisierungsbewusstem Training (QAT) erzeugt es zeichenbasierten Text nur mit 2-Bit-Gewichten und 16-Bit-Ganzzahloperationen
- In einer etwa 40 KB großen
.COM-Datei sind Inferenz-Engine, Gewichte und Chat-UI vollständig enthalten
- Mit Trigramm-Hash-Encoding wird die Eingabe in 128 Buckets umgewandelt, wodurch robuste Antworten gegenüber Tippfehlern oder veränderter Wortreihenfolge entstehen
- Komplexes Kontextverständnis ist nicht möglich, dennoch gilt es als experimentelles KI-Modell, das selbst in einer eingeschränkten 8-Bit-Umgebung funktioniert
Projektüberblick
- Z80-μLM ist ein ultrakleines Sprachmodell, das in Retrocomputing-Umgebungen lauffähig ist
- Es läuft auf einer Z80-CPU mit 64 KB RAM und erzeugt interaktive Antworten auf Zeichenebene
- Die Gesamtgröße inklusive Modell, Inferenz-Code und UI beträgt rund 40 KB
- Die zentrale Frage des Projekts lautete: „Wie klein kann man es machen, ohne die Persönlichkeit zu verlieren?“, und auch eine Self-Hosting-Bereitstellung ist möglich
- Es erreicht nicht das Niveau eines Turing-Tests, ist aber in der Lage, Nutzerinnen und Nutzern mit einfachen Gesprächen Freude zu bereiten
Enthält zwei Beispiele
-
tinychat
- Ein einfacher Chatbot, trainiert mit alltäglichen Q&A-Daten
- Bietet kurze, charaktervolle Antworten auf Begrüßungen, Selbstvorstellungen und allgemeine Konversation
- Beispiel: „hello“ → „HI“, „are you a robot“ → „YES“, „do you dream“ → „MAYBE“
-
guess
- Ein Modell im Stil des Spiels 20 Questions
- Es kennt ein geheimes Thema und antwortet mit YES/NO/MAYBE
- Wenn der Nutzer die richtige Antwort errät, gibt es „WIN“ aus
- Trainingsdaten können mit Ollama oder der Claude API erzeugt werden; ein Tool zum Ausbalancieren der Klassenverteilung ist enthalten
Hauptfunktionen
- Trigramm-Hash-Encoding: Hasht den Eingabetext in 128 Buckets, toleriert Tippfehler und ist unabhängig von der Wortreihenfolge
- 2-Bit-Gewichtsquantisierung: Jedes Gewicht ist eines aus {-2, -1, 0, +1}, vier Gewichte werden pro Byte gespeichert
- 16-Bit-Ganzzahl-Inferenz: Nutzt die 16-Bit-Arithmetik des Z80
- ~40 KB
.COM-Datei: Passt in den Transient Program Area (TPA) von CP/M
- Autoregressive Generierung: Erzeugt die Ausgabe Zeichen für Zeichen
- Keine Gleitkommaoperationen, stattdessen Fixed-Point-Skalierung
- Unterstützt interaktiven Modus: Start über den Befehl
CHAT
Art der Interaktion
- Das Modell „versteht“ die Eingabe nicht, reagiert aber auf Basis der Form (shape) der Eingabe
- Eingabesätze werden in 128 Trigramm-Buckets umgewandelt, wodurch semantische Ähnlichkeit erhalten bleibt
- Beispiel: „hello there“ und „there hello“ werden mit derselben Bucket-Struktur verarbeitet
- Lange Sätze oder von Reihenfolge abhängige Formulierungen lassen sich schwer unterscheiden
-
Die Bedeutung kurzer Antworten
- Selbst Antworten mit 1–2 Wörtern können unerwartete Nuancen ausdrücken
OK: neutrale Zustimmung
WHY?: stellt die Frage infrage
R U?: Zweifel an der Existenz
MAYBE: Unsicherheit
AM I?: reflektierende Gegenfrage
- Solche kurzen Antworten regen die Nutzer dazu an, den Kontext selbst zu erschließen
Stärken und Grenzen
- Stärken
- Konsistente, klassifikationsartige Antworten auf kurze Eingaben
- Robust gegenüber Tippfehlern, Umformulierungen und Änderungen der Wortreihenfolge
- Persönlichkeitsausdruck durch Wortwahl
- Lauffähig selbst auf eingeschränkter 8-Bit-Hardware
- Grenzen
- Keine Erzeugung neuer Sätze möglich
- Kein Multi-Turn-Kontext-Tracking
- Kein Grammatikverständnis
- Erreicht nicht das Niveau allgemeiner Intelligenz
Architektur
- Eingabeschicht: 128 Query-Buckets + 128 Kontext-Buckets
- Hidden Layers: Beispielkonfiguration 256 → 192 → 128
- Ausgabeschicht: Ein Neuron pro Zeichen des Zeichensatzes
- Aktivierungsfunktion: ReLU
-
Quantisierungsbeschränkungen
- Der Z80 ist zwar eine 8-Bit-CPU, führt Akkumulation und Aktivierung jedoch mit 16-Bit-Registerpaaren (HL, DE, BC) aus
- Gewichte werden zu je 4 in 1 Byte gespeichert (je 2 Bit)
- Ein 16-Bit-Akkumulator verhindert Overflow beim Summieren von 256 Eingängen
- Durch 2-Bit-Gewichte ist die Ausdruckskraft begrenzt; ohne QAT können instabile Trainingsergebnisse auftreten
-
Z80-Innenschleife
- Das Herzstück der Inferenz ist eine Multiply-Accumulate-Schleife (MAC)
- Gewichte werden entpackt und je nach Wert -2, -1, 0 oder +1 zum Akkumulator (ACC) addiert oder davon subtrahiert
- Nach der Berechnung jeder Schicht wird zur Overflow-Vermeidung um 2 Bit nach rechts geshiftet
- Der gesamte Inferenzprozess wiederholt pro Zeichen etwa 100.000 Rechenoperationen
Lizenz
- Wahlweise MIT oder Apache-2.0
Noch keine Kommentare.