【代码】D4RL安装全流程

0.前言

D4RL作为Offline RL必备benchmark,重要性无需多言。之前在Windows系统上安装过,一路“顺利”配到最后,没想到import d4rl报错,且报错问题古怪,遂放弃。 思来想去还是转战Linux,果然一次成功,欣喜之余记录之。
非常感谢这份知乎教程,提供了所有我遇到的坑的解决方案。

1.Requirements

包名 版本
python 3.7
mujoco 210
mujoco-py 2.1.2.14
dm-control 1.0.11
gym 0.23.1
d4rl 1.1
pygame* 2.2.0

上述包除了python在创建conda虚拟环境时主动指定了版本,其余包版本均自动安装。

*pygame是为了运行经典环境如cart-pole额外安装的,与d4rl无直接关联。但默认安装的pygame版本过高,Ubuntu自动提示了2.2.0是合适的。

2.创建conda虚拟环境

由于是第一次在Ubuntu上安装Anaconda,全流程记录如下。

2.1.安装Anaconda

在Anaconda官网下在Linux版的安装包,在终端中进入安装包所在位置,执行bash安装。

1
bash Anaconda3-xxxx-Linux-x86_64.sh

同意协议,指定安装位置/home/xxx/anaconda3/,若不指定则是Anaconda设定的默认路径,安装后允许初始化,从而自动设置环境变量。

不要忘记执行source ~/.bashrc,否则环境变量不生效。

2.2.创建虚拟环境

1
2
conda create -n d4rl_env python=3.7   # 在终端当前路径下新建环境
conda create --prefix="路径名\环境名" python=3.7 # 在指定路径下新建环境

2.3.conda常用初始化

1
2
3
4
5
sudo apt install jupyter notebook   # 安装Jupyter Notebook
jupyter notebook --generate-config # 若需要配置 配置文件默认在~/.jupyter/jupyter_notebook_config.py
conda install ipykernel
python -m ipykernel install --user --name xxx --display-name xxx # 注册kernel
jupyter notebook # 启动服务
1
jupyter kernelspec remove xxx   # 解绑kernel

3.安装mujoco210

在Mujoco的Github仓库中下载mujoco210-linux-x86_64.tar.gz,然后重命名、解压如下:

1
2
3
4
5
cd ~/下载   # 进入压缩包所在目录
mv mujoco210-linux-x86_64.tar.gz mujoco210 # 重命名
tar -zxvf mujoco210-linux-x86_64.tar.gz # 解压
mkdir ~/.mujoco # 新建文件夹
cp -r mujoco210 ~/.mujoco # 将解压后的文件复制过去

添加环境变量如下:

1
2
3
4
sudo gedit ~/.bashrc   # 打开设置文件
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/.mujoco/mujoco210/bin
export MUJOCO_KEY_PATH=~/.mujoco${MUJOCO_KEY_PATH}
source ~/.bashrc # 执行更新

测试是否安装正确,弹出mujoco GUI,初始化了一个木偶人:

1
2
cd ~/.mujoco/mujoco210/bin/
./simulate ../model/humanoid.xml

4.安装mujoco_py

4.1.安装gcc

首先,全局安装gcc

1
2
sudo apt update   # 更新包索引或包列表(并非upgrade会直接升级包到最新版本)
sudo apt install gcc # 安装gcc

由于未全局安装gcc导致卡住很久。在conda环境下输入python进入python环境,终端显示了[GCC 9.4.0] on linux,以为已经默认安装过了,然而import mujoco_py时显示未找到gcc文件导致无法编译。直到全局安装才解决问题。

博文解释说gcc9版本过高导致不兼容,全局安装的gcc最好是7.5.0版本的。

4.2.安装mujoco_py(坑)

接着,在conda环境下安装mujoco_py包:

1
2
3
pip install mujoco_py
python # 进入python环境
>>> import mujoco_py # 大概率会报错

确保gcc安装完成后,依然会报错,但此时报错会明确给出编译出错的原因,例如:fatal error: GL/osmesa.h,说明需要额外安装包。亲测踩坑如下:

1
2
3
4
5
6
7
8
9
# fatal error: GL/osmesa.h 需安装:
sudo apt install libosmesa6-dev
sudo apt install libgl1-mesa-glx libosmesa6

# fatal error: GL/glew.h: No such file or directory 需安装:
sudo apt install libglew-dev glew-utils

# FileNotFoundError: [Errno 2] No such file or directory: 'patchelf': 'patchelf' 需安装:
sudo apt -y install patchelf

再次进入python环境并import mujoco_py就不会报错了,代表安装成功。

5.安装dm_control

最轻松的一步,在conda环境下安装dm_control:

1
pip install dm_control

6.克隆并安装d4rl

6.1.配置git

新环境还没有git,先下载git并初始化。

1
2
3
4
5
sudo apt install git   # 下载git
git config --list # 查看git配置 文件默认在~/.gitconfig
git config --global user.name Github用户名
git config --global user.email Github账户邮箱
ssh-keygen -t rsa -C "Github账户邮箱" # 生成密钥公钥

打开~/.ssh/id_rsa.pub,复制密钥,到Github上的setting中新建SSH。

1
ssh git@github.com   # 测试能否连通 出现Successfully即可

6.2.克隆仓库

现在可以clone d4rl仓库了,进入存放git文件的自定义目录下,执行clone命令:

1
git clone https://github.com/rail-berkeley/d4rl.git

网络不好可以多试几次(虚拟机科学上网也行),找到d4rl目录下的setup.py文件,注释掉install_requires下的mujoco_py和dm_control,因为前面我们已经自行安装完毕了。

最后,在conda环境下,且在clone的d4rl文件目录下,执行安装命令:

1
pip install -e .

7.测试验证

进入jupyter notebook(其实在终端进入python环境也行),测试环境是否可用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import gym
import d4rl

env = gym.make('maze2d-umaze-v1')
env.reset()
env.step(env.action_space.sample())
>>> Out[x]: (array([ 2.9686984 , 0.91059711, 0.01391173, -0.3282065 ]), 0.0, False, {})

dataset = env.get_dataset()
print(dataset['observations'])
>>> Out[x]: Downloading dataset: http://rail.eecs.berkeley.edu/datasets/offline_rl/maze2d/maze2d-umaze-sparse-v1.hdf5 to /home/jason/.d4rl/datasets/maze2d-umaze-sparse-v1.hdf5
load datafile: 100%|██████████| 8/8 [00:00<00:00, 28.63it/s]
[[ 1.0856489 1.9745734 0.00981035 0.02174424]
[ 1.0843927 1.97413 -0.12562364 -0.04433781]
[ 1.0807577 1.9752754 -0.3634883 0.11453988]
...
[ 1.1328583 2.8062387 -4.484303 0.09555068]
[ 1.0883482 2.8068895 -4.4510083 0.06509537]
[ 1.0463258 2.8074222 -4.202244 0.05324839]]

大功告成!

8.其他操作

为避免“纯净”的d4rl_env被误操作污染,复制一份pure_d4rl虚拟环境。

1
2
conda create -n pure_d4rl --clone d4rl_env

若环境配坏了,需删除conda环境。

1
conda remove -n xxx --all

【代码】D4RL安装全流程
https://jasonzhujp.github.io/2023/04/06/coding-d4rl-install/
作者
Jason Zhu
发布于
2023年4月6日
许可协议