【強化學(xué)習(xí)】強化學(xué)習(xí)環(huán)境ISAAC GYM(二)-再探索(Docker + 4090)

全文1658字,預(yù)計閱讀時間4分鐘
原創(chuàng) | 汪治堃
背景介紹
Isaac Gym是一款由NVIDIA在2021年開發(fā)的,用于強化學(xué)習(xí)研究的物理環(huán)境,當(dāng)前仍然處于Preview Release的階段 [1]。自從上一篇文章(強化學(xué)習(xí)環(huán)境ISAAC GYM初步入門)介紹Isaac Gym之后,它已經(jīng)從Preview2 升級到 Preview4。雖然依舊還是Preview Release的階段,但是框架結(jié)構(gòu)已經(jīng)改變了很多啦。這篇文章主要是向大家介紹一下改動的部分,同時進一步研究其環(huán)境相關(guān)內(nèi)容。


ISAAC GYM Preview4 環(huán)境安裝
ISAAC GYM Preview4的訓(xùn)練環(huán)境的框架主要由兩部分組成,第一部分是環(huán)境構(gòu)建(GYM Frame,也就是直接下載的部分),第二部分是訓(xùn)練算法(RL Frame,需要從Github上下載),鏈接如下所示:
GYM Frame
https://developer.nvidia.com/isaac-gym
RL Frame
https://github.com/NVIDIA-Omniverse/IsaacGymEnvs
當(dāng)我們下載好了相關(guān)的文件后,這次我們采用Docker的方式對相關(guān)環(huán)境進行配置,關(guān)于Docker的作用與其特點,讀者們可以參考以下文章[強化學(xué)習(xí)環(huán)境ISAAC GYM初步入門]。
本次安裝使用的硬件環(huán)境是Nvidia 4090 和 i9-13900K,相關(guān)安裝步驟如下所示:
1.首先安裝Linux 20.04的系統(tǒng),然后安裝Nvidia的525版本驅(qū)動和Docker驅(qū)動,確保主機下Docker可以正常運行。
2.下載上面鏈接中的文件,分別解壓,然后定位到下載的GYM Frame下的文件夾isaacgym中。將github中的RL Frame的文件夾IsaacGymEnvs放置在isaacgym目錄下,方便后面進行文件夾映射。
3.接下來需要修改其中幾個Docker配置參數(shù),因此需要進入isaacgym/docker文件夾中,修改Dockerfile文件:1)因為我使用的4090顯卡需要比較新的驅(qū)動版本,所以我們需要將首行加載舊顯卡驅(qū)動版本的命令行修改為最新的驅(qū)動版本FROM nvcr.io/nvidia/pytorch:22.12-py3。
2)因為我操作中喜歡使用直接獲得管理員權(quán)限,所以我會將其中創(chuàng)建用戶的部分命令刪除。
3)因為我期望使用Docker環(huán)境和Linux其他環(huán)境共同使用同一個文件而非獨立環(huán)境,所以我也會將其中拷貝文件的部分刪除。由于刪除了其中的目錄,環(huán)境自動安裝部分的內(nèi)容就需要我們后面再手動進行。
4.然后我們需要修改同一目錄下的運行文件run.sh。Isaac gym環(huán)境需要使用圖像進行顯示,因此,我們只修改else后面的部分。
1)將我們想要共享的文件夾映射到docker環(huán)境中,即將-v /home/Username/Documents/IsaacGym:/isaacgym命令插入到docker run指令之后。其中,/home/Username/Documents/IsaacGym是下載的安裝環(huán)境所在的目錄,需要各位自行修改。
2)docker環(huán)境的名字在--name后面,可以修改為自己項目的名字,方便區(qū)別。
5. 最后,我們就可以在isaacgym文件夾內(nèi)運行bash docker/build.sh來建立一個支持4090顯卡配置環(huán)境的Isaac gym的image。然后我們運行bash docker/run.sh 0,其中0表示顯示器的編號。
6. 然后我們打開docker環(huán)境,手動安裝相關(guān)環(huán)境。由于我們前面沒有建立用戶,我們的命令行具有root權(quán)限,可以直接運行pip等指令。
1)定位到共享文件夾中的isaacgym/python目錄下,運行pip install -q -e . 。
2)定位到第2步中的RL Frame的文件夾IsaacGymEnvs中,運行pip install -q -e .。
至此,我們就完成了Isaac Gym相關(guān)文件和系統(tǒng)的安裝。我們可以到isaacgym/pyhton/examples文件夾內(nèi)運行相關(guān)指令查看簡單的環(huán)境,具體指令可參考前文[強化學(xué)習(xí)環(huán)境ISAAC GYM初步入門]。
環(huán)境運行與修改
因為當(dāng)前RL Frame使用了全新的框架,所以之前的訓(xùn)練命令不再適用。基本的訓(xùn)練可以使用pyhton train.py task = Taskname的方式,新框架下多個指令也可以疊加使用。常用的幾個指令如下所示:

如果當(dāng)前指令與的配置文件的值沖突,程序會以當(dāng)前命令行的指令為準(zhǔn)。
注意:一條完整指令中間不可以有空格,不同指令之間需要留空格。
當(dāng)前的Isaac Gym與之前的Preview2版本在環(huán)境編寫上存在一些區(qū)別,因此可以參考Github的docs中的framework文件進行修改,幾個重要地點如下所示:
1. 將原有的task class中的VecTask修改為BaseTask。
2. 將原有的reset函數(shù)修改為為reset_idx()函數(shù)。
3. Task下的___init__()函數(shù)和super().___init__()現(xiàn)在修改了輸入的參數(shù)數(shù)量。
4. 原來的模型和材質(zhì)文件被整合到了isaacgym/assets/目錄下。
5. 新的訓(xùn)練和環(huán)境配置文件被放在了上文提到的RL Frame下的isaacgymenvs/cfg文件夾中,環(huán)境需要同時訓(xùn)練參數(shù)和環(huán)境參數(shù)文件。
6. 需要在tasks文件夾中的___init__.py文件內(nèi)添加新創(chuàng)建的環(huán)境信息。
由于版本的區(qū)別,其中很多很好用的函數(shù)被改寫,部分無法使用,同時也不再提供一個完整的函數(shù)參考目錄。因此盡管GitHub項目中說可以無縫遷移,但我依舊碰到了部分函數(shù)不存在的報錯,可以說有一些遺憾了。
結(jié)論與展望
Nvidia開發(fā)的Isaac Gym環(huán)境現(xiàn)在已經(jīng)不再是一個小眾的平臺,由于其具有良好的環(huán)境計算能力,越來越多的使用者都在嘗試使用它來開發(fā)機器人與強化學(xué)習(xí)相關(guān)的內(nèi)容(比如ANYmal)。希望未來,它能夠更加的易于開發(fā),更加兼容不同的環(huán)境需求,可以提供幫助我們實現(xiàn) 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

本文由西湖大學(xué)智能無人系統(tǒng)實驗室博士后汪治堃原創(chuàng),申請文章授權(quán)請聯(lián)系后臺相關(guān)運營人員。
▌公眾號:空中機器人前沿
▌知乎:空中機器人前沿(本文鏈接:https://zhuanlan.zhihu.com/p/607132488)
▌Youtube:Aerial robotics @ Westlake University
▌實驗室網(wǎng)站:https://shiyuzhao.westlake.edu.cn