Статус проекта: Больше не поддерживается!
К сожалению, я больше не могу развивать и поддерживать проект.
Reaver — это модульная среда глубокого обучения с подкреплением, ориентированная на различные задачи, основанные на StarCraft II, идущая по стопам DeepMind, которая продвигает новейшие достижения в этой области через призму игры в современную видеоигру с человекоподобным интерфейсом и ограничения. Это включает в себя наблюдение за визуальными особенностями, похожими (хотя и не идентичными) на то, что воспринимает игрок-человек, и выбор действий из аналогичного пула вариантов, которые есть у игрока-человека. Дополнительные сведения см. в статье StarCraft II: новый вызов обучению с подкреплением.
Хотя разработка основана на исследованиях, философия Reaver API схожа с самой игрой StarCraft II — ей есть что предложить как новичкам, так и экспертам в этой области. Для программистов-любителей Reaver предлагает все инструменты, необходимые для обучения агентов DRL, изменяя только небольшую и изолированную часть агента (например, гиперпараметры). Для опытных исследователей Reaver предлагает простую, но оптимизированную по производительности кодовую базу с модульной архитектурой: агент, модель и среда разделены и могут быть заменены по желанию.
Хотя основное внимание в Reaver уделяется StarCraft II, он также имеет полную поддержку других популярных сред, в частности Atari и MuJoCo. Алгоритмы агента Reaver проверяются на соответствие эталонным результатам, например, агент PPO может соответствовать алгоритмам оптимизации проксимальной политики. Более подробную информацию см. ниже.
Самый простой способ установить Reaver — через менеджер пакетов PIP
:
pip install reaver
Вы также можете установить дополнительные дополнения (например, поддержку gym
) с помощью вспомогательных флагов:
pip install reaver[gym,atari,mujoco]
Если вы планируете изменить кодовую базу Reaver
вы можете сохранить функциональность его модуля, установив его из исходного кода:
$ git clone https://github.com/inoryy/reaver-pysc2
$ pip install -e reaver-pysc2/
При установке с флагом -e
Python
теперь будет искать reaver
в указанной папке, а не в хранилище site-packages
.
Пожалуйста, посетите вики-страницу для получения подробных инструкций по настройке Reaver в Windows.
Однако, если возможно, рассмотрите возможность использования Linux OS
— из соображений производительности и стабильности. Если вы хотите увидеть, как ваш агент работает с полной графикой, вы можете сохранить воспроизведение агента в Linux и открыть его в Windows. Вот как была сделана видеозапись, представленная ниже.
Если вы хотите использовать Reaver с другими поддерживаемыми средами, вам также необходимо установить соответствующие пакеты:
Вы можете обучить агента DRL в нескольких средах StarCraft II, работающих параллельно, с помощью всего четырех строк кода!
import reaver as rvr
env = rvr . envs . SC2Env ( map_name = 'MoveToBeacon' )
agent = rvr . agents . A2C ( env . obs_spec (), env . act_spec (), rvr . models . build_fully_conv , rvr . models . SC2MultiPolicy , n_envs = 4 )
agent . run ( env )
Более того, Reaver поставляется с легко настраиваемыми инструментами командной строки, поэтому эту задачу можно свести к короткой однострочной задаче!
python -m reaver.run --env MoveToBeacon --agent a2c --n_envs 4 2> stderr.log
С помощью строки выше Reaver инициализирует процедуру обучения с набором заранее определенных гиперпараметров, оптимизированных специально для данной среды и агента. Через некоторое время вы начнете видеть журналы с различной полезной статистикой на экране терминала.
| T 118 | Fr 51200 | Ep 212 | Up 100 | RMe 0.14 | RSd 0.49 | RMa 3.00 | RMi 0.00 | Pl 0.017 | Vl 0.008 | El 0.0225 | Gr 3.493 | Fps 433 |
| T 238 | Fr 102400 | Ep 424 | Up 200 | RMe 0.92 | RSd 0.97 | RMa 4.00 | RMi 0.00 | Pl -0.196 | Vl 0.012 | El 0.0249 | Gr 1.791 | Fps 430 |
| T 359 | Fr 153600 | Ep 640 | Up 300 | RMe 1.80 | RSd 1.30 | RMa 6.00 | RMi 0.00 | Pl -0.035 | Vl 0.041 | El 0.0253 | Gr 1.832 | Fps 427 |
...
| T 1578 | Fr 665600 | Ep 2772 | Up 1300 | RMe 24.26 | RSd 3.19 | RMa 29.00 | RMi 0.00 | Pl 0.050 | Vl 1.242 | El 0.0174 | Gr 4.814 | Fps 421 |
| T 1695 | Fr 716800 | Ep 2984 | Up 1400 | RMe 24.31 | RSd 2.55 | RMa 30.00 | RMi 16.00 | Pl 0.005 | Vl 0.202 | El 0.0178 | Gr 56.385 | Fps 422 |
| T 1812 | Fr 768000 | Ep 3200 | Up 1500 | RMe 24.97 | RSd 1.89 | RMa 31.00 | RMi 21.00 | Pl -0.075 | Vl 1.385 | El 0.0176 | Gr 17.619 | Fps 423 |
Reaver должен быстро достичь примерно 25-26 RMe
(среднее вознаграждение за эпизод), что соответствует результатам DeepMind для этой среды. Конкретное время обучения зависит от вашего оборудования. Логи, приведенные выше, созданы на ноутбуке с процессором Intel i5-7300HQ (4 ядра) и графическим процессором GTX 1050, обучение заняло около 30 минут.
После того, как Reaver завершит обучение, вы можете посмотреть, как он работает, добавив флаги --test
и --render
в однострочный файл.
python -m reaver.run --env MoveToBeacon --agent a2c --test --render 2> stderr.log
Доступен сопутствующий блокнот Google Colab, позволяющий опробовать Reaver онлайн.
Многие современные алгоритмы DRL полагаются на одновременное выполнение в нескольких средах. Поскольку в Python есть GIL, эту функцию необходимо реализовать посредством многопроцессорной обработки. Большинство реализаций с открытым исходным кодом решают эту задачу с помощью подхода на основе сообщений (например, Python multiprocessing.Pipe
или MPI
), где отдельные процессы взаимодействуют, отправляя данные через IPC. Это действительный и, скорее всего, единственный разумный подход для крупномасштабных распределенных подходов, над которыми работают такие компании, как DeepMind и openAI.
Однако для типичного исследователя или любителя гораздо более распространенным сценарием является доступ только к одной компьютерной среде, будь то ноутбук или узел в кластере HPC. Reaver оптимизирован специально для этого случая, используя общую память без блокировки. Этот подход обеспечивает значительный прирост производительности — до 1,5-кратного увеличения частоты дискретизации StarCraft II (и до 100-кратного ускорения в общем случае), причем узким местом почти исключительно является конвейер ввода-вывода графического процессора.
Три основных модуля Reaver — envs
, models
и agents
практически полностью отделены друг от друга. Это гарантирует, что расширение функциональности одного модуля легко интегрируется в другие.
Вся конфигурация обрабатывается через gin-config и может быть легко передана в виде файлов .gin
. Сюда входят все гиперпараметры, аргументы среды и определения модели.
При экспериментировании с новыми идеями важно быстро получить обратную связь, что часто нереально в таких сложных средах, как StarCraft II. Поскольку Reaver был построен на модульной архитектуре, его реализации агентов фактически вообще не привязаны к StarCraft II. Вы можете сделать замену для многих популярных игровых сред (например, openAI gym
) и сначала проверить, работают ли реализации с ними:
python -m reaver.run --env CartPole-v0 --agent a2c 2> stderr.log
import reaver as rvr
env = rvr . envs . GymEnv ( 'CartPole-v0' )
agent = rvr . agents . A2C ( env . obs_spec (), env . act_spec ())
agent . run ( env )
В настоящее время Reaver поддерживает следующие среды:
CartPole-v0
)PongNoFrameskip-v0
)InvertedPendulum-v2
и HalfCheetah-v2
) Карта | Ривер (A2C) | ДипМайнд SC2LE | ДипМайнд РеДРЛ | Эксперт по правам человека |
---|---|---|---|---|
MoveToBeacon | 26,3 (1,8) [21, 31] | 26 | 27 | 28 |
СобиратьМинералОсколки | 102,8 (10,8) [81, 135] | 103 | 196 | 177 |
ПобедитьТараканов | 72,5 (43,5) [21, 283] | 100 | 303 | 215 |
Найти и победить зерглингов | 22,1 (3,6) [12, 40] | 45 | 62 | 61 |
Победить Зерглингов и Гиблингов | 56,8 (20,8) [21, 154] | 62 | 736 | 727 |
Собирать Минералы И Газ | 2267,5 (488,8) [0, 3320] | 3978 | 5,055 | 7 566 |
BuildMarines | -- | 3 | 123 | 133 |
Human Expert
были получены DeepMind от игрока уровня GrandMaster.DeepMind ReDRL
относится к текущим результатам, описанным в статье «Реляционное глубокое обучение с подкреплением».DeepMind SC2LE
— это результаты, опубликованные в статье StarCraft II: Новый вызов для обучения с подкреплением.Reaver (A2C)
— это результаты, полученные путем обучения агента reaver.agents.A2C
, максимально точно копирующего архитектуру SC2LE
на доступном оборудовании. Результаты собираются путем запуска обученного агента в режиме --test
для 100
эпизодов и расчета общего вознаграждения за эпизод. Перечислены среднее значение, стандартное отклонение (в скобках), а также минимальное и максимальное значения (в квадратных скобках).Карта | Образцы | Эпизоды | Прибл. Время (ч) |
---|---|---|---|
MoveToBeacon | 563 200 | 2304 | 0,5 |
СобиратьМинералОсколки | 74 752 000 | 311 426 | 50 |
ПобедитьТараканов | 172 800 000 | 1 609 211 | 150 |
Найти и победить зерглингов | 29 760 000 | 89 654 | 20 |
Победить Зерглингов и Гиблингов | 10 496 000 | 273 463 | 15 |
Собирать Минералы И Газ | 16 864 000 | 20 544 | 10 |
BuildMarines | - | - | - |
Samples
относятся к общему количеству цепочек observe -> step -> reward
в одной среде.Episodes
относятся к общему количеству флагов StepType.LAST
возвращаемых PySC2.Approx. Time
— это приблизительное время обучения на laptop
с процессором Intel i5-7300HQ
(4 ядра) и графическим процессором GTX 1050
. Обратите внимание, что я не потратил много времени на настройку гиперпараметров, сосредоточившись в основном на проверке способности агента к обучению, а не на максимизации эффективности выборки. Например, для простой первой попытки MoveToBeacon
потребовалось около 4 миллионов образцов, однако после некоторых экспериментов мне удалось уменьшить их до 102 000 (уменьшение примерно в 40 раз) с помощью агента PPO.
Среднее вознаграждение за эпизод с заполненным между ними файлом std.dev. Нажмите, чтобы увеличить.
Видеозапись выступления агента во всех шести мини-играх доступна онлайн по адресу: https://youtu.be/gEyBzcPU5-w. На видео слева агент действует со случайно инициализированными весами и без обучения, тогда как справа он обучен назначать целевые показатели.
Проблема воспроизводимости исследований в последнее время стала предметом многих дискуссий в науке в целом, и обучение с подкреплением не является исключением. Одна из целей Reaver как научного проекта — облегчить воспроизводимые исследования. Для этого в комплект Reaver входят различные инструменты, упрощающие этот процесс:
Чтобы обеспечить воспроизводимость, Reaver поставляется с предварительно обученными весами и полными сводными журналами Tensorboard для всех шести мини-игр. Просто загрузите архив эксперимента со вкладки «Выпуски» и разархивируйте его в каталог results/
.
Вы можете использовать предварительно обученные веса, добавив флаг --experiment
к команде reaver.run
:
python reaver.run --map <map_name> --experiment <map_name>_reaver --test 2> stderr.log
Журналы Tensorboard доступны, если вы запустите tensorboard --logidr=results/summaries
.
Вы также можете просмотреть их прямо в Интернете через Augie Boards.
Reaver — очень особенный и субъективно милый юнит протоссов в игровой вселенной StarCraft. В версии игры StarCraft: Brood War Ривер был известен своей медлительностью, неуклюжестью и зачастую практически бесполезностью, если его оставить самому по себе из-за ошибок внутриигрового ИИ. Однако в руках преданных игроков, которые потратили время на овладение этим отрядом, Ривер стал одним из самых мощных активов в игре, часто играя ключевую роль в победных играх на турнирах.
Предшественник Reaver, названный просто pysc2-rl-agent
, был разработан как практическая часть бакалаврской работы в Тартуском университете под руководством Ильи Кузовкина и Тамбета Матийсена. Вы все еще можете получить к нему доступ в ветке v1.0.
Если вы столкнулись с проблемой, связанной с кодовой базой, откройте заявку на GitHub и опишите ее как можно подробнее. Если у вас есть более общие вопросы или вы просто ищете совет, напишите мне по электронной почте.
Я также горжусь тем, что являюсь членом активного и дружелюбного онлайн-сообщества SC2AI, для общения мы в основном используем Discord. Присоединяйтесь к нам приглашаются люди любого происхождения и уровня подготовки!
Если вы нашли Reaver полезным в своих исследованиях, рассмотрите возможность цитирования его со следующим bibtex:
@misc{reaver,
author = {Ring, Roman},
title = {Reaver: Modular Deep Reinforcement Learning Framework},
year = {2018},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/inoryy/reaver}},
}