Статус: Техническое обслуживание (ожидайте исправления ошибок и незначительные обновления).
OpenAI Baselines — это набор высококачественных реализаций алгоритмов обучения с подкреплением.
Эти алгоритмы облегчат исследовательскому сообществу воспроизведение, уточнение и выявление новых идей, а также создадут хорошую основу для построения исследований. Наша реализация DQN и ее варианты примерно соответствуют оценкам в опубликованных статьях. Мы ожидаем, что они будут использоваться в качестве основы для добавления новых идей и в качестве инструмента для сравнения нового подхода с существующими.
Для базовых показателей требуется python3 (>=3.5) с заголовками разработки. Вам также понадобятся системные пакеты CMake, OpenMPI и zlib. Их можно установить следующим образом
sudo apt-get update && sudo apt-get install cmake libopenmpi-dev python3-dev zlib1g-dev
Для установки системных пакетов на Mac требуется Homebrew. Установив Homebrew, запустите следующее:
brew install cmake openmpi
С общей точки зрения работоспособности пакетов Python рекомендуется использовать виртуальные среды (virtualenvs), чтобы пакеты из разных проектов не мешали друг другу. Вы можете установить virtualenv (который сам по себе является пакетом pip) через
pip install virtualenv
Virtualenvs — это, по сути, папки, содержащие копии исполняемого файла Python и всех пакетов Python. Чтобы создать виртуальную среду под названием venv с помощью Python3, нужно запустить
virtualenv /path/to/venv --python=python3
Чтобы активировать виртуальную среду:
. /path/to/venv/bin/activate
Более подробное руководство по виртуальным средам и опциям можно найти здесь.
Основная ветка поддерживает Tensorflow от версии 1.4 до 1.14. Для поддержки Tensorflow 2.0 используйте ветку tf2.
Клонируйте репозиторий и перейдите в него:
git clone https://github.com/openai/baselines.git
cd baselines
Если у вас еще не установлен TensorFlow, установите свой любимый вариант TensorFlow. В большинстве случаев вы можете использовать
pip install tensorflow-gpu==1.14 # if you have a CUDA-compatible gpu and proper drivers
или
pip install tensorflow==1.14
для установки Tensorflow 1.14, последней версии Tensorflow, поддерживаемой основной веткой. Более подробную информацию можно найти в руководстве по установке TensorFlow.
Установить базовый пакет
pip install -e .
В некоторых базовых примерах используется физический симулятор MuJoCo (многосуставная динамика в контакте), который является запатентованным и требует двоичных файлов и лицензии (временную 30-дневную лицензию можно получить на сайте www.mujoco.org). Инструкцию по настройке MuJoCo можно найти здесь.
Все модульные тесты в базовых версиях можно запустить с помощью pytest runner:
pip install pytest
pytest
Большинство алгоритмов в репозитории базовых показателей используются следующим образом:
python -m baselines.run --alg= < name of the algorithm > --env= < environment_id > [additional arguments]
Например, для обучения полностью подключенной сети, управляющей гуманоидом MuJoCo, с использованием PPO2 для 20-миллионных временных шагов.
python -m baselines.run --alg=ppo2 --env=Humanoid-v2 --network=mlp --num_timesteps=2e7
Обратите внимание, что для сред Mujoco по умолчанию используется полностью подключенная сеть, поэтому мы можем опустить --network=mlp
Гиперпараметрами как для сети, так и для алгоритма обучения можно управлять через командную строку, например:
python -m baselines.run --alg=ppo2 --env=Humanoid-v2 --network=mlp --num_timesteps=2e7 --ent_coef=0.1 --num_hidden=32 --num_layers=3 --value_network=copy
установит коэффициент энтропии равным 0,1 и построит полностью связанную сеть с 3 уровнями по 32 скрытых блока в каждом, а также создаст отдельную сеть для оценки функции стоимости (так что ее параметры не будут использоваться совместно с сетью политики, но структура будет той же самой) )
См. строки документации в common/models.py для описания сетевых параметров для каждого типа модели и строку документации для baselines/ppo2/ppo2.py/learn() для описания гиперпараметров ppo2.
DQN с Atari на данный момент является классикой тестов. Чтобы запустить базовую реализацию DQN на Atari Pong:
python -m baselines.run --alg=deepq --env=PongNoFrameskip-v4 --num_timesteps=1e6
API сериализации алгоритмов еще не унифицирован должным образом; однако существует простой способ сохранить/восстановить обученные модели. Опции командной строки --save_path
и --load_path
загружают состояние тензорного потока по заданному пути перед обучением и сохраняют его после обучения соответственно. Предположим, вы хотите обучить ppo2 на Atari Pong, сохранить модель, а затем визуализировать то, чему она научилась.
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path= ~ /models/pong_20M_ppo2
В результате среднее вознаграждение за эпизод должно составить около 20. Чтобы загрузить и визуализировать модель, мы сделаем следующее — загрузим модель, обучим ее 0 шагов, а затем визуализируем:
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=0 --load_path= ~ /models/pong_20M_ppo2 --play
ПРИМЕЧАНИЕ. Для правильной работы среды Mujoco требуется нормализация, поэтому мы обертываем их оболочкой VecNormalize. В настоящее время, чтобы обеспечить сохранение моделей с нормализацией (чтобы обученные модели можно было восстановить и запустить без дальнейшего обучения), коэффициенты нормализации сохраняются как переменные тензорного потока. Это может несколько снизить производительность, поэтому, если вам требуются шаги с высокой пропускной способностью с Mujoco и вам не нужно сохранять/восстанавливать модели, возможно, имеет смысл вместо этого использовать нормализацию numpy. Для этого установите use_tf=False в baselines/run.py.
По умолчанию все сводные данные, включая прогресс и стандартный вывод, сохраняются в уникальный каталог во временной папке, указанный вызовом функции Python tempfile.gettempdir(). Каталог можно изменить с помощью параметра командной строки --log_path
.
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path= ~ /models/pong_20M_ppo2 --log_path= ~ /logs/Pong/
ПРИМЕЧАНИЕ. Имейте в виду, что программа ведения журнала перезапишет файлы с одинаковыми именами в существующем каталоге, поэтому рекомендуется присваивать именам папок уникальную метку времени, чтобы предотвратить перезапись журналов.
Другой способ изменения временного каталога — использование переменной среды $OPENAI_LOGDIR
.
Примеры загрузки и отображения данных обучения см. здесь.
Результаты тестов на Mujoco (1 миллион временных шагов) и Atari (10 миллионов временных шагов) доступны здесь для Mujoco и здесь для Atari соответственно. Обратите внимание, что эти результаты могут быть не в последней версии кода, конкретный хеш коммита, с помощью которого были получены результаты, указан на странице тестов.
Цитировать этот репозиторий в публикациях:
@misc{baselines,
author = {Dhariwal, Prafulla and Hesse, Christopher and Klimov, Oleg and Nichol, Alex and Plappert, Matthias and Radford, Alec and Schulman, John and Sidor, Szymon and Wu, Yuhuai and Zhokhov, Peter},
title = {OpenAI Baselines},
year = {2017},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/openai/baselines}},
}