프로젝트 상태: 더 이상 유지되지 않습니다!
불행하게도 저는 더 이상 프로젝트를 개발하거나 지원을 제공할 수 없습니다.
Reaver는 인간과 유사한 인터페이스를 갖춘 최신 비디오 게임을 플레이한다는 렌즈를 통해 해당 분야의 최첨단 기술을 추진하고 있는 DeepMind의 발자취를 따르는 다양한 StarCraft II 기반 작업에 초점을 맞춘 모듈식 심층 강화 학습 프레임워크입니다. 제한. 여기에는 인간 플레이어가 인식하는 것과 유사한(동일하지는 않지만) 시각적 특징을 관찰하고 인간 플레이어가 가질 수 있는 유사한 옵션 풀에서 행동을 선택하는 것이 포함됩니다. 자세한 내용은 스타크래프트 II: 강화 학습을 위한 새로운 도전 문서를 참조하세요.
개발은 연구 중심이지만 Reaver API의 철학은 StarCraft II 게임 자체와 유사합니다. Reaver API는 해당 분야의 초보자와 전문가 모두에게 제공할 무언가를 갖추고 있습니다. 취미 프로그래머를 위해 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
이제 site-packages
저장소가 아닌 지정된 폴더에서 reaver
찾습니다.
Windows에서 Reaver를 설정하는 방법에 대한 자세한 지침은 위키 페이지를 참조하세요.
그러나 가능하다면 성능과 안정성을 고려하여 Linux OS
사용을 고려해 보십시오. 전체 그래픽이 활성화된 상태에서 에이전트의 성능을 확인하려면 Linux에 에이전트 재생을 저장하고 Windows에서 열 수 있습니다. 아래의 영상녹화는 이렇게 만들어졌습니다.
다른 지원 환경에서 Reaver를 사용하려면 관련 패키지도 설치해야 합니다.
단 4줄의 코드만으로 병렬로 실행되는 여러 StarCraft II 환경에서 DRL 에이전트를 훈련할 수 있습니다!
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는 이 환경의 DeepMind 결과와 일치하는 약 RMe
(평균 에피소드 보상)로 빠르게 수렴해야 합니다. 구체적인 훈련 시간은 하드웨어에 따라 다릅니다. 위 로그는 Intel i5-7300HQ CPU(4코어) 및 GTX 1050 GPU가 탑재된 노트북에서 생성되었으며, 훈련에는 약 30분이 소요되었습니다.
Reaver가 훈련을 마친 후 --test
및 --render
플래그를 원라이너에 추가하여 성능을 확인할 수 있습니다.
python -m reaver.run --env MoveToBeacon --agent a2c --test --render 2> stderr.log
Reaver를 온라인으로 시험해 볼 수 있는 Google Colab 노트북이 함께 제공됩니다.
많은 최신 DRL 알고리즘은 여러 환경에서 동시에 병렬로 실행되는 것에 의존합니다. Python에는 GIL이 있으므로 이 기능은 다중 처리를 통해 구현되어야 합니다. 대부분의 오픈 소스 구현은 개별 프로세스가 IPC를 통해 데이터를 전송하여 통신하는 메시지 기반 접근 방식(예: Python multiprocessing.Pipe
또는 MPI
)으로 이 작업을 해결합니다. 이는 DeepMind 및 openAI와 같은 회사가 운영하는 대규모 분산 접근 방식에 대해 유효하고 가장 합리적인 접근 방식입니다.
그러나 일반적인 연구원이나 애호가의 경우 훨씬 더 일반적인 시나리오는 노트북이든 HPC 클러스터의 노드이든 단일 시스템 환경에만 액세스하는 것입니다. Reaver는 잠금 없는 방식으로 공유 메모리를 활용하여 이 경우에 특별히 최적화되었습니다. 이 접근 방식은 StarCraft II 샘플링 속도에서 최대 1.5배 속도 향상 (일반적인 경우 최대 100배 속도 향상)이라는 상당한 성능 향상을 제공하며 거의 독점적으로 GPU 입력/출력 파이프라인에 의해 병목 현상이 발생합니다.
세 가지 핵심 Reaver 모듈( envs
, models
및 agents
은 서로 거의 완전히 분리되어 있습니다. 이를 통해 한 모듈의 확장 기능이 다른 모듈에 원활하게 통합됩니다.
모든 구성은 gin-config를 통해 처리되며 .gin
파일로 쉽게 공유할 수 있습니다. 여기에는 모든 하이퍼파라미터, 환경 인수, 모델 정의가 포함됩니다.
새로운 아이디어를 실험할 때는 빠르게 피드백을 받는 것이 중요합니다. 이는 스타크래프트 II와 같은 복잡한 환경에서는 현실적이지 않은 경우가 많습니다. Reaver는 모듈식 아키텍처로 제작되었기 때문에 에이전트 구현은 실제로 스타크래프트 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 | 딥마인드 ReDRL | 인간 전문가 |
---|---|---|---|---|
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] | 3,978 | 5,055 | 7,566 |
빌드해병대 | -- | 3 | 123 | 133 |
Human Expert
결과는 GrandMaster 레벨 플레이어로부터 DeepMind에 의해 수집되었습니다.DeepMind ReDRL
관계형 심층 강화 학습 기사에 설명된 최신 결과를 나타냅니다.DeepMind SC2LE
StarCraft II: A New Challenge for Reinforcement Learning 기사에 게시된 결과입니다.Reaver (A2C)
reaver.agents.A2C
에이전트를 교육하여 사용 가능한 하드웨어에서 SC2LE
아키텍처를 최대한 가깝게 복제하여 수집한 결과입니다. 훈련된 에이전트를 100
에피소드에 대해 --test
모드로 실행하여 결과를 수집하고 에피소드 총 보상을 계산합니다. 나열된 것은 평균, 표준 편차(괄호 안), 최소 및 최대 값(대괄호 안)입니다.지도 | 샘플 | 에피소드 | 대략. 시간(hr) |
---|---|---|---|
MoveToBeacon | 563,200 | 2,304 | 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 |
빌드해병대 | - | - | - |
Samples
한 환경에서 observe -> step -> reward
체인의 총 개수를 나타냅니다.Episodes
PySC2가 반환한 StepType.LAST
플래그의 총 수를 나타냅니다.Approx. Time
Intel i5-7300HQ
CPU(4코어) 및 GTX 1050
GPU를 탑재한 laptop
에서의 대략적인 훈련 시간입니다. 저는 하이퍼파라미터 튜닝에 많은 시간을 투자하지 않았으며 주로 샘플 효율성을 극대화하기보다는 에이전트가 학습할 수 있는지 확인하는 데 중점을 두었습니다. 예를 들어, MoveToBeacon
순진하게 처음 시도하려면 약 400만 개의 샘플이 필요했지만 몇 번 시도해 본 후에는 PPO 에이전트를 사용하여 샘플을 102,000(~40배 감소)까지 줄일 수 있었습니다.
std.dev가 중간에 채워진 평균 에피소드 보상입니다. 확대하려면 클릭하세요.
6개의 미니게임을 모두 수행하는 에이전트의 비디오 녹화는 https://youtu.be/gEyBzcPU5-w에서 온라인으로 볼 수 있습니다. 왼쪽 비디오에서는 훈련 없이 무작위로 초기화된 가중치를 사용하는 에이전트를 보여주고, 오른쪽에서는 목표 점수에 대해 훈련한 에이전트를 보여줍니다.
연구의 재현성 문제는 최근 과학 전반에 걸쳐 많은 논쟁의 대상이 되고 있으며, 강화 학습도 예외는 아닙니다. 과학 프로젝트로서 Reaver의 목표 중 하나는 재현 가능한 연구를 촉진하는 것입니다. 이를 위해 Reaver에는 프로세스를 단순화하는 다양한 도구가 번들로 제공됩니다.
재현성을 선도하기 위해 Reaver에는 6개 미니게임 모두에 대해 사전 훈련된 가중치와 전체 Tensorboard 요약 로그가 번들로 제공됩니다. 릴리스 탭에서 실험 아카이브를 다운로드하고 results/
디렉터리에 압축을 풀면 됩니다.
reaver.run
명령에 --experiment
플래그를 추가하여 사전 훈련된 가중치를 사용할 수 있습니다.
python reaver.run --map <map_name> --experiment <map_name>_reaver --test 2> stderr.log
tensorboard --logidr=results/summaries
시작하면 Tensorboard 로그를 사용할 수 있습니다.
Aughie Board를 통해 온라인으로 직접 볼 수도 있습니다.
리버(Reaver)는 스타크래프트 게임 세계에서 매우 특별하고 주관적으로 귀여운 프로토스 유닛입니다. 스타크래프트: 브루드 워(StarCraft: Brood War) 버전의 게임에서 Reaver는 느리고, 서툴고, 버그가 있는 게임 내 AI로 인해 단독으로 방치하면 거의 쓸모가 없는 것으로 악명 높았습니다. 그러나 유닛을 숙달하는 데 시간을 투자한 헌신적인 플레이어의 손에서 Reaver는 게임에서 가장 강력한 자산 중 하나가 되었으며 종종 토너먼트 우승 게임에서 중요한 역할을 했습니다.
Reaver의 전신인 pysc2-rl-agent
는 Ilya Kuzovkin과 Tambet Matiisen의 감독 하에 Tartu 대학에서 학사 논문의 실무 부분으로 개발되었습니다. 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}},
}