Adept — это среда обучения с подкреплением, предназначенная для ускорения исследований путем абстрагирования инженерных проблем, связанных с глубоким обучением с подкреплением. Адепт обеспечивает:
- обучение с использованием нескольких графических процессоров
- модульный интерфейс для использования пользовательских сетей, агентов и сред
- базовые модели и алгоритмы обучения с подкреплением для PyTorch
- встроенное ведение журнала тензорной доски, сохранение модели, перезагрузка, оценка и рендеринг
- проверенные значения гиперпараметров по умолчанию
Этот код находится в раннем доступе, ожидайте острых углов. Интерфейсы могут быть изменены. Мы рады принять отзывы и вклад.
Читать далее
- Установка
- Быстрый старт
- Функции
- Производительность
Документация
- Обзор архитектуры
- Обзор модульной сети
- Возобновить обучение
- Оценить модель
- Рендеринг среды
Примеры
- Пользовательская сеть (заглушка | пример)
- Пользовательский подмодуль (заглушка | пример)
- Пользовательский агент (заглушка | пример)
- Пользовательская среда (заглушка | пример)
Установка
git clone https://github.com/heronsystems/adeptRL
cd adeptRL
pip install -e .[all]
Из докера:
Быстрый старт
По умолчанию журналы обучения агента находятся в /tmp/adept_logs/
. Каталог журналов содержит файл тензорной доски, сохраненные модели и другие метаданные.
# Local Mode (A2C)
# We recommend 4GB+ GPU memory, 8GB+ RAM, 4+ Cores
python -m adept.app local --env BeamRiderNoFrameskip-v4
# Distributed Mode (A2C, requires NCCL)
# We recommend 2+ GPUs, 8GB+ GPU memory, 32GB+ RAM, 4+ Cores
python -m adept.app distrib --env BeamRiderNoFrameskip-v4
# IMPALA (requires ray, resource intensive)
# We recommend 2+ GPUs, 8GB+ GPU memory, 32GB+ RAM, 4+ Cores
python -m adept.app actorlearner --env BeamRiderNoFrameskip-v4
# To see a full list of options:
python -m adept.app -h
python -m adept.app help < command >
Используйте свой собственный агент, среду, сеть или подмодуль.
"""
my_script.py
Train an agent on a single GPU.
"""
from adept . scripts . local import parse_args , main
from adept . network import NetworkModule , SubModule1D
from adept . agent import AgentModule
from adept . env import EnvModule
class MyAgent ( AgentModule ):
pass # Implement
class MyEnv ( EnvModule ):
pass # Implement
class MyNet ( NetworkModule ):
pass # Implement
class MySubModule1D ( SubModule1D ):
pass # Implement
if __name__ == '__main__' :
import adept
adept . register_agent ( MyAgent )
adept . register_env ( MyEnv )
adept . register_network ( MyNet )
adept . register_submodule ( MySubModule1D )
main ( parse_args ())
- Вызовите свой скрипт следующим образом:
python my_script.py --agent MyAgent --env env-id-1 --custom-network MyNet
- Вы можете увидеть все аргументы здесь или как реализовать заглушки в разделе примеров выше.
Функции
Скрипты
Локальный (один узел, один графический процессор)
- Лучшее место для начала, если вы пытаетесь понять код.
Распределенный (многоузловой, с несколькими графическими процессорами)
- Использует серверную часть NCCL для полного уменьшения градиентов на графических процессорах без сервера параметров или хост-процесса.
- Поддерживает NVLINK и InfiniBand для снижения накладных расходов на связь.
- InfiniBand не тестировался, поскольку у нас нет установки для тестирования.
Архитектуры обучающихся актеров с взвешиванием по важности, IMPALA (один узел, несколько графических процессоров)
- В нашей реализации для прямых проходов используются работники графического процессора, а не процессора.
- На Atari мы достигаем ~4 тыс. кадров в секунду = ~16 тыс. кадров в секунду с двумя графическими процессорами и 8-ядерным процессором.
- «Обратите внимание, что неглубокий эксперимент IMPALA завершает обучение более 200 миллионов кадров менее чем за один час».
- В официальных экспериментах IMPALA используется 48 ядер.
- Наши: 2000 кадров/(второе *# ядро ЦП) DeepMind: 1157 кадров/(второе *# ядро ЦП)
- Пока не поддерживается несколько узлов или прямая передача памяти графического процессора.
Агенты
- Преимущество актера-критика, A2C (бумага | код)
- Актер-критик Vtrace, IMPALA (бумага | код)
Сети
- Модульный сетевой интерфейс: поддерживает произвольные входные и выходные формы до 4D через API SubModule.
- Сети с отслеживанием состояния (т. е. LSTM)
- Пакетная нормализация (бумага)
Окружающая среда
Производительность
- ~ 3000 шагов в секунду = 12 000 кадров в секунду (Atari)
- Локальный режим
- 64 среды
- GeForce 2080 Ти
- Райзен 2700x 8-ядерный
- Используется для победы в соревнованиях по Doom (Бен Белл / Marv2in)
- Тренирован на 50 миллионов шагов / 200 миллионов кадров.
- До 30 бездействий в начале каждого эпизода
- Оценивалось на разных семенах, чем на обученных.
- Архитектура: четыре Conv (F=32), за которыми следует LSTM (F=512).
- Воспроизведите с помощью
python -m adept.app local --logdir ~/local64_benchmark --eval -y --nb-step 50e6 --env <env-id>
Благодарности
Мы заимствуем фрагменты кода OpenAI и базового кода. Указываем, где это делается.