Arriba: resultados en LunarLander-v2 después de 60 segundos de entrenamiento en mi computadora portátil
CppRl es un marco de aprendizaje por refuerzo, escrito utilizando la interfaz PyTorch C++.
Está muy basado en el maravilloso pytorch-a2c-ppo-acktr-gail de Ikostrikov. Incluso podrías considerar esto como un puerto. La API y los algoritmos subyacentes son casi idénticos (con los cambios necesarios involucrados en el cambio a C++).
También contiene una implementación de un servidor OpenAI Gym simple que se comunica a través de ZeroMQ para probar el marco en entornos de gimnasio.
CppRl pretende ser un marco extensible, razonablemente optimizado y listo para producción para utilizar el aprendizaje por refuerzo en proyectos donde Python no es viable. Debería estar listo para usarse en aplicaciones de escritorio en las computadoras de los usuarios con una configuración mínima requerida por parte del usuario.
Al momento de escribir este artículo, no existen marcos de aprendizaje por refuerzo de uso general para C++. Necesitaba uno para un proyecto personal y la interfaz PyTorch C++ se había lanzado recientemente, así que pensé que debería crear uno.
En el example
se proporciona un ejemplo que utiliza el servidor OpenAI Gym incluido. Se puede ejecutar de la siguiente manera: Terminal 1:
./launch_gym_server.py
Terminal 2:
build/example/gym_server
Se necesitan unos 60 segundos para capacitar a un agente para obtener una recompensa promedio de 200 en mi computadora portátil (procesador i7-8550U).
El entorno y los hiperparámetros se pueden configurar en example/gym_client.cpp
.
Nota: El servidor y el cliente de Gym no están muy bien optimizados, especialmente cuando se trata de entornos con observación de imágenes. Se necesitan algunas copias adicionales mediante el uso de un sistema de comunicación entre procesos, y luego gym_client.cpp
tiene una o dos copias adicionales para convertir las observaciones en tensores de PyTorch. Es por eso que el rendimiento no es tan bueno en comparación con las bibliotecas de Python que ejecutan entornos Gym.
CMake se utiliza para el sistema de compilación. La mayoría de las dependencias se incluyen como submódulos (ejecute git submodule update --init --recursive
para obtenerlas). Libtorch debe instalarse por separado.
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
Antes de ejecutar, asegúrese de agregar libtorch/lib
a su variable de entorno PATH
.
El rendimiento de Windows es aproximadamente el 75% del de Linux en este momento. Estoy investigando cómo acelerar las cosas.
Puede ejecutar las pruebas con build/cpprl_tests
( build/Release/cpprl_tests.exe
en Windows).