Oben: Ergebnisse auf LunarLander-v2 nach 60 Sekunden Training auf meinem Laptop
CppRl ist ein Reinforcement-Learning-Framework, das mit dem PyTorch C++-Frontend geschrieben wurde.
Es basiert sehr stark auf Ikostrikovs wunderbarem pytorch-a2c-ppo-acktr-gail. Man könnte dies sogar als Hafen betrachten. Die API und die zugrunde liegenden Algorithmen sind nahezu identisch (mit den notwendigen Änderungen im Zusammenhang mit der Umstellung auf C++).
Es enthält auch eine Implementierung eines einfachen OpenAI Gym-Servers, der über ZeroMQ kommuniziert, um das Framework in Gym-Umgebungen zu testen.
CppRl soll ein erweiterbares, einigermaßen optimiertes und produktionsbereites Framework für den Einsatz von Reinforcement Learning in Projekten sein, in denen Python nicht realisierbar ist. Es sollte für den Einsatz in Desktop-Anwendungen auf den Computern des Benutzers bereit sein und nur minimale Einrichtungsschritte seitens des Benutzers erfordern.
Zum Zeitpunkt des Verfassens dieses Artikels gibt es keine allgemein verwendbaren Reinforcement-Learning-Frameworks für C++. Ich brauchte eines für ein persönliches Projekt und das PyTorch C++-Frontend war kürzlich veröffentlicht worden, also dachte ich, ich sollte eines machen.
Ein Beispiel, das den mitgelieferten OpenAI Gym-Server verwendet, finden Sie in example
. Es kann wie folgt ausgeführt werden: Terminal 1:
./launch_gym_server.py
Terminal 2:
build/example/gym_server
Es dauert etwa 60 Sekunden, einen Agenten auf meinem Laptop (i7-8550U-Prozessor) auf eine durchschnittliche Belohnung von 200 zu trainieren.
Die Umgebung und die Hyperparameter können in example/gym_client.cpp
festgelegt werden.
Hinweis: Der Gym-Server und der Gym-Client sind nicht besonders gut optimiert, insbesondere wenn es um Umgebungen mit Bildbeobachtungen geht. Durch die Verwendung eines prozessübergreifenden Kommunikationssystems sind einige zusätzliche Kopien erforderlich, und dann verfügt gym_client.cpp
über ein oder zwei zusätzliche Kopien, um die Beobachtungen in PyTorch-Tensoren umzuwandeln. Aus diesem Grund ist die Leistung im Vergleich zu Python-Bibliotheken, die Gym-Umgebungen ausführen, nicht so gut.
CMake wird für das Build-System verwendet. Die meisten Abhängigkeiten sind als Submodule enthalten (führen Sie git submodule update --init --recursive
aus, um sie abzurufen). Libtorch muss separat installiert werden.
cd pytorch-cpp-rl
mkdir build && cd build
cmake ..
make -j4
cd pytorch-cpp-rl
mkdir build && cd build
cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_PREFIX_PATH=C:/path/to/libtorch ..
cmake --build . --config Release
Stellen Sie vor der Ausführung sicher, dass Sie libtorch/lib
zu Ihrer PATH
Umgebungsvariablen hinzufügen.
Die Leistung von Windows beträgt derzeit etwa 75 % der Leistung von Linux. Ich überlege, wie ich die Dinge beschleunigen kann.
Sie können die Tests mit build/cpprl_tests
( build/Release/cpprl_tests.exe
unter Windows) ausführen.