GPT2-BASIC: как запустить трансформер на DOS-машине

GPT2-BASIC: как запустить трансформер на DOS-машине

Современные LLM обычно связаны с дата-центрами, CUDA и гигабайтами видеопамяти. Проект GPT2-BASIC ломает эту привычку: он запускает GPT-стильный трансформер и ассистент-рантайм на DOS-классных машинах, написанный на FreeBASIC и использующий целочисленную арифметику с фиксированной точностью. Это не эмулятор и не веб-обёртка — это полноценный локальный инференс, который читает модели и словари с диска, меняет паки знаний на лету и работает без сети.

Это звучит как ретро-вытворство, но за ним стоит серьёзный инженерный вопрос: какой минимум ресурсов нужен языковой модели, чтобы она оставалась полезной? GPT2-BASIC отвечает на него практически, собирая рабочий прототип из компонентов, которые обычно выбрасываются как «слишком старые».

Идея проекта проста: если убрать слой хайпа и рассмотреть LLM как алгоритм, а не как требование к железу, становится ясно, что вывод языковой модели можно организовать на гораздо более скромной платформе, чем принято думать. Остаётся лишь решить, какие компромиссы приемлемы и как их компенсировать.

Что такое GPT2-BASIC

GPT2-BASIC — это реализация трансформера и оболочки ассистента на BASIC для DOS-совместимых систем. Внутри: фиксированная точность Q20.12, загружаемые файлы моделей и словаря, горячая замена паков помощника, индексированные базы знаний KDB/KB2 и sharded текстовые индексы KB2T?.TXT. Проект компилируется под FreeBASIC, запускается в DOSBox и QEMU, и нацелен на машины без современного GPU.

Автор исходит из простого тезиса: вывод языковых моделей — алгоритм, а не характеристика железа. При правильной квантизации, компоновке хранилища, токенизаторе и поисковых индексах те же идеи можно уместить на оборудовании, которое обычно считается слишком слабым для LLM. Здесь «портативность» понимается буквально: один и тот же код можно собрать для современной машины, для DOSBox и для эмулятора ретро-PC, используя только дисковое хранилище и оперативную память.

Почему фиксированная точность

В большинстве современных моделей веса хранятся как 32-битные float. GPT2-BASIC использует Q20.12 — 32-битные целые числа, где 12 бит отданы дробной части. Это означает, что все матричные умножения, softmax и операции внимания выполняются целочисленно, без FPU.

Зачем такие сложности? Даже старые 386- и 486-совместимые процессоры умеют быстро складывать и умножать целые числа. А вот плавучая точка на них работает медленно, если реализована программно. Q20.12 даёт приемлемый динамический диапазон и точность для небольших моделей, оставаясь на уровне операций, которые железо выполняет быстро. Это пример аппаратно-ориентированной квантизации: не просто «уменьшить вес», а подстроить математику под возможности целевой платформы.

Кроме экономии тактов, фиксированная точность упрощает переносимость. На разных процессорах float-арифметика может вести себя по-разному, особенно если речь идёт о программной реализации. Целочисленные операции, наоборот, детерминированы и одинаково реализуются в компиляторах. Для проекта, который должен собираться на FreeBASIC и запускаться в эмуляторах, это не мелочь — это гарантия, что одинаковые входы дают одинаковые выходы.

Как устроен рантайм

В основе лежит DOS-загружаемый модуль, который читает заранее подготовленные файлы: токенизатор, веса, паки знаний, конфигурацию ассистента. Во время работы можно переключать паки — тематические наборы, например, для чата, помощи по DOS, офисных задач, заметок разработчика или навигации по портативным системам.

Паки состоят из нескольких механизмов:

  • tiny model generation — генерация коротких ответов маленькой моделью;
  • golden replies — заранее подобранные эталонные ответы на частые запросы;
  • session memory — контекст текущего разговора;
  • pack retrieval — выбор подходящего пака по запросу;
  • KDB/KB2 records — бинарные записи базы знаний;
  • KB2T?.TXT indexes — текстовые индексы терминов, разбитые по шардам.

Такая смесь генерации и поиска по индексам позволяет получить полезный ответ на слабом железе: часть задач решается поиском, часть — генерацией, а выбор зависит от запроса и доступного контекста.

Рассмотрим конкретный пример. Пользователь спрашивает, как отформатировать дискету в DOS. Пак помощи по DOS может найти ответ в KDB-записи и отдать готовый ответ — это быстро и не требует генерации. Если же вопрос расплывчатый или требует суммирования нескольких фактов, tiny model генерирует ответ на основе контекста, а golden replies выступают страховкой против явных галлюцинаций. Pack retrieval выбирает, какой из паков наиболее релевантен, поэтому ассистент не пытается отвечать на вопросы о DOS, используя пак для офисных задач.

Что делает проект уникальным

Главная ценность GPT2-BASIC не в том, чтобы заменить Claude или GPT-4, а в демонстрации переносимости идеи. Несколько важных моментов:

  1. Независимость от сети. Все модели и знания локальные, инференс происходит на машине. Это устраняет задержки, проблемы с конфиденциальностью и зависимость от подписок.
  2. Аппаратно-экстремальная платформа. DOS-классные машины — ограниченная память, нет GPU, нет Python, нет современных фреймворков. Здесь каждый байт и каждый такт считаются.
  3. FreeBASIC. Язык, привычный по эпохе 80-х и 90-х, но при этом компилируемый и способный дать приличную производительность. Он достаточно низкоуровневый, чтобы контролировать ресурсы, и достаточно простой, чтобы читать код.
  4. Система паков. Вместо одной универсальной модели — набор специализированных ассистентов, которые можно менять. Это экономит память и повышает релевантность, потому что активен только тот пак, который нужен сейчас.

Это делает проект не только инженерным курьёзом, но и источником идей для edge- и embedded-систем, где важен минимальный размер, низкое энергопотребление и автономность.

Кому это интересно

Проект будет полезен в нескольких контекстах.

Разработчикам embedded-устройств — для понимания, как далеко можно зайти с квантизацией и локальным поиском. Веса Q20.12, индексация и pack-based подход могут быть адаптированы под микроконтроллеры и одноплатные компьютеры.

Исследователям эффективности LLM — как практический пример extreme quantization. Какие операции можно перевести в целые числа без катастрофической потери качества? Как организовать токенизатор и поиск, чтобы компенсировать уменьшение модели?

Ретрокомпьютерщикам и энтузиастам — как демонстрация того, что «старый» компьютер способен не только на игры и демосцены, но и на полезные языковые задачи.

Педагогам — код на FreeBASIC и фиксированная точность делают проект доступным для изучения: здесь видно, как работает трансформер без многослойной абстракции PyTorch или CUDA.

Историкам вычислительной техники — проект показывает, какие идеи из современного машинного обучения можно было бы реализовать десятилетия назад, если бы тогда знали нужные алгоритмы. Он размывает границу между «новым» и «старым» в компьютерной инженерии.

Какие ограничения у такого подхода

Проект явно не претендует на состязание с большими моделями. Основные ограничения очевидны:

  • Модель мала. GPT2-BASIC работает с крошечными моделями по сегодняшним меркам, поэтому качество генерации скромное. Это не недостаток, а осознанный компромисс: меньше параметров означает меньше весов, меньше памяти и меньше тактов на один токен.
  • Контекст ограничен. Доступный контекст зависит от памяти и размера модели; долгие диалоги сильнее страдают от забывания. Здесь pack retrieval и golden replies помогают частично компенсировать ограничение, возвращая релевантные факты без необходимости держать их в KV-кэше.
  • Токенизация и словарь узкие. Для DOS-эпохи словарь и набор языков могут быть ограниченными. Современные мультиязычные токенизаторы с 32 000 или 100 000 токенов просто не поместятся в RAM или весовой файл.
  • Скорость. Даже с оптимизациями инференс на 486 или раннем Pentium будет медленным. Генерация предложения может занимать секунды, поэтому проект ориентирован на короткие запросы и быстрые ответы из базы знаний, а не на длинные творческие сессии.

Тем не менее, проект показывает, что «невозможно на старом железе» — часто не технический предел, а предположение, идущее от привычки к современным стекам.

Связь с современными трендами

GPT2-BASIC перекликается с несколькими активными направлениями в мире LLM.

Edge AI. Модели всё чаще запускают на телефонах, наушниках и носимых устройствах. Вопрос там тот же: как ужать модель и вывести её на слабом железе.

Quantization. INT8, INT4, QLoRA и методы вроде GPTQ и AWQ показывают, что современные модели можно сильно сжимать. Q20.12 — это грубая, но понятная крайность того же направления.

Retrieval-Augmented Generation. Комбинация маленькой генеративной модели с поиском по индексам — это тот же RAG, но в микроскопическом масштабе.

Local-first ПО. Возвращение к локальному софту, который не зависит от облака и не требует подписки. GPT2-BASIC — литеральная версия этого идеала для ассистентов.

Часто задаваемые вопросы

Можно ли использовать GPT2-BASIC как замену ChatGPT?

Нет. Это исследовательский и образовательный проект для ограниченного железа. Он демонстрирует принципы, а не конкурирует с облачными моделями.

Почему именно BASIC?

BASIC в этом контексте — компилируемый язык FreeBASIC, который хорошо вписывается в DOS-экосистему. Он достаточно прост, чтобы быть понятным, и достаточно быстр, чтобы запускать вывод на старом железе.

Что такое Q20.12?

Это формат фиксированной точки: 32-битное целое, где 20 бит — целая часть, 12 бит — дробная. Он позволяет выполнять математику модели без плавучих операций.

Какие паки знаний включены?

Проект поставляет несколько паков: общий чат, помощь по DOS, офисные задачи, заметки разработчика и навигация по портативным системам. Паки можно менять во время работы.

Итог

GPT2-BASIC — это не попытка вернуться в прошлое, а проверка границ переносимости языковых моделей. Показать, что трансформер и ассистент могут работать на DOS-машине с фиксированной точностью и локальными индексами — значит показать, что сама идея LLM не привязана к облаку и современным GPU. Для разработчиков edge-систем, исследователей квантизации и всех, кто интересуется efficient AI, это живой пример того, как далеко можно зайти, если перестроить стек под железо, а не под привычки.

← Все записи