- BrainTools - https://www.braintools.ru -
В последние годы разговоры об искусственном интеллекте [2] не утихают ни на минуту. Гигантские модели, которые генерируют текст, картинки и даже целый код, требуют дата-центров с мощными процессорами и терабайтами памяти [3]. Однако если копнуть глубже, основа всей этой магии проста и понятна. Один необычный проект наглядно это доказывает. Причем он реализован на компьютере почти полувековой давности. Автор запустил настоящий, хоть и крошечный трансформер [4].
Сначала о том, что это за девайс. Речь о PDP-11 — системе 1970-х, широко применявшейся в науке [5] и инженерии. Это 16-битная архитектура с поддержкой разнообразной периферии.
Ее возможности были ограничены: дорогая память и низкая по современным меркам производительность требовали писать предельно компактный и точный код. При этом архитектура была продуманной — с гибкой системой адресации и единым подходом к работе с памятью и устройствами, что упрощало разработку. PDP-11 во многом задала стандарты: на этих машинах появились и развивались Unix и язык C, оказавшие влияние на все последующее программирование.
Код загружали напрямую через консоль: после сборки программы заносили в память вручную, посредством панели или с бумажной ленты. Ошибка [6] означала повтор всей процедуры, поэтому отладка занимала много времени и требовала аккуратности.
Характеристики PDP-11/44 (экземпляр из проекта)
Процессор: 16-битная архитектура DEC PDP-11/44
Тактовая частота: ~6 МГц
Оперативная память: 64 КБ
Тип памяти: магнитная/полупроводниковая (в зависимости от конфигурации)
Кеш: дополнительная кеш-плата (ускорение доступа к памяти)
Накопители: отсутствуют в базовом сценарии (загрузка без дисков)
Загрузка программ:
через консольную панель
ручной ввод в память
возможна загрузка с бумажной ленты
Интерфейсы: модульная система шин для подключения периферии
Арифметика: целочисленная (без аппаратного сопроцессора)
Формфактор: стоечная мини-ЭВМ (rack-mounted)
Владелец PDP-11/44 из статьи держит эту систему у себя в гараже полностью в рабочем состоянии. Он давно собирает старое железо и получает настоящее удовольствие, когда удается запустить на нем что-то неожиданное. Машина стала для него не просто реликвией, а площадкой для экспериментов. И сейчас речь как раз об одном из них.
Идея реализовать трансформер на таком устаревшем оборудовании принадлежит французскому разработчику Дамьену Бурейлю. Ранее он уже создавал простые нейронные сети на системах с жесткими ограничениями ресурсов, и этот опыт [8] стал отправной точкой для более сложной задачи. В новом проекте он решил проверить, можно ли перенести принципы механизма внимания [9] на платформу уровня PDP-11.
Проект получил название ATTN-11 [10], он полностью написан на ассемблере MACRO-11, без использования высокоуровневых языков и готовых библиотек. Такой подход выбран осознанно: все вычисления, структуры данных и работа с памятью реализованы вручную. Это позволило уложиться в крайне ограниченные ресурсы системы и одновременно продемонстрировать, что базовые принципы механизма внимания можно воспроизвести даже на оборудовании, где, на первый взгляд, не хватает места для современных программ.
Дамьен опирался на свои предыдущие наработки, в частности на систему Xortran [4], где он демонстрировал обучение [11] с обратным распространением ошибки в крайне тесных рамках. Новый проект стал прямым развитием этой идеи. Теперь вместо простого перцептрона реализована полноценная, пусть и минимальная, архитектура с механизмом внимания. При этом код удалось уместить чуть более чем в 6 килобайт в бинарном виде, так что он полностью укладывался в доступные ресурсы машины.
Дейв Пламмер, увидев результат, решил запустить его на реальном PDP-11 [12].
Модель предельно упрощена: один слой, одна голова внимания, размер внутреннего представления — 16, максимальная длина последовательности — 8 токенов, словарь — 10 символов (цифры от 0 до 9). Всего 1216 параметров. Для вычислений использовали фиксированную точку: на прямом проходе — 8 бит дробной части (Q8), при обучении — 15 бит (Q15), веса накапливались в 32-битном формате (Q16). Умножение выполняли средствами целочисленной арифметики PDP-11 с последующими сдвигами для приведения масштаба, а softmax заменили на заранее рассчитанную таблицу значений. Это позволило полностью отказаться от плавающей запятой и снизить нагрузку на процессор.
Вся нейросеть построена вокруг небольшого стека операций под названием NN11, который включает в себя скалярную арифметику, векторные и матричные операции, функции активации и базовые слои. Архитектура сведена к минимуму: встраивание токенов, позиционное кодирование, механизм внимания с остаточным соединением и финальная проекция на выход. Этого хватило для задачи переворота последовательности, где ключевую роль играет порядок элементов.
Память распределена рационально: веса хранятся в трех вариантах точности: для накопления, прямого прохода и градиентов. Используются небольшие кеши для промежуточных результатов и таблицы для экспоненты и других функций. В итоге вся система занимает около 19,2 КБ и укладывается даже в 32 КБ, оставляя место для ОС и отладки.
Само внимание реализовано [4] через классическое скалярное произведение запросов и ключей, без дополнительных усложнений. Входные векторы проецируются с помощью обучаемых матриц, после чего формируется матрица сходства. Чтобы избежать переполнения в ограниченной арифметике, из всех значений вычитают максимум — это простой и надежный способ сохранить численную стабильность.
Далее используется заранее подготовленная таблица экспоненты из 256 элементов. Она заменяет softmax: разницу делят на восемь, выбирают соответствующий элемент по индексу и нормируют. Результат умножается на векторы, формируя взвешенную сумму, которая проходит через остаточное соединение. Это позволяет учитывать позиции в последовательности без лишних вычислений.
В этой задаче внимание должно было игнорировать содержимое токенов и опираться только на их порядок. Каждый элемент нужно сопоставить с нужным из конца, поэтому ошибка в позиционном соответствии сразу давала неверный результат. При небольшой размерности модель быстро «чувствовала» такие промахи, и обучение требовало точной подстройки весов. В итоге даже одного слоя оказалось достаточно, чтобы выучить это правило и корректно работать с последовательностью.
Обучение проводилось с помощью стохастического градиентного спуска с разными скоростями для частей модели: 0,08 для весов внимания, 0,01 для встраиваний и 0,0025 для выходной проекции. Это позволило обойтись без сложного оптимизатора и сэкономить память. На каждом шаге сеть получала случайную последовательность из восьми цифр, предсказывала перевернутую цифру и корректировала веса по ошибке.
Все происходило в реальном времени на самой машине. Вначале точность оставалась на уровне случайного угадывания, но затем быстро росла: к ~350 итерациям модель достигала 100%, а потери почти обнулялись. Весь процесс занимал около 3,5 минуты, что для такой системы выглядело более чем достойно.
Эксперимент показывает, что за внешней сложностью современных моделей стоит набор базовых операций: матричные умножения, нормализация, вычисление сходства. В минимальной конфигурации все это укладывается в простую арифметику и работает даже при крайне ограниченной памяти.
Разницу создает масштаб. Увеличение числа параметров, объема данных и вычислений позволяет переходить от узких задач к универсальным моделям, способным обобщать разнообразные сценарии и работать с ними. Ограниченные ресурсы, наоборот, заставляют выделять только ключевые элементы и строить более компактные решения.
Такие проекты наглядно показывают, что развитие искусственного интеллекта сегодня во многом определяется инфраструктурой: архитектурные идеи известны, а их эффективность раскрывается при масштабировании. Возврат к простым реализациям помогает лучше понять эти принципы и увидеть, как они работают в чистом виде.
Автор: k0mar0v
Источник [13]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/28970
URLs in this post:
[1] Источник: https://arstechnica.com/gadgets/2022/03/a-brief-tour-of-the-pdp-11-the-most-influential-minicomputer-of-all-time/
[2] интеллекте: http://www.braintools.ru/article/7605
[3] памяти: http://www.braintools.ru/article/4140
[4] трансформер: https://github.com/dbrll/ATTN-11
[5] науке: http://www.braintools.ru/article/7634
[6] Ошибка: http://www.braintools.ru/article/4192
[7] Источник: https://blog.adafruit.com/2022/03/15/the-pdp-11-the-most-influential-minicomputer-of-all-time-arstechnica/
[8] опыт: http://www.braintools.ru/article/6952
[9] внимания: http://www.braintools.ru/article/7595
[10] получил название ATTN-11: https://www.tomshardware.com/tech-industry/artificial-intelligence/veteran-windows-dev-shows-off-ai-running-on-47-year-old-pdp11-with-6-mhz-cpu-and-64kb-of-ram-gloriously-absurd-project-runs-transformer-model-written-in-pdp-11-assembly-language
[11] обучение: http://www.braintools.ru/article/5125
[12] запустить его на реальном PDP-11: https://www.youtube.com/watch?v=OUE3FSIk46g
[13] Источник: https://habr.com/ru/companies/ru_mts/articles/1024564/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1024564
Нажмите здесь для печати.