Если вам казалось, что «запустить ИИ» — это обязательно про дата‑центр, GPU‑ферму и счёт за электричество, похожий на ВВП небольшой страны, то Z80‑μLM приходит и тихо пищит с зелёного экрана: «HI».

Z80-μLM — это крошечная «разговорная» языковая модель, которая умещается в примерно 40 КБ .COM‑файла и бежит на Z80 с 4 МГц и 64 КБ ОЗУ под CP/M. Внутри — и инференс, и веса, и даже простенький чат‑интерфейс. Никаких облаков, токенов и NDA — просто старый добрый восьмибитный железный романтизм, который особенно ценят и в России: ретросцена у нас сильная, народ любит выжать максимум из байта.

Маленький ИИ с характером

Автор задаётся простым вопросом: насколько маленькой может быть модель, чтобы у неё всё ещё была личность и её можно было легко дообучать? Ответ: до смешного маленькой. Она не пройдёт тест Тьюринга, но иногда заставит улыбнуться — особенно когда на ваше «do you dream» отвечает суховатым «MAYBE».

Из коробки есть два примера:

  • tinychat — болтливый, но лаконичный чатбот, который общается короткими, характерными фразами:
    > hello
    HI
    > are you a robot
    YES
    > do you dream
    MAYBE
    
  • guess — игра в «20 вопросов», где модель загадала объект и отвечает YES/NO/MAYBE, пока вы не угадаете:
    > is it alive
    YES
    > is it big
    YES
    > does it have a trunk
    YES
    > is it grey
    MAYBE
    > elephant
    WIN
    

Магия триграмм и 2‑битных весов

Вместо полноценного понимания языка — trigram hash encoding: текст хэшируется в 128 «корзин», устойчивых к опечаткам и порядку слов. «hello there» и «there hello» для модели — одно и то же облако признаков. Длинные фразы, правда, превращаются в кашу: «open the door and turn on the lights» легко путается с «turn on the door and open the lights».

Веса модели ужаты до 2 бит: только четыре значения {-2, -1, 0, +1}, по четыре штуки в байте. Всё вычисляется в 16‑битных целых средствами самого Z80, без плавающей запятой. После каждого слоя — аккуратный арифметический сдвиг вправо, чтобы ничего не взорвалось.

Архитектура проста:
128 триграмм для запроса + 128 для контекста → несколько скрытых слоёв (например, 256 → 192 → 128) → по одному нейрону на каждый символ выходного алфавита. Активации — ReLU, генерация — по символу за раз.

Зачем всё это?

Z80‑μLM не претендует на роль всезнающего ассистента. Но он показывает, что ИИ может быть:

  • самостоятельным — запускается прямо на железе 70‑х,
  • компактным — десятки килобайт вместо гигабайт,
  • обучаемым — есть инструменты генерации датасетов (через Ollama или Claude API) и QAT‑обучение, см. TRAINING.md в репозитории.

Иногда достаточно пары слов — OK, WHY?, MAYBE — чтобы между человеком и машиной пробежал тот самый странный, тёплый ток взаимодействия. Особенно когда этот ток идёт по старому, но всё ещё бодрому Z80.