Со скоростью более 1 миллиарда кадров в секунду это, возможно, самый быстрый 8-битный консольный кластер в мире.
Распределенный тетрис (1989)
Как собрать такой компьютер?
Рецепт
Возьмите горсть кремния, примените обучение с подкреплением, опыт работы с суперкомпьютерами, страсть к компьютерной архитектуре, добавьте пот и слезы, помешивайте 1000 часов, пока не закипит, и вуаля.
Зачем кому-то нужен такой компьютер?
Короче говоря: двигаться в сторону увеличения искусственного интеллекта.
Одна из 48 плат IBM Neural Computer, использованных для экспериментов.
Вот более подробная версия
2016 Глубокое обучение повсюду.Распознавание изображений можно считать решенной проблемой благодаря сверточным нейронным сетям, и мои исследовательские интересы связаны с нейронными сетями с памятью и обучением с подкреплением.
В частности, статья Google Deepmind показала, что можно достичь или даже превзойти человеческую производительность в различных играх для Atari 2600 (домашняя игровая консоль, выпущенная в 1977 году) с использованием простого алгоритма обучения с подкреплением Deep Q-Neural Network. .
И все это происходит просто наблюдая за игровым процессом.
Это привлекло мое внимание.
Одна из игр для Atari 2600, Breakout. Машина была обучена с использованием простого алгоритма обучения с подкреплением.
После миллионов итераций компьютер стал играть лучше человека.
Я начал экспериментировать с играми для Atari 2600. Прорыв, хотя и впечатляющий, не был трудным.
Сложность можно определить по степени сложности в зависимости от ваших действий (джойстик) и ваших результатов (очки).
Проблема появляется, когда эффекта приходится ждать довольно долго.
Иллюстрация проблемы на примере более сложных игр.
Слева — Breakout (ATARI 2600) [автор ошибся, это игра «Понг» / прим.
перев.
] с очень быстрой реакцией и быстрой обратной связью.
Справа — Mario Land (Nintendo Game Boy) не предоставляет немедленной информации о последствиях действия, а между двумя важными событиями могут возникать длительные периоды нерелевантных наблюдений.
Чтобы сделать обучение более эффективным, можно представить себе попытку перенести часть знаний из более простых игр.
Эта проблема в настоящее время остается нерешенной и представляет собой активную тему для исследований.
Недавно опубликовано упражнение от OpenAI пытается измерить именно это.
Возможность передачи знаний не только ускорила бы обучение, но я считаю, что некоторые проблемы обучения вообще не могут быть решены при отсутствии базовых знаний.
Нам нужна эффективность данных.
Возьмем игру Prince of Persia:
Никаких очевидных моментов нет.
Прохождение игры занимает 60 минут.
Можно ли применить здесь тот же подход, который использовался при написании работы над Atari 2600? Насколько вероятно, что вам удастся дойти до конца, нажимая случайные клавиши?
Этот вопрос вдохновил меня внести свой вклад в сообщество, пытаясь решить эту проблему.
По сути, у нас есть проблема курицы и яйца: нам нужен лучший алгоритм, который позволит нам передать сообщение, но это требует исследований, а эксперименты отнимают много времени, потому что у нас нет лучшего алгоритма.
Пример передачи знаний: представьте, что мы впервые научились играть в простую игру, например в лево.
Затем мы сохраняем такие понятия, как «гонка», «автомобиль», «трек», «победа», и изучаем цвета или 3D-модели.
Мы утверждаем, что общие концепции можно «переносить» между играми.
Сходство игр можно определить по объему передаваемых между ними знаний.
Например, игры «Тетрис» и F1 не будут похожи.
Поэтому я решил использовать второй лучший подход, избегая начального замедления за счет резкого ускорения системы.
Моими целями были: - ускоренная среда (представьте, что Prince of Persia можно пройти в 100 раз быстрее) и одновременный запуск 100 000 игр.
— среда, более подходящая для исследования (мы фокусируемся на задачах, а не на предварительных расчетах, нам доступны различные игры).
Первоначально я думал, что узкое место в производительности может быть связано со сложностью кода эмулятора (например, кодовая база Stella велика, и она также опирается на абстракции C++ — не лучший выбор для эмуляторов).
Консоли
Всего я работал над несколькими платформами, начиная с одной из самых первых когда-либо созданных игр (вместе с игрой Pong) — аркадной игры Space Invaders, Atari 2600, NES и Game Boy. И все это было написано в книге С.
Мне удалось достичь максимальной частоты кадров 2000-3000 в секунду.
Нам нужны миллионы или миллиарды кадров, чтобы начать получать экспериментальные результаты, поэтому разрыв был огромным.
Space Invaders работает в FPGA — низкоскоростном режиме отладки.
Счетчик на FPGA показывает количество прошедших тактовых импульсов.
И тогда я подумал — а что, если бы мы могли ускорить нужную среду с помощью аппаратного обеспечения.
Например, оригинальные Space Invaders работали на процессоре 8080 с частотой 1 МГц.
Мне удалось эмулировать процессор 8080 с частотой 40 МГц на процессоре Xeon с частотой 3 ГГц.
Неплохо, но после того, как я поместил все это внутрь ПЛИС, частота выросла до 400 МГц.
Это означало 24 000 кадров в секунду в одном потоке — эквивалент Xeon с частотой 30 ГГц! Я упоминал, что средняя FPGA может вместить 100 процессоров 8080? Это уже дает FPS 2,4 миллиона.
Space Invaders с аппаратным ускорением, 100 МГц, четверть полной скорости
Более сотни ядер внутри ПЛИС Xilinx Kintex 7045 (обозначены яркими цветами; синее пятно посередине — общая логика для демонстрации).
Неровный путь выполнения
Вы можете спросить, а как насчет графического процессора? Короче говоря, нам нужен параллелизм типа МИМД , но нет SIMD .
Будучи студентом, я некоторое время работал над выполнение поиск по дереву методом Монте-Карло на GPU (данный поиск использовался в AlphaGo).
В то время я потратил бесчисленное количество часов, пытаясь заставить графические процессоры и другое оборудование SIMD (IBM Cell, Xeon Phi, AVX CPU) выполнять подобный код, но ничего не получалось.
Несколько лет назад я начал думать, что было бы неплохо иметь возможность самому разрабатывать оборудование, специально предназначенное для решения задач обучения с подкреплением.
MIMD-параллелизм
ATARI 2600, NES или Game Boy?
На 8080 я реализовал Space Invaders, NES, 2600 и Game Boy. Вот некоторые факты о них и преимуществах каждого.
РЭШ Пакман
Space Invaders были лишь разогревом.
Нам удалось заставить их работать, но это была всего одна игра, поэтому результаты оказались не очень полезными.
Atari 2600 является фактическим стандартом в исследованиях обучения с подкреплением.
Процессор MOS 6507 — это упрощенная версия знаменитого 6502, его дизайн более изящный и эффективный, чем у 8080. Я выбрал 2600 не только из-за определенных ограничений, связанных с играми и их графикой.
Я также внедрил NES (Nintendo Entertainment System), она разделяет процессор с 2600. Игры там намного лучше, чем на 2600. Но обе консоли страдают от слишком сложного конвейера обработки графики и множества форматов картриджей, которые необходимо поддерживать.
.
Тем временем я заново открыл для себя Nintendo Game Boy. И это было то, что я искал.
Почему Game Boy такой крутой?
1049 классических игр и 576 игр Game Boy Color Всего игр более 1000, очень большое разнообразие, высокое качество, некоторые из них довольно сложные (Принц), игры можно группировать и назначать сложность для передачи знаний и обучения (например, есть варианты тетрис, гоночные игры, Марио).
Решение игры «Принц Персии» может потребовать переноса знаний из какой-либо другой подобной игры, в которой явно указаны очки (в «Принце» этого нет).
Nintendo Game Boy — моя любимая платформа для исследований в области передачи знаний.
В графике я попытался сгруппировать игры по сложности (субъективно) и сходству (понятия типа гонок, прыжков, стрельбы, различных игр типа тетрис; кто-нибудь играл в ХАТРИС?).
Классический Game Boy имеет очень простой экран (160x144, 2-битный цвет), что упрощает предварительную обработку и позволяет вам сосредоточиться на важных вещах.
На 2600 даже в простых играх много цветов.
Кроме того, Game Boy гораздо лучше отображает объекты, не мерцая и не делая максимум двух последовательных кадров.
Никаких сумасшедших карт памяти, таких как NES или 2600. Большинство игр можно заставить работать с 2-3 картографами.
Компактный код — мне удалось уместить весь эмулятор C не более чем в 700 строк кода, а моя реализация Verilog умещается в 500 строк.
Здесь такая же простая версия Space Invaders, как и в аркаде.
И вот он, мой матричный Game Boy 1989 года и версия FPGA, работающая через HDMI на экране 4K.
Вот чего не умеет мой старый Game Boy:
Тетрис, ускоренный железом - запись экрана в реальном времени, скорость 1/4 от максимальной.
Есть ли от этого реальная польза?
Да, у меня есть.До сих пор я тестировал систему в простых условиях, когда внешняя сеть правил взаимодействует с отдельными Game Boys. Точнее, я использовал алгоритм A3C (Advantage Actor Critic) и планирую описать его в отдельном посте.
Мой коллега подключил его к сверточной сети на FPGA и все работает.
Как FGPA взаимодействует с нейронной сетью
Распределенный A3C
Земля Марио: исходное состояние.
Случайное нажатие клавиш далеко не уведет нас.
Оставшееся время показано в правом верхнем углу.
Если нам повезет, мы быстро закончим игру после того, как коснемся гумбы.
Если нет, то на «проигрыш» уйдет 400 секунд.
Земля Марио: за час игры Марио научился бегать, прыгать и даже открыл секретную комнату, забравшись в трубу.
Pac Man: примерно через час обучения нейросеть смогла даже один раз пройти всю игру (съедая все точки).
Заключение
Мне хотелось бы думать, что следующее десятилетие станет периодом, когда суперкомпьютеры и искусственный интеллект найдут друг друга.Я хотел бы иметь оборудование, которое позволило бы мне настроить себя до определенного уровня, чтобы адаптироваться к желаемому алгоритму ИИ.
Следующее десятилетие Код для Game Boy на C .
Отладка
Меня часто спрашивают: что было самым трудным? Всё, весь проект был довольно болезненным.Начнем с того, что для Game Boy нет технических характеристик.
Все, что мы узнали, было получено в результате реверс-инжиниринга, то есть мы запускали промежуточную задачу, например игру, и наблюдали за ее выполнением.
Это сильно отличается от стандартной отладки программного обеспечения, поскольку здесь мы отлаживаем аппаратное обеспечение, на котором выполняются программы.
Мне пришлось придумать разные способы сделать это.
Я уже упоминал, как сложно отслеживать процесс, когда он работает на частоте 100 МГц? О, и там нет printf.
Один из подходов к реализации ЦП заключается в группировке инструкций по их функциям.
С 6502 гораздо проще.
В LR35092 напичкано много «случайного» материала, и есть много исключений.
Эту таблицу я использовал при работе с процессором Game Boy. Я использовал жадную стратегию — брал самый большой кусок инструкций, реализовал их и вычеркивал, затем повторял.
1/4 инструкций — это ALU, 1/4 — загрузка регистров, которую можно реализовать довольно быстро.
На другой стороне спектра есть всякие отдельные вещи типа «загрузка из HL в SP со знаком», которые нужно было обрабатывать отдельно.
Отладка: запустите код на отлаживаемом оборудовании, напишите лог вашей реализации и дополнительную информацию (вот сравнение кода Verilog слева с моим эмулятором C справа).
Затем вы запускаете diff в журналах, чтобы найти несоответствия (синий).
Одна из причин использования автоматизации заключается в том, что во многих случаях после миллионов циклов выполнения я обнаруживал проблемы, когда один-единственный флаг ЦП вызывал эффект снежного кома.
Я попробовал несколько подходов, и этот оказался самым эффективным.
Вам понадобится много кофе!
Этим книгам 40 лет. Было удивительно рыться в них и смотреть на мир компьютеров глазами пользователей того времени — я чувствовал себя гостем из будущего.
Запрос на исследование от OpenAI
Сначала я хотел работать с играми с точки зрения памяти, как описано в разделе почта из ОпенАИ.Удивительно, но заставить Q-обучение хорошо работать с входными данными, представляющими собой состояния памяти, оказалось на удивление сложно.
Этот проект может не иметь решения.
Было бы неожиданно узнать, что Q-learning никогда не добьется успеха в работе с памятью Atari, но есть вероятность, что задача будет довольно сложной.
Учитывая, что игры Atari использовали только 128 байт памяти, обработка этих 128 байтов вместо полноэкранных кадров казалась весьма привлекательной.
Я получил неоднозначные результаты, поэтому начал изучать это.
Хотя я не могу доказать, что обучение по памяти невозможно, я могу показать, что предположение о том, что память отражает полное состояние игры, неверно.
ЦП Atari 2600 (6507) использует 128 байт памяти, но при этом имеет доступ к дополнительным регистрам, живущим на отдельной схеме (TIA, ТВ-адаптер, что-то вроде графического процессора).
Эти регистры используются для хранения и обработки информации об объектах (ракетка, ракета, мяч, столкновения).
Другими словами, они не будут доступны, если рассматривать только память.
Кроме того, и NES, и Game Boy имеют дополнительные регистры, которые используются для управления экраном и прокрутки.
Сама по себе память не отражает полного состояния игры.
Только 8080 напрямую сохраняет данные в видеопамяти, позволяя получить полное состояние игры.
В других случаях регистры «GPU» подключаются между ЦП и экранным буфером вне ОЗУ.
Интересный факт: если вы исследуете историю графических процессоров, 8080 может оказаться первым «графическим ускорителем» — у него есть внешний сдвиговый регистр, который позволяет перемещать космических захватчиков с помощью одной команды, что освобождает процессор.
ЭОФ
Теги: #Машинное обучение #Игры и игровые консоли #nes #искусственный интеллект #Суперкомпьютеры #game boy #atari 2600
-
Как Создать Резервную Копию В Windows 7?
19 Oct, 24 -
Зачем Стартапам Нужен Пиарщик?
19 Oct, 24 -
Абстрактная Задача О Днях Недели.
19 Oct, 24 -
Он-Лайн Бизнес В Рунете.
19 Oct, 24 -
Будущее Интернета Обсуждают В Афинах
19 Oct, 24