Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)

时间:2022-10-21 12:32:08

http://lib.csdn.net/article/aimachinelearning/68113

原文地址:http://blog.csdn.net/jinzhuojun/article/details/77144590

和其它的机器学习方向一样,强化学习(Reinforcement Learning)也有一些经典的实验场景,像Mountain-Car,Cart-Pole等。话说很久以前,因为没有统一的开发测试平台,大家都会自己实现,有用C/C++的,有用Python,还有用Matlab的。所以大家论文中看到的场景虽然相似,但很多时候不完全一样。这样一方面重新造*,另一方面还有可能因为实验环境的差别影响结果的比较。于是后面大家渐渐开始建立统一的实验平台,另一方面,由于近年来深度强化学习(Deep Reinforcement Learning)的兴起,各种新的更复杂的实验场景也在不断涌现。于是出现了OpenAI Gym,MuJoCo,rllab, DeepMind Lab, TORCS, PySC2等一系列优秀的平台。你会在大量的强化学习相关论文中看到它们的身影。下面就简单介绍下这些平台在Ubuntu下的搭建过程。关于一些基础环境(如Cuda, Anaconda, TensorFlow)的搭建可参考前面的文章:http://blog.csdn.net/jinzhuojun/article/details/77140806。

MuJoCo

MuJoCo(Multi-Joint dynamics with Contact)是一个物理模拟器,可以用于机器人控制优化等研究。官方网站为http://www.mujoco.org/index.html。最新版本为1.50。下载地址为https://www.roboti.us/index.html。如果是Linux系统可以点mjpro150 linux。下载完成后解压到~/.mujoco下。注意要用是需要license的,可以在https://www.roboti.us/license.html上申请试用版30天免费license。先下载网站上提供的getid_linux,加执行权限在本地运行得到机器id连同其它信息填到申请页面,提交后会收到邮件包含key文件mjkey.txt。下载key文件后,放到~/.mujoco目录下。之后可以运行解压目录下bin里的simulate试下是否正常(需要将key文件也拷到simulate同级目录)。运行后将model目录下的模型拖入窗口,会看到类似下面的输出:
Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)
OpenAI对MuJoCo引擎做了Python 3的binding-mujoco-py,源码位于https://github.com/openai/mujoco-py。按readme中你可以通过下面命令安装:

pip3 install -U 'mujoco-py<1.50.2,>=1.50.1'

如果安装过程中出现下面这种错误:
sh: 2: Syntax error: "(" unexpected
       ERROR: Invalid activation key
你可以下载源码安装:

git clone https://github.com/openai/mujoco-py
cd mujoco-py
pip install -e . --no-cache

然后运行下readme中的例子看是否运行正常。

OpenAI Gym

OpenAI Gym是OpenAI出的研究强化学习算法的toolkit,它里边cover的场景非常多,从经典的Cart-Pole, Mountain-Car到Atar,Go,MuJoCo都有。官方网站为https://gym.openai.com/,源码位于https://github.com/openai/gym,它的readme提供了安装和运行示例,按其中的安装方法:
最小安装:

git clone https://github.com/openai/gym.git
cd gym
pip install -e .

完全安装:

apt-get install -y python-numpy python-dev cmake zlib1g-dev libjpeg-dev xvfb libav-tools xorg-dev python-opengl libboost-all-dev libsdl2-dev swig Pillow  libglfw3-dev
pip install -e '.[all]'

然后可以跑readme中的例子,如SpaceInvaders, Go, LunarLander, CarPole, MuJoCo等等:

Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)        Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)

Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)

通过源码下的examples/scripts/list_envs可以列出所有支持的场景。

如果装了Anaconda,过程中出现下面错误的话:
OSError: /home/jzj/anaconda2/envs/py35/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /home/jzj/anaconda2/envs/py35/lib/python3.5/site-packages/atari_py/ale_interface/build/libale_c.so)
可以通过在Anaconda环境中安装libgcc解决:

conda install libgcc

如果在运行依赖Box2d引擎的sample时出现下面错误:
AttributeError: module 'Box2D._Box2D' has no attribute 'RAND_LIMIT'
可以先uninstall已有版本(如有),然后安装pybox2d:

pip uninstall Box2D-kengz
git clone https://github.com/pybox2d/pybox2d.git
cd pybox2d
python setup.py clean
python setup.py install

Gym中也可以通过mujoco-py集成MuJoCo。如果出现下面错误,说明mujoco-py版本不对。目前Gym中支持MuJoCo 1.31和mujoco-py 0.5。按前面说明装上相应版本后即可。
DependencyNotInstalled: No module named 'mujoco_py.mjlib'. (HINT: you need to install mujoco_py, and also perform the setup instructions here: https://github.com/openai/mujoco-py/.)

rllab

和OpenAI Gym类似,rllab也是一个研究强化学习算法的框架。官方网站为https://github.com/openai/rllab。官方支持python 3.5+,基于Theano。与OpenAI Gym的区别在于OpenAI Gym支持更广泛的环境,且提供在线的scoreboard可以用于共享训练结果。rllab自己也提供一个基于pygame的可视环境,同时它也可兼容OpenAI Gym。除此之外,它提供了一些强化学习算法的实现,这些参考实现和一些组件可以使得强化学习算法的开发更快上手。安装步骤可按照官方网站:https://rllab.readthedocs.io/en/latest/user/installation.html。

export PYTHONPATH=path_to_rllab:$PYTHONPATH
./scripts/setup_linux.sh

如果要想要在rllab中用MuJoCo的话再用下面脚本安装。

./scripts/setup_mujoco.sh

rllab使用的是mujoco 1.31版本,这个脚本里会让指定相应的mujoco包和license key文件。以上安装脚本中会创建Anaconda环境,名为rllab3。通过下面命令进入环境:

source activate rllab3

然后就可以运行例子了。比如用TRPO算法训练Cart-Pole场景的话,运行:

python examples/trpo_gym_cartpole.py

这些sample中默认是无UI的,如果要有UI,可以搜索其中的plot=True,将之反注释即可。

Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)

如果你很和我一样穷,用的是贫民版GPU,加速时分不出memory的话:
RuntimeError: Cuda error: kernel_reduce_ccontig_node_m28488bfe450723ef20f18edd8e611eb0_0: out of memory. (grid: 1 x 1; block: 256 x 1 x 1)
可以退一步让Theano用纯CPU跑:

export THEANO_FLAGS=device=cpu

DeepMind Lab

DeepMind Lab(原Labyrinth)是由DeepMind发布的3D迷宫场景强化学习平台。之前是DeepMind内部使用的,后来开源了。官方介绍https://deepmind.com/blog/open-sourcing-deepmind-lab/。论文 https://arxiv.org/pdf/1612.03801.pdf。源码位于https://github.com/deepmind/lab。
最好在Python 2.7环境下编译运行。比如用Anaconda创建Python 2.7环境并进入:

conda create --name py27 python=2.7
source activate py27

然后按官方readme中的说明(https://github.com/deepmind/lab/blob/master/docs/build.md)安装。由于编译是基于bazel,所以需要先安装bazel。

sudo apt-get install lua5.1 liblua5.1-0-dev libffi-dev gettext freeglut3-dev libsdl2-dev libosmesa6-dev python-dev python-numpy realpath
git clone https://github.com/deepmind/lab
cd lab
bazel build :deepmind_lab.so --define headless=glx
bazel run :python_module_test --define headless=glx

如果在Anaconda环境中,有可能碰到下面错误:
ImportError: cannot import name multiarray
表面上是缺少numpy,可以先看下numpy有没有装,没有的话可以用conda install numpy安装。如果装了有可能是串到~/.local或者/usr/lib/下的python package了(可以通过python -c "import sys; from pprint import pprint as p; p(sys.path)"检查)。简单点的方法就是将除了Anaconda环境下的numpy删除。

sudo apt-get remove python-numpy
sudo ~/.local/bin/pip2.7 uninstall numpy

接下来,按readme说明,通过下面命令可以分别跑agent玩家和人类玩家的迷宫场景:

bazel run :random_agent --define headless=false --  --length=10000 --width=640 --height=480
bazel run :game -- --level_script tests/demo_map

Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)

然后通过python api(https://github.com/deepmind/lab/blob/master/docs/python_api.md)就可以让强化学习算法利用该环境进行训练了。

TORCS

TORCS(The Open Racing Car Simulator)是一个跨平台的赛车游戏模拟器,也可作为强化学习的研究平台。官方网站:http://torcs.sourceforge.net/。但我们不需直接从官网下。gym_torcs是一个TORCS的强化学习环境,提供类似前面OpenAI Gym的接口,网站为https://github.com/ugo-nama-kun/gym_torcs。

假设已安装了上面提到的OpenAI Gym。还需要安装依赖:

sudo apt-get install xautomation

官方声明依赖Python 3.5,那就进入Python 3的环境(假设已创建Python 3.5的Anaconda环境py35):

source activate py35

然后用conda install numpy安装numpy。
下载源码:

git clone https://github.com/ugo-nama-kun/gym_torcs.git

然后进入其vtorcs-RL-color子目录,按其中readme编译安装定制版torcs。安装完了运行torcs命令就能看到界面了。注意按readme说明需要进行一些设置,如赛道以及分辨率,因为实现中只支持64x64分辨率。运行示例代码可以跑一个随机选取动作的agent。

python example_experiment.py 

Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)
ps:截图还是用了默认分辨率,因为64x64太小看不清。

Readme中的Simple How-To示例了如何在Python中与该环境交互,然后就可以开发测试强化学习算法了。网上有个实现DDPG算法的例子可以参考:https://yanpanlau.github.io/2016/10/11/Torcs-Keras.html

PySC2(StarCraft II)

DeepMind的AlphaGo把围棋搞定之后,业界开始把目光投向即时策略游戏,如StarCraft II(星际争霸II)。最近DeepMind和Blizzard合作出了个StarCraft II的研究平台,称为PySC2。介绍网站:https://deepmind.com/blog/deepmind-and-blizzard-open-starcraft-ii-ai-research-environment/。论文:https://deepmind.com/documents/110/sc2le.pdf。PySC2是基于Blizzard的StarCraft II Machine Learning API(https://github.com/Blizzard/s2client-proto)的Python下强化学习环境。源码位于:https://github.com/deepmind/pysc2 。

按照readme最简单的安装方法就是:

pip install pysc2

然后需要根据https://github.com/Blizzard/s2client-proto中readme说明安装StarCraft II的环境。主要那几个包都比较大,下载要些时间,下载完成后按readme中解压到指定path下即可。然后就可以测试下了。按readme用以下命令可以分别起agent玩家和人类玩家的环境:

python -m pysc2.bin.agent --map Simple64
python -m pysc2.bin.play --map Simple64

Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)

OpenAI Baselines

严格来说它本身不是一个开发环境。它是OpenAI出的一些深度强化学习算法(DQN, PPO, TRPO, DDPG)的实现,基于TensorFlow和OpenAI Gym,最新版需要Python 3。源码位于:https://github.com/openai/baselines。
按readme中使用下面命令安装:

pip install baselines

或者用源码中的setup.py安装:

git clone https://github.com/openai/baselines
cd baselines
python setup.py install

除了列出来的依赖,还可能依赖下面的库,使用conda或pip安装:

conda install Pillow atari-py

另外如果用GPU加速但不幸碰到memory分不出的情况(CUDA_OUT_OF_MEMORY),可以强制TensorFlow使用CPU:

export CUDA_VISIBLE_DEVICES=""