
Nintendo в весах нейросети: NES запустили внутри Qwen
Разработчик скомпилировал процессор NES 6502 прямо в веса языковой модели Qwen3.5. Без обучения — только компилятор. Super Mario Bros теперь работает внутри трансформера.
Процессор Nintendo — внутри языковой модели
Компилятор, а не обучение, закодировал полноценный процессор NES 6502 и 2 КБ оперативной памяти прямо в веса стандартного чекпоинта Qwen3.5. Модель предсказывает лог выполнения CPU токен за токеном, пока небольшой хост-процесс занимается графикой, вводом контроллера и таймингом vblank. Проект называется nesformer и уже позволяет запускать Super Mario Bros. — пусть и крайне медленно.
Как это работает
Компилятор, позаимствованный из проекта Qwenputer, использует состояние Gated DeltaNet модели как машинную память. 2 КБ рабочей RAM, регистры 6502 и программный ROM из картриджа записываются напрямую в матрицу весов ванильного чекпоинта Qwen3.5.
Каждая голова Gated DeltaNet хранит матрицу состояний 128×128, которую дельта-правило обновляет при каждом токене. Хитрость в том, что при одноиндексном ключе (one-hot key) обновление перезаписывает ровно одну строку матрицы — а значит, каждая строка работает как отдельная ячейка памяти. Так картридж, RAM и регистры процессора живут прямо внутри модели.
Архитектура несформера устроена так:
graph TD
A[ROM картриджа .nes] --> B[Компилятор]
B --> C[Веса Qwen3.5 + DeltaNet-состояние]
C --> D[Модель генерирует токены CPU]
D --> E[Хост: PPU рендерер]
D --> F[Хост: контроллер + NMI]
E --> G[Анимированный GIF / терминал]
Характеристики чекпоинта
Чекпоинт содержит 466,6 млн параметров, из которых реально ненулевых — лишь 9,3 млн, поэтому веса сжимаются в zip до 3,3 МБ. При этом в bf16 файл весов занимает около 933 МБ — отсюда и «~1 ГБ» в названии проекта.
| Параметр | Значение |
|---|---|
| Архитектура | Qwen3_5ForCausalLM |
| Слоёв DeltaNet | 7 (вычислительных) + 1 нулевой |
| Hidden size | 768 |
| Словарь | 263 808 токенов |
| Параметров всего | 466,6 млн (bf16, 933 МБ) |
| Ненулевых параметров | 9,3 млн |
| Размер zip-архива | 3,3 МБ |
| Поддерживаемые маперы | только NROM (mapper 0) |
Насколько это быстро?
Спойлер: совсем не быстро.
Модель работает примерно на 1 650 токенах в секунду, тогда как настоящей NES требуется около 700 000 — то есть несформер медленнее реальной консоли в 150–290 раз. На практике один кадр рендерится за 1–6 секунд: 600 кадров (10 секунд игрового времени) займут около 25 минут.
Быстрый старт
Для запуска нужен Python 3.11+. Пример для Super Mario Bros.:
# Установка зависимостей
python3 -m venv .venv
source .venv/bin/activate
pip install numpy scipy numba pillow
# Запуск игры (нужен собственный ROM)
python -m nesformer run roms/smb.nes --frames 600 --show \
--buttons "start@60-65,right@200-600,a@250-265+300-315"
Поддерживаются только картриджи NROM (mapper 0) — именно на этом маппере вышли Super Mario Bros., Donkey Kong и Excitebike.
Откуда взялась идея
Дрю Бройниг создал несформер под вдохновением от проекта Qwenputer Дивьянша Агравала, который встроил работающий эмулятор NES 6502 CPU в веса Qwen3.5-4B.
Qwenputer компилирует 32-битный RISC-V процессор и CHIP-8 компьютер прямо в веса Qwen3.5-4B, позволяя модели выполнять код на C и MicroPython и проводить точные арифметические вычисления без внешних инструментов.
«Никто не обучал эти веса — компилятор вычислил каждый из них» — из описания проекта nesformer.
Оба проекта демонстрируют одно и то же радикальное переосмысление: языковую модель можно использовать не как вероятностный генератор текста, а как детерминированную вычислительную машину — если правильно скомпилировать веса.
Значение для отрасли
Внедрение NES-процессора в чекпоинт Qwen3.5 работает за счёт отображения памяти консоли во внутреннее состояние модели и генерации каждой инструкции как токена. Проект демонстрирует, что большая языковая модель может выступать детерминированным интерпретатором железа при правильно скомпилированных весах.
Это открывает нестандартное направление: вместо дообучения (fine-tuning) — прямая компиляция логики в структуру трансформера. Потенциальные применения — встроенные верификаторы, аудит-логи и мониторинговые инструменты, которые сама модель не может отключить.
Код проекта открыт на GitHub.