Ubuntu20.04配置DRLoco
引言
DRLoco是DeepMimic在pytorch上的版本,相当于DeepMimic的简化版,对理解强化学习和PPO算法很有帮助
github源码地址详见https://github.com/rgalljamov/DRLoco
安装和说明文档详见https://drloco.readthedocs.io/en/latest/
本文将按照说明文档的步骤配置环境并运行该项目,虽然说明文档已经写得比较详细,但是在配置过程中依然出现了不少问题,所以这里依据我配置的步骤做一个整理。
安装Anconda
因为我之前配置其它环境已经安装好了,所以在这里就不再赘述
创建虚拟环境
创建并激活名为drloco的虚拟环境
conda create -n drloco python=3.7
conda activate drloco
在虚拟环境中安装pytorch
需要安装对应cuda版本的pytorch
运行命令
nvidia-smi
可以查看显卡驱动的版本:
显示的cuda版本一般是最适合显卡驱动的版本,我装的cuda是最适合的版本,所以依照显示的结果在pytorch官网上找到对应的pytorch版本。
由于pytorch官网上没有对应的cuda11.4的版本,查阅资料并测试后发现,对应cuda11.3的pytorch1.10.1可以使用1,所以运行以下命令:
conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=11.3 -c pytorch -c conda-forge
等待一段时间之后,即可安装完成
安装MuJoCo和mujoco-py
mujoco的安装过程非常简单,即下载,解压,添加环境变量3步,可以参考其它教程,很容易就可以完成,接下来重点记录mujoco-py的安装,此为mujoco-py的官方网址
输入命令:
$ pip3 install -U 'mujoco-py<2.2,>=2.1'
等待一段时间后即可安装完成
安装Stable-Baselines 3
输入命令
pip install stable-baselines3[extra]
等待一段时间后即可安装完成,官方文档说这里可能报错,但我这里没报错,很顺利就安装完成了。
安装seaborn:
依次输入以下命令:
conda install seaborn
conda install -c conda-forge wandb
全程y,等待一段时间后即可安装完成
复制DRLoco源代码
从主页将源代码克隆下来
git clone https://github.com/rgalljamov/DRLoco.git
但上述命令只能克隆master分支,无法克隆剩下的分支,所以会导致无法进行后续步骤
输入以下命令克隆docs分支
- 进入克隆好的文件
cd /home/**/DRLoco
- 查看所有分支
git branch -a
发现有2个分支master和docs,而此时的分支为master
输入命令:
git checkout -b docs origin/docs
切换分支,之后可以进行以下的步骤
检查安装是否成功
打开DRLoco下的scripts文件夹,在该文件夹下运行run.py
python run.py
出现错误:ModuleNotFoundError: No module named 'gym'
安装gym包,输入命令
pip install gym
继续尝试运行run.py
,出现错误:Cython.Compiler.Errors.CompileError: /home/zl/anaconda3/envs/drloco/lib/python3.7/site-packages/mujoco_py/cymj.pyx
,查阅资料发现需要更换Cython版本,输入命令:
pip install Cython==3.0.0a10
尝试运行run.py
,出现错误:ModuleNotFoundError: No module named 'gym_mimic_envs'
,缺少名叫gym_mimic_envs
的包,这个包不是官方的包,发现在克隆的文件内部路径~/DRLoco/mujoco
有这个包,所以运行setup.py
文件进行安装,进入该文件,输入以下命令:
python setup.py install
尝试运行run.py
,出现错误:ModuleNotFoundError: No module named 'scripts'
,scripts这个包虽然可以通过pip命令安装,但是之前尝试过安装之后依然会发生错误,所以推测这里的缺少的包是文档本身的包,因此将scripts文件夹复制到缺少包的路径中/home/**/anaconda3/envs/drloco/lib/python3.7/site-packages
,再次尝试运行run.py
,出现错误:OSError: /home/zl/anaconda3/envs/drloco/lib/python3.7/site-packages/nvidia/cublas/lib/libcublas.so.11: undefined symbol: cublasLtGetStatusString, version libcublasLt.so.11
输入命令:
pip uninstall nvidia_cublas_cu11
再次尝试运行run.py
,出现错误:ModuleNotFoundError: No module named 'scipy'
,输入命令:pip install scipy
,尝试运行run.py
,出现错误:FileNotFoundError: [Errno 2] No such file or directory: '/home/zl/anaconda3/envs/drloco/lib/python3.7/site-packages/assets/mocaps/loco3d/loco3d_guoping.mat'
,找不到以上文件,进入虚拟环境相关路径发现从assest文件开始就没有了,而克隆的文件中恰好有assests文件,所以将assests文件复制到相关目录。再次尝试运行run.py
,出现错误:TypeError: __init__() missing 1 required positional argument: 'observation_space'
,查阅资料,发现导致这个问题的原因是gym版本过高,输入以下命令:
pip uninstall gym
pip install gym==0.14.0
再次尝试运行run.py
,出现错误:OSError: File /home/zl/anaconda3/envs/drloco/lib/python3.7/site-packages/gym_mimic_envs-0.5-py3.7.egg/gym_mimic_envs/mujoco/assets/walker_165cm_65kg.xml does not exist
,意思是缺少一个文件,打开相关路径:发现在/home/zl/anaconda3/envs/drloco/lib/python3.7/site-packages/gym_mimic_envs-0.5-py3.7.egg/gym_mimic_envs/mujoco
下没有assests文件,将/home/zl/DRLoco/mujoco/gym_mimic_envs/mujoco
下的assests文件复制到相关路径,再次尝试运行run.py
,得到了仿真结果:
在pycharm中得到结果
不想每次运行都要打开命令行,想在pycharm运行得到结果
在pycharm打开项目,设置编译器,运行run.py
,出现错误:
Exception:
Missing path to your environment variable.
Current values LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:/home/zl/.mujoco/mujoco210/bin
Please add following line to .bashrc:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia
输入grdit ~/.bashrc
,发现环境变量已经添加,问题应该是pycharm不能识别已经在系统中添加的环境变量,所以应该在pycharm中单独添加,点击pycharm右上角向下箭头,edit configuration,点击左上角加号,点击python,如下图所示:
scripts设置为当前路径,Working Direction设置为项目路径,编辑环境变量:
在下方的变量中可以找到名为LD_LIBRARY_PATH
的变量,发现已经添加了mujoco的路径,在变量值的后面加:$LD_LIBRARY_PATH:/usr/lib/nvidia
,两个同名变量之间用冒号隔开,运行run.py
,发现mujoco-py卡死且在terminal出现了以下错误:ERROR: GLEW initalization error: Missing GL version
,这个错误在官方文档中有提及,需要在环境变量文件中添加:export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libGLEW.so:/usr/lib/x86_64-linux-gnu/libGL.so
,但在文件中已经添加,且在命令行可以运行,所以是pycharm的原因。
依然在pycharm的环境变量处添加名为LD_PRELOAD
,值为/usr/lib/x86_64-linux-gnu/libGLEW.so:/usr/lib/x86_64-linux-gnu/libGL.so
的环境变量,便可以顺利通过pycharm运行出结果。