Projektstatus: Nicht mehr gepflegt!
Leider ist es mir nicht mehr möglich, das Projekt weiterzuentwickeln oder zu unterstützen.
Reaver ist ein modulares Deep-Reinforcement-Learning-Framework mit Schwerpunkt auf verschiedenen StarCraft II-basierten Aufgaben und tritt in die Fußstapfen von DeepMind, das den neuesten Stand der Technik durch die Linse des Spielens eines modernen Videospiels mit menschenähnlicher Benutzeroberfläche vorantreibt Einschränkungen. Dazu gehört die Beobachtung visueller Merkmale, die denen eines menschlichen Spielers ähneln (aber nicht identisch sind), und die Auswahl von Aktionen aus einem ähnlichen Pool an Optionen, die ein menschlicher Spieler haben würde. Weitere Informationen finden Sie im Artikel StarCraft II: Eine neue Herausforderung für das Reinforcement-Lernen.
Obwohl die Entwicklung forschungsorientiert ist, ähnelt die Philosophie hinter Reaver API dem StarCraft II-Spiel selbst – es hat sowohl für Anfänger als auch für Experten auf diesem Gebiet etwas zu bieten. Für Hobby-Programmierer bietet Reaver alle notwendigen Tools zum Trainieren von DRL-Agenten, indem nur ein kleiner und isolierter Teil des Agenten (z. B. Hyperparameter) geändert wird. Für erfahrene Forscher bietet Reaver eine einfache, aber leistungsoptimierte Codebasis mit modularer Architektur: Agent, Modell und Umgebung sind entkoppelt und können nach Belieben ausgetauscht werden.
Während der Schwerpunkt von Reaver auf StarCraft II liegt, bietet es auch volle Unterstützung für andere beliebte Umgebungen, insbesondere Atari und MuJoCo. Reaver-Agent-Algorithmen werden anhand von Referenzergebnissen validiert, z. B. ist der PPO-Agent in der Lage, mit den Proximal-Policy-Optimierungsalgorithmen übereinzustimmen. Weitere Einzelheiten finden Sie weiter unten.
Der einfachste Weg, Reaver zu installieren, ist über den PIP
Paketmanager:
pip install reaver
Über die Helfer-Flags können Sie auch zusätzliche Extras (z. B. gym
Unterstützung) installieren:
pip install reaver[gym,atari,mujoco]
Wenn Sie vorhaben, Reaver
-Codebasis zu ändern, können Sie die Modulfunktionalität beibehalten, indem Sie von der Quelle installieren:
$ git clone https://github.com/inoryy/reaver-pysc2
$ pip install -e reaver-pysc2/
Durch die Installation mit der Flagge -e
sucht Python
jetzt nach reaver
im angegebenen Ordner und nicht site-packages
-Speicher.
Detaillierte Anweisungen zum Einrichten von Reaver unter Windows finden Sie auf der Wiki-Seite.
Wenn möglich, sollten Sie aus Leistungs- und Stabilitätsgründen jedoch die Verwendung Linux OS
in Betracht ziehen. Wenn Sie möchten, dass Ihr Agent mit aktivierter Vollgrafik funktioniert, können Sie eine Wiederholung des Agenten unter Linux speichern und unter Windows öffnen. So entstand die unten aufgeführte Videoaufnahme.
Wenn Sie Reaver mit anderen unterstützten Umgebungen verwenden möchten, müssen Sie auch relevante Pakete installieren:
Sie können einen DRL-Agenten mit mehreren parallel laufenden StarCraft II-Umgebungen mit nur vier Codezeilen trainieren!
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 )
Darüber hinaus verfügt Reaver über hochgradig konfigurierbare Befehlszeilentools, sodass diese Aufgabe auf einen kurzen Einzeiler reduziert werden kann!
python -m reaver.run --env MoveToBeacon --agent a2c --n_envs 4 2> stderr.log
Mit der obigen Zeile initialisiert Reaver das Trainingsverfahren mit einer Reihe vordefinierter Hyperparameter, die speziell für die gegebene Umgebung und den jeweiligen Agenten optimiert sind. Nach einer Weile werden auf Ihrem Terminalbildschirm Protokolle mit verschiedenen nützlichen Statistiken angezeigt.
| 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 sollte sich schnell etwa 25–26 RMe
(durchschnittliche Episodenbelohnungen) annähern, was den DeepMind-Ergebnissen für diese Umgebung entspricht. Die spezifische Schulungszeit hängt von Ihrer Hardware ab. Die oben genannten Protokolle wurden auf einem Laptop mit Intel i5-7300HQ-CPU (4 Kerne) und GTX 1050-GPU erstellt. Das Training dauerte etwa 30 Minuten.
Nachdem Reaver das Training abgeschlossen hat, können Sie seine Leistung überprüfen, indem Sie die Flags --test
und --render
an den Einzeiler anhängen.
python -m reaver.run --env MoveToBeacon --agent a2c --test --render 2> stderr.log
Zum Online-Ausprobieren von Reaver steht ein begleitendes Google Colab-Notizbuch zur Verfügung.
Viele moderne DRL-Algorithmen basieren auf der gleichzeitigen Ausführung in mehreren Umgebungen. Da Python über GIL verfügt, muss diese Funktion durch Multiprocessing implementiert werden. Die meisten Open-Source-Implementierungen lösen diese Aufgabe mit einem nachrichtenbasierten Ansatz (z. B. Python multiprocessing.Pipe
oder MPI
), bei dem einzelne Prozesse kommunizieren, indem sie Daten über IPC senden. Dies ist ein gültiger und höchstwahrscheinlich einzig sinnvoller Ansatz für groß angelegte verteilte Ansätze, mit denen Unternehmen wie DeepMind und openAI arbeiten.
Für einen typischen Forscher oder Bastler ist es jedoch weitaus häufiger, dass er nur Zugriff auf eine einzige Maschinenumgebung hat, sei es ein Laptop oder ein Knoten in einem HPC-Cluster. Reaver ist speziell für diesen Fall optimiert, indem es gemeinsam genutzten Speicher sperrenfrei nutzt. Dieser Ansatz führt zu einer erheblichen Leistungssteigerung von bis zu 1,5-facher Geschwindigkeitssteigerung bei der StarCraft II-Abtastrate (und bis zu 100-facher Beschleunigung im Allgemeinen), wobei der Engpass fast ausschließlich durch die GPU-Eingabe-/Ausgabe-Pipeline verursacht wird.
Die drei Kernmodule von Reaver – envs
, models
und agents
sind fast vollständig voneinander getrennt. Dadurch wird sichergestellt, dass die Erweiterung der Funktionalität in einem Modul nahtlos in die anderen integriert wird.
Die gesamte Konfiguration wird über gin-config verwaltet und kann problemlos als .gin
Dateien geteilt werden. Dazu gehören alle Hyperparameter, Umgebungsargumente und Modelldefinitionen.
Beim Experimentieren mit neuartigen Ideen ist es wichtig, schnell Feedback zu erhalten, was bei komplexen Umgebungen wie StarCraft II oft nicht realistisch ist. Da Reaver mit einer modularen Architektur erstellt wurde, sind seine Agentenimplementierungen überhaupt nicht an StarCraft II gebunden. Sie können viele beliebte Spielumgebungen (z. B. openAI gym
) direkt ersetzen und zunächst überprüfen, ob die Implementierungen mit diesen funktionieren:
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 )
Derzeit werden die folgenden Umgebungen von Reaver unterstützt:
CartPole-v0
)PongNoFrameskip-v0
)InvertedPendulum-v2
und HalfCheetah-v2
) Karte | Reaver (A2C) | DeepMind SC2LE | DeepMind ReDRL | Menschlicher Experte |
---|---|---|---|---|
MoveToBeacon | 26,3 (1,8) [21, 31] | 26 | 27 | 28 |
Sammle Mineraliensplitter | 102,8 (10,8) [81, 135] | 103 | 196 | 177 |
Besiege Kakerlaken | 72,5 (43,5) [21, 283] | 100 | 303 | 215 |
FindAndDefeatZerglings | 22,1 (3,6) [12, 40] | 45 | 62 | 61 |
Besiege ZerglingsAndBanelings | 56,8 (20,8) [21, 154] | 62 | 736 | 727 |
Sammeln Sie Mineralien und Gas | 2267,5 (488,8) [0, 3320] | 3.978 | 5.055 | 7.566 |
BuildMarines | -- | 3 | 123 | 133 |
Human Expert
wurden von DeepMind von einem Spieler der GrandMaster-Stufe gesammelt.DeepMind ReDRL
bezieht sich auf aktuelle, hochmoderne Ergebnisse, die im Artikel „Relational Deep Reinforcement Learning“ beschrieben werden.DeepMind SC2LE
sind Ergebnisse, die im Artikel StarCraft II: A New Challenge for Reinforcement Learning veröffentlicht wurden.Reaver (A2C)
handelt es sich um Ergebnisse, die durch das Training des Agenten reaver.agents.A2C
gesammelt wurden und SC2LE
-Architektur so genau wie möglich auf verfügbarer Hardware replizieren. Die Ergebnisse werden gesammelt, indem der geschulte Agent 100
Episoden lang im --test
Modus ausgeführt wird und die Gesamtbelohnungen der Episoden berechnet werden. Aufgeführt sind der Mittelwert, die Standardabweichung (in Klammern) sowie die Mindest- und Höchstwerte (in eckigen Klammern).Karte | Proben | Episoden | Ca. Zeit (Std.) |
---|---|---|---|
MoveToBeacon | 563.200 | 2.304 | 0,5 |
Sammle Mineraliensplitter | 74.752.000 | 311.426 | 50 |
Besiege Kakerlaken | 172.800.000 | 1.609.211 | 150 |
FindAndDefeatZerglings | 29.760.000 | 89.654 | 20 |
Besiege ZerglingsAndBanelings | 10.496.000 | 273.463 | 15 |
Sammeln Sie Mineralien und Gas | 16.864.000 | 20.544 | 10 |
BuildMarines | - | - | - |
Samples
beziehen sich auf die Gesamtzahl der observe -> step -> reward
in einer Umgebung.Episodes
beziehen sich auf die Gesamtzahl der von PySC2 zurückgegebenen StepType.LAST
Flags.Approx. Time
ist die ungefähre Trainingszeit auf einem laptop
mit Intel i5-7300HQ
-CPU (4 Kerne) und GTX 1050
GPU. Beachten Sie, dass ich nicht viel Zeit in die Optimierung der Hyperparameter gesteckt habe und mich hauptsächlich darauf konzentriert habe, zu überprüfen, ob der Agent lernfähig ist, und nicht auf die Maximierung der Probeneffizienz. Zum Beispiel erforderte der naive erste Versuch mit MoveToBeacon
etwa 4 Millionen Samples, aber nach einigem Herumprobieren konnte ich es mit dem PPO-Agenten bis auf 102.000 (ca. 40-fache Reduzierung) reduzieren.
Mittlere Episodenbelohnungen mit dazwischen ausgefülltem std.dev. Zum Vergrößern anklicken.
Eine Videoaufzeichnung der Leistung des Agenten bei allen sechs Minispielen ist online verfügbar unter: https://youtu.be/gEyBzcPU5-w. Im Video links ist der Agent zu sehen, der mit zufällig initialisierten Gewichten und ohne Training agiert, während er rechts darauf trainiert ist, Zielwerte zu erreichen.
Das Problem der Reproduzierbarkeit der Forschung ist in letzter Zeit Gegenstand zahlreicher Debatten in der Wissenschaft im Allgemeinen geworden, und Reinforcement Learning bildet da keine Ausnahme. Eines der Ziele von Reaver als wissenschaftlichem Projekt besteht darin, reproduzierbare Forschung zu ermöglichen. Zu diesem Zweck wird Reaver mit verschiedenen Tools geliefert, die den Prozess vereinfachen:
Um bei der Reproduzierbarkeit eine Vorreiterrolle zu übernehmen, ist Reaver mit vortrainierten Gewichten und vollständigen Tensorboard-Zusammenfassungsprotokollen für alle sechs Minispiele ausgestattet. Laden Sie einfach ein Experimentarchiv von der Registerkarte „Releases“ herunter und entpacken Sie es in das Verzeichnis results/
“.
Sie können vorab trainierte Gewichtungen verwenden, indem Sie das Flag --experiment
an den Befehl reaver.run
anhängen:
python reaver.run --map <map_name> --experiment <map_name>_reaver --test 2> stderr.log
Tensorboard-Protokolle sind verfügbar, wenn Sie tensorboard --logidr=results/summaries
starten.
Sie können sie auch direkt online über Aughie Boards ansehen.
Reaver ist eine ganz besondere und subjektiv niedliche Protoss-Einheit im StarCraft-Spieluniversum. In der StarCraft: Brood War-Version des Spiels war Reaver dafür berüchtigt, langsam, ungeschickt und aufgrund der fehlerhaften KI im Spiel oft nutzlos zu sein, wenn man es alleine ließ. Doch in den Händen engagierter Spieler, die Zeit in die Beherrschung der Einheit investierten, wurde Reaver zu einem der mächtigsten Aktivposten im Spiel und spielte oft eine Schlüsselrolle bei Turniergewinnspielen.
Ein Vorgänger von Reaver, einfach pysc2-rl-agent
genannt, wurde als praktischer Teil einer Bachelorarbeit an der Universität Tartu unter der Aufsicht von Ilya Kuzovkin und Tambet Matiisen entwickelt. Sie können weiterhin über den Zweig v1.0 darauf zugreifen.
Wenn Sie auf ein Problem mit der Codebasis stoßen, öffnen Sie bitte ein Ticket auf GitHub und beschreiben Sie es so detailliert wie möglich. Wenn Sie allgemeinere Fragen haben oder einfach Rat suchen, schreiben Sie mir gerne eine E-Mail.
Ich bin auch stolzes Mitglied einer aktiven und freundlichen SC2AI-Online-Community. Für die Kommunikation nutzen wir hauptsächlich Discord. Menschen mit unterschiedlichem Hintergrund und Fachwissen sind herzlich willkommen!
Wenn Sie Reaver für Ihre Recherche nützlich fanden, denken Sie bitte darüber nach, es mit dem folgenden Bibtex zu zitieren:
@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}},
}