【强化学习】强化学习环境ISAAC GYM(二)-再探索(Docker + 4090)

全文1658字,预计阅读时间4分钟
原创 | 汪治堃
背景介绍
Isaac Gym是一款由NVIDIA在2021年开发的,用于强化学习研究的物理环境,当前仍然处于Preview Release的阶段 [1]。自从上一篇文章(强化学习环境ISAAC GYM初步入门)介绍Isaac Gym之后,它已经从Preview2 升级到 Preview4。虽然依旧还是Preview Release的阶段,但是框架结构已经改变了很多啦。这篇文章主要是向大家介绍一下改动的部分,同时进一步研究其环境相关内容。


ISAAC GYM Preview4 环境安装
ISAAC GYM Preview4的训练环境的框架主要由两部分组成,第一部分是环境构建(GYM Frame,也就是直接下载的部分),第二部分是训练算法(RL Frame,需要从Github上下载),链接如下所示:
GYM Frame
https://developer.nvidia.com/isaac-gym
RL Frame
https://github.com/NVIDIA-Omniverse/IsaacGymEnvs
当我们下载好了相关的文件后,这次我们采用Docker的方式对相关环境进行配置,关于Docker的作用与其特点,读者们可以参考以下文章[强化学习环境ISAAC GYM初步入门]。
本次安装使用的硬件环境是Nvidia 4090 和 i9-13900K,相关安装步骤如下所示:
1.首先安装Linux 20.04的系统,然后安装Nvidia的525版本驱动和Docker驱动,确保主机下Docker可以正常运行。
2.下载上面链接中的文件,分别解压,然后定位到下载的GYM Frame下的文件夹isaacgym中。将github中的RL Frame的文件夹IsaacGymEnvs放置在isaacgym目录下,方便后面进行文件夹映射。
3.接下来需要修改其中几个Docker配置参数,因此需要进入isaacgym/docker文件夹中,修改Dockerfile文件:1)因为我使用的4090显卡需要比较新的驱动版本,所以我们需要将首行加载旧显卡驱动版本的命令行修改为最新的驱动版本FROM nvcr.io/nvidia/pytorch:22.12-py3。
2)因为我操作中喜欢使用直接获得管理员权限,所以我会将其中创建用户的部分命令删除。
3)因为我期望使用Docker环境和Linux其他环境共同使用同一个文件而非独立环境,所以我也会将其中拷贝文件的部分删除。由于删除了其中的目录,环境自动安装部分的内容就需要我们后面再手动进行。
4.然后我们需要修改同一目录下的运行文件run.sh。Isaac gym环境需要使用图像进行显示,因此,我们只修改else后面的部分。
1)将我们想要共享的文件夹映射到docker环境中,即将-v /home/Username/Documents/IsaacGym:/isaacgym命令插入到docker run指令之后。其中,/home/Username/Documents/IsaacGym是下载的安装环境所在的目录,需要各位自行修改。
2)docker环境的名字在--name后面,可以修改为自己项目的名字,方便区别。
5. 最后,我们就可以在isaacgym文件夹内运行bash docker/build.sh来建立一个支持4090显卡配置环境的Isaac gym的image。然后我们运行bash docker/run.sh 0,其中0表示显示器的编号。
6. 然后我们打开docker环境,手动安装相关环境。由于我们前面没有建立用户,我们的命令行具有root权限,可以直接运行pip等指令。
1)定位到共享文件夹中的isaacgym/python目录下,运行pip install -q -e . 。
2)定位到第2步中的RL Frame的文件夹IsaacGymEnvs中,运行pip install -q -e .。
至此,我们就完成了Isaac Gym相关文件和系统的安装。我们可以到isaacgym/pyhton/examples文件夹内运行相关指令查看简单的环境,具体指令可参考前文[强化学习环境ISAAC GYM初步入门]。
环境运行与修改
因为当前RL Frame使用了全新的框架,所以之前的训练命令不再适用。基本的训练可以使用pyhton train.py task = Taskname的方式,新框架下多个指令也可以叠加使用。常用的几个指令如下所示:

如果当前指令与的配置文件的值冲突,程序会以当前命令行的指令为准。
注意:一条完整指令中间不可以有空格,不同指令之间需要留空格。
当前的Isaac Gym与之前的Preview2版本在环境编写上存在一些区别,因此可以参考Github的docs中的framework文件进行修改,几个重要地点如下所示:
1. 将原有的task class中的VecTask修改为BaseTask。
2. 将原有的reset函数修改为为reset_idx()函数。
3. Task下的___init__()函数和super().___init__()现在修改了输入的参数数量。
4. 原来的模型和材质文件被整合到了isaacgym/assets/目录下。
5. 新的训练和环境配置文件被放在了上文提到的RL Frame下的isaacgymenvs/cfg文件夹中,环境需要同时训练参数和环境参数文件。
6. 需要在tasks文件夹中的___init__.py文件内添加新创建的环境信息。
由于版本的区别,其中很多很好用的函数被改写,部分无法使用,同时也不再提供一个完整的函数参考目录。因此尽管GitHub项目中说可以无缝迁移,但我依旧碰到了部分函数不存在的报错,可以说有一些遗憾了。
结论与展望
Nvidia开发的Isaac Gym环境现在已经不再是一个小众的平台,由于其具有良好的环境计算能力,越来越多的使用者都在尝试使用它来开发机器人与强化学习相关的内容(比如ANYmal)。希望未来,它能够更加的易于开发,更加兼容不同的环境需求,可以提供帮助我们实现 Sim to Real。
参考资料
[1] Viktor Makoviychuk, Lukasz Wawrzyniak, Yunrong Guo, Michelle Lu, Kier Storey, Miles Macklin, David Hoeller, Nikita Rudin, Arthur Allshire, Ankur Handa and Gavriel State. "Isaac Gym: High Performance GPU-Based Physics Simulation For Robot Learning.", arXiv preprint arXiv:2108.10470, 2021.
[2] Narang, Y. , et al. "Factory: Fast Contact for Robotic Assembly.", arXiv preprint arXiv:2205.03532, 2022.
封面:https://developer.nvidia.com/isaac-gym

本文由西湖大学智能无人系统实验室博士后汪治堃原创,申请文章授权请联系后台相关运营人员。
▌公众号:空中机器人前沿
▌知乎:空中机器人前沿(本文链接:https://zhuanlan.zhihu.com/p/607132488)
▌Youtube:Aerial robotics @ Westlake University
▌实验室网站:https://shiyuzhao.westlake.edu.cn