상태: 유지 관리(버그 수정 및 사소한 업데이트 예상)
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
Virtualenv는 기본적으로 Python 실행 파일과 모든 Python 패키지의 복사본이 있는 폴더입니다. Python3을 사용하여 venv라는 virtualenv를 만들려면 다음을 실행합니다.
virtualenv /path/to/venv --python=python3
virtualenv를 활성화하려면:
. /path/to/venv/bin/activate
virtualenvs 및 옵션에 대한 자세한 튜토리얼은 여기에서 찾을 수 있습니다.
마스터 브랜치는 Tensorflow 버전 1.4부터 1.14까지 지원합니다. Tensorflow 2.0 지원을 위해서는 tf2 브랜치를 사용하세요.
저장소를 복제하고 여기에 CD를 넣으세요.
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인 Tensorflow 1.14를 설치합니다. 자세한 내용은 TensorFlow 설치 가이드를 참조하세요.
기준 패키지 설치
pip install -e .
기본 예제 중 일부는 독점적이며 바이너리와 라이센스가 필요한 MuJoCo(다관절 접촉 역학) 물리 시뮬레이터를 사용합니다(임시 30일 라이센스는 www.mujoco.org에서 얻을 수 있음). MuJoCo 설정에 대한 지침은 여기에서 찾을 수 있습니다.
기준선의 모든 단위 테스트는 pytest 실행기를 사용하여 실행할 수 있습니다.
pip install pytest
pytest
기준선 저장소의 대부분의 알고리즘은 다음과 같이 사용됩니다.
python -m baselines.run --alg= < name of the algorithm > --env= < environment_id > [additional arguments]
예를 들어, 2천만 시간 간격 동안 PPO2를 사용하여 MuJoCo 휴머노이드를 제어하는 완전히 연결된 네트워크를 훈련하려면
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로 설정하고 각 레이어에 32개의 은닉 유닛이 있는 3개의 레이어로 완전히 연결된 네트워크를 구성하고 가치 함수 추정을 위한 별도의 네트워크를 만듭니다(해당 매개변수는 정책 네트워크와 공유되지 않지만 구조는 동일함) )
각 모델 유형의 네트워크 매개변수에 대한 설명은 common/models.py의 docstring을 참조하고, ppo2 하이퍼매개변수에 대한 설명은 기준선/ppo2/ppo2.py/learn()의 docstring을 참조하세요.
Atari를 사용한 DQN은 현재 벤치마크의 고전입니다. Atari Pong에서 DQN의 기본 구현을 실행하려면 다음을 수행하세요.
python -m baselines.run --alg=deepq --env=PongNoFrameskip-v4 --num_timesteps=1e6
알고리즘 직렬화 API는 아직 제대로 통합되지 않았습니다. 그러나 훈련된 모델을 저장/복원하는 간단한 방법이 있습니다. --save_path
및 --load_path
명령줄 옵션은 각각 훈련 전에 주어진 경로에서 텐서플로 상태를 로드하고 훈련 후에 저장합니다. Atari Pong에서 ppo2를 훈련하고 모델을 저장한 다음 나중에 학습한 내용을 시각화한다고 가정해 보겠습니다.
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 정규화를 사용하는 것이 합리적일 수 있습니다. 그렇게 하려면 Baselines/run.py에서 'use_tf=False'를 설정하세요.
기본적으로 진행 상황, 표준 출력을 포함한 모든 요약 데이터는 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(100만 시간 간격) 및 Atari(1000만 시간 간격)에 대한 벤치마크 결과는 각각 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}},
}