Янник Кильхер создал симулятор CPU на базе промптов к GPT

Yannic Kilcher 24,1 тыс. 21 мин 7 мин 08.11.2023
Главное

Известный ИИ-исследователь и блогер Янник Кильхер (Yannic Kilcher) представил неординарный технический проект, раздвигающий границы привычного использования больших языковых моделей. Вместо того чтобы использовать LLM как стандартный чат-бот, разработчик спроектировал и запустил виртуальный процессор (CPU), в котором абсолютно каждая машинная инструкция обрабатывается через текстовые промпты к нейросети GPT. Эксперимент наглядно продемонстрировал, как современные технологии позволяют превратить языковую модель в полноценную вычислительную архитектуру, способную выполнять классические алгоритмы и даже запускать ретро-игры, несмотря на колоссальную стоимость и крайне низкую энергоэффективность такого решения.

🧠 От операционной системы к полноценному процессору 0:00

В качестве отправной точки для своего эксперимента Янник Кильхер выбрал известную публикацию инженера Андрея Карпатого (Andre Karpathy). Карпатый высказал мнение, что на фоне последних технологических достижений большие языковые модели следует воспринимать не просто как чат-ботов, а как центральный управляющий процесс (ядро) принципиально новой операционной системы. По его оценке, такая система способна эффективно оркестровать базы данных, внешние инструменты и распределять вычислительные ресурсы.

Однако Янник Кильхер посчитал, что подобный взгляд излишне ограничен рамками стандартного мышления. Автор проекта выдвинул альтернативную идею: пойти гораздо дальше и реализовать на базе GPT полноценную процессорную архитектуру (CPU). По задумке Кильхера, это позволит скомпилировать абсолютно любую компьютерную программу и выполнить её код непосредственно через обращения к языковой модели, которая выступает в роли физических транзисторов и логических блоков виртуального процессора.

Перед тем как углубиться в архитектурные детали проекта, автор затронул тему практического обучения в сфере работы с ИИ, отметив бесплатный курс по обучению и тонкой настройке больших языковых моделей от компании Weights & Biases. По словам Кильхера, курс включает в себя 37 практических уроков, созданных совместно с Mosaic. Автор особо выделил блок, посвященный подготовке датасетов и методологиям оценки моделей, высказав мнение, что умение измерять реальное качество работы обученной нейросети — это один из самых дефицитных и востребованных навыков в современной ИИ-индустрии.

🛠️ Как устроен классический процессор и компиляция кода 2:23

Чтобы продемонстрировать работу своего изобретения, Янник Кильхер выбрал классическую программу FizzBuzz, которая часто применяется на собеседованиях при приеме на работу программистов. Логика алгоритма проста:

На стандартном компьютере выполнение такой программы занимает доли миллисекунд. Чтобы показать скрытые процессы, автор активировал режим отладки (debug output). В этот момент на экран вывелся массив низкоуровневых машинных инструкций, которые обычно скрыты от глаз пользователя.

Кильхер подробно напомнил базовые принципы работы компьютерного железа:

  1. Память и счетчик команд: Исходный код компилируется в набор низкоуровневых инструкций и загружается в память. Специальный указатель (program counter) последовательно перемещается по этим инструкциям строка за строкой.
  2. Регистры: Внутри центрального процессора (CPU) есть сверхбыстрые ячейки памяти — регистры, которые автор метафорически сравнил с «ведрами» для временного хранения данных.
  3. Выполнение инструкций: Процессор получает конкретные команды. Например, инструкция move перемещает данные из регистра №4 в регистр №8. Инструкция CMP (compare) сравнивает значение в регистре с заданным числом и записывает результат (0 или 1) в другой регистр. На основе этого инструкция условного перехода (branch) решает, к какому шагу программы перейти дальше, реализуя логику стандартных условий if-else на уровне кремния.

Именно этот сложнейший пошаговый процесс Кильхер перенес на плечи нейросети, назвав получившуюся систему «самым дорогим CPU в мире». Каждая элементарная процессорная операция здесь превращается в полноценный текстовый запрос к GPT. Чтобы выполнить одну машинную инструкцию, программа отправляет массив данных модели, дожидается генерации ответа и только после этого переходит к следующему шагу. Потребовались сотни обращений к API ИИ только для того, чтобы алгоритм FizzBuzz дошел до обработки первых чисел.

⚙️ Архитектурная цепочка: от языка C к LLVM IR и парсеру на Python 7:39

Для реализации проекта автору потребовалось выстроить цепочку инструментов, трансформирующих высокоуровневый код в формат, понятный виртуальной машине. Обычно код на языке C преобразуется компилятором (например, GCC) в ассемблер под конкретную архитектуру процессора (например, x86). Ассемблерный код FizzBuzz содержит специфические низкоуровневые операции: push, add, move, умножение для вычисления остатка от деления и условные переходы.

Поскольку Янник Кильхер работал на операционной системе macOS, вместо GCC использовался компилятор Clang, функционирующий на базе инструментария LLVM. Компилятор LLVM генерирует так называемое промежуточное представление (LLVM Intermediate Representation или IR). Как отметил автор, в отличие от перегруженного регистрами классического ассемблера, код LLVM IR обладает высокой степенью читаемости и логичности, что сделало его идеальным кандидатом для проекта.

Разработка архитектуры GPT-процессора состояла из двух ключевых этапов:

💸 Построение виртуальной машины на промптах 12:04

После успешных тестов на Python автор перешел к главной части — созданию виртуальной машины (VM), управляемой через GPT. На первом этапе эмуляции Кильхер применил гибридный подход: структура регистров по-прежнему администрировалась скриптом на Python в виде словаря (dict), но выполнение абсолютно любой внутренней операции делегировалось нейросети через промпты.

Программа формирует специализированные запросы для каждого действия: промпты для сложения, вычисления остатка от деления, сравнения и системные промпты. В качестве примера автор подробно разобрал обработку участка кода под меткой «блок №6»:

  1. Программе необходимо загрузить значение из указателя в регистр №7.
  2. Скрипт переводит текущее состояние регистров в текстовую строку и отправляет её в GPT с инструкцией: «Посмотри на эти регистры и скажи мне значение под индексом 2».
  3. Модель анализирует текст, находит нужную строчку и возвращает ответ: 0.
  4. Далее требуется вычислить остаток от деления этого значения на 3. Скрипт снова шлет промпт: «Каков остаток от деления 0 на 3?». ИИ отвечает: 0.
  5. Следом идет команда целочисленного сравнения: равны ли полученный остаток и нуль. Модель генерирует ответ: «Да».

Кильхер подчеркнул фундаментальную проблему такой архитектуры — невозможность жестко контролировать выходные данные текстовой модели. Нейросеть может ответить «Да», «True» или разразиться развернутым комментарием. Программе приходится адаптироваться и использовать механизмы приведения типов (truthiness conversion) для обеспечения хоть какой-то стабильности условных переходов. Автор иронично резюмировал, что у него получился «самый дорогой и, вероятно, самый сбоящий процессор в мире».

🎮 Эксперимент со «Змейкой» и хулиганская версия «Chad GPT VM» 15:53

Чтобы доказать универсальность своего компилятора, Янник Кильхер написал на языке C более сложную программу — текстовую игру «Змейка» (Snake), где символ o должен перемещаться по полю и поглощать «звездочки». Компиляция через LLVM IR и последующий запуск на GPT-процессоре прошли успешно, однако скорость работы оказалась критически низкой. По расчетам автора, виртуальному процессору требуется совершить около 600 текстовых инструкций (запросов к API) только для того, чтобы обработать самое первое нажатие клавиши пользователем.

При этом система регулярно страдает от фатальных галлюцинаций ИИ. Нейросеть способна внезапно нарушить математическую логику и решить, к примеру, что число 2 строго больше, чем 30, из-за чего выполнение программы полностью ломается.

На финальном этапе проекта Кильхер усложнил задачу и создал вторую версию виртуальной машины, где даже менеджмент регистров был полностью отдан на откуп нейросети. Теперь регистры хранились не в коде Python, а в виде единой строки, передаваемой внутри промпта. Модель должна была самостоятельно перезаписывать строку состояния и возвращать обновленный массив данных.

Ради шутки автор создал модификацию под названием Chad GPT VM, изменив системные промпты на молодежный сленг американских «бро». Инструкции для ИИ выглядели следующим образом:

Несмотря на комичность, Chad GPT VM продемонстрировала еще большую нестабильность. При попытке сохранить значение 0 в регистр №9, нейросеть вернула ответ, в котором случайно продублировала массив регистров и вложила один словарь внутрь другого, нарушив структуру данных.

В завершение видео Янник Кильхер в шутку сыронизировал, что крупнейшим полупроводниковым производителям TSMC и Nvidia стоит приготовиться к жесткой конкуренции, а акции гипотетической «Chad GPT» обязаны взлететь до небес. При этом автор добавил серьезное напоминание, что его экономические прогнозы не являются финансовой рекомендацией. Весь исходный код эксперимента Кильхер выложил в открытый доступ на GitHub, назвав свой проект «колоссальной тратой денег и времени», которая, тем не не менее, позволяет сыграть в «Змейку» на мощностях передового искусственного интеллекта.

💬 Цитаты

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

Янник Кильхер 0:26

«Это действительно самый дорогой процессор в истории. Требуются сотни инструкций только для того, чтобы добраться до первого FizzBuzz.»

Янник Кильхер 06:58

«Это гигантская трата денег и времени, но, знаете, вы можете поиграть в Змейку, а что еще нужно?»

Янник Кильхер 21:18
👥 Спикер
🔗 Упомянутые сайты и проекты
📊 Цифры
⚖️ Другая сторона
Искусственный интеллект Yannic Kilcher LLVM IR GPT Python Weights & Biases