初めに
そもそもIsaac Gymとは?
Isaac GymはNVIDIAが出してるロボット開発向けの強化学習シミュレーション環境になります
最近サポート対応外になってしまったのですが代わりに出たIsaac Labは参考文献が無さすぎる上にインストール時のトラブルシューティングがめちゃくちゃ多くて複雑なのでユーザーの参考文献が出回るまではIsaac Gymを使うことを勧めます
Isaac Gymのここがすごい
- GPUベースシミュレーション
- 従来のCPUベースシミュレーション(MuJoCoなど)に比べてかなり高速化
- 高精度な物理エンジン
- NVIDIA PhysXというUnreal EngineやUnityにも使われてる強力な物理エンジンを積んでます
- 並列処理
- 複数のエージェント(ロボット)を同時に動かして学習させれます
ANYmal Parkour: Learning Agile Navigation for Quadrupedal Robots, Robotic Systems Lab: legged Robotics at ETH Zurich より引用
環境構築
環境
OS | Ubuntu 20.04 LTS |
---|---|
Python Version | 3.7 |
GPU | RTX4070 12GB VRAM |
CUDA Version | 12.1 |
インストール
Isaac Gymから圧縮ファイルをダウンロード:
圧縮ファイルを解凍:
tar xf IsaacGym_Preview_4_Package.tar.gz
Isaac Gymのインストール (conda環境もrlgpuって名前で作ってくれます):
cd isaacgym
./create_conda_env_rlgpu.sh
インストールは以上になります(超シンプル)
サンプルで検証
まずは仮想環境を起動:
conda activate rlgpu
関節のアニメーションを再生するサンプル(joints_monkey.py)を実行:
cd python/examples
python3 joints_monkey.py
ついでに同じディレクトリ内にあるFrankaのサンプルも試してみました:
次は実際に学習させていきます
学習サンプルリポジトリをgit clone:
git clone https://github.com/NVIDIA-Omniverse/IsaacGymEnvs.git
インストール:
cd IsaacGymEnvs
pip install -e .
倒立振子のサンプルを実行:
cd isaacgymenvs
python3 train.py task=Cartpole
初めはすぐに倒れますが、並列処理のおかげでめちゃくちゃ早く学習できてるのが分かりますね。
トラブルシューティング
libpythonのimportエラー
エラー文:
ImportError: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory
解決策 - 対応するlibpythonライブラリ(今回の場合はlibpython3.7)をインストール
sudo apt install libpython3.7
libpython3.Xが見つからない場合:
E: Unable to locate package libpython3.7
E: Couldn't find any package by glob 'libpython3.7'
解決策 - deadsnakes PPAを追加:
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
iJIT (intel Just-In-Time) コンパイラ関連の問題でPyTorchがimportできない
エラー文:
UserWarning: Future Hydra versions will no longer change working directory at job runtime by default.
See https://hydra.cc/docs/1.2/upgrades/1.1_to_1.2/changes_to_job_working_dir/ for more information.
...
from torch._C import *
ImportError: /home/user/miniforge3/envs/rlgpu/lib/python3.7/site-packages/torch/lib/libtorch_cpu.so: undefined symbol: iJIT_NotifyEvent
Set the environment variable HYDRA_FULL_ERROR=1 for a complete stack trace.
解決策 - Intel MKL (math Kernal Library)をダウングレード:
pip install mkl==2024.0.0
TorchScriptのnvrtcに無効なGPUアーキテクチャが渡される
エラー文:
RuntimeError: The following operation failed in the TorchScript interpreter.
Traceback of TorchScript (most recent call last):
RuntimeError: nvrtc: error: invalid value for --gpu-architecture (-arch)
解決策 - デバイスに入ってるCUDAに対応したPyTorchバージョンに変更
nvidia-smi # CUDAバージョンの確認
pip install torch==1.13.1 # 自分の場合CUDA 12.1なのでtorch 1.8.1 -> 1.13.1にアップグレード
参考文献
https://www.youtube.com/watch?v=PjWvf90l4cg
https://valinux.hatenablog.com/entry/20231122
https://github.com/pytorch/pytorch/issues/123097?source=post_page-----8ebf4b86e6f7--------------------------------#issuecomment-2095228569