Isaac Gym入門(環境構築編)

執筆者:千葉工業大学 先進工学研究科 未来ロボティクス専攻 野口 裕貴
監修者:稲葉 貴昭・高橋 浩和


1. はじめに

本稿では、Isaac Gymと呼ばれる深層強化学習向けの物理シミュレーション環境について解説します。 優秀なシミュレーション環境なのですが、使用ユーザーが少ない・まだ開発段階ということで非常に記事が少ないのでこういった記事を作成してみることにしました。 今回は深層強化学習とIsaac Gymについて解説し、Isaac Gymの環境構築を行います。

2. 深層強化学習とは

深層強化学習とは何かを説明するため、まずは機械学習について説明していきます。

機械学習を説明する言葉はいくつかありますが「コンピュータがデータから自動的に学習し、データの規則性を見つける」という点は共通しています。

近年、人工知能 (AI)・ニューラルネットワーク・深層学習などの単語を頻繁に耳にしますが、これらと機械学習の関係性を表すと以下の図のようになると考えています。

  • 人工知能 (AI)
    • 人間の脳に近い機能を持ったコンピュータープログラム。*1
  • ニューラルネットワーク
    • 生物の神経細胞(ニューロン)のネットワークをモデルとした機械学習のモデル。人工的に再現されたニューロンを層状に配置することで、人間の脳で行われている情報の伝達と処理を模倣する。
  • 深層学習
    • 多層のニューラルネットワークを使用して学習させる手法。問題に応じてネットワークの結合方法を変更することで幅広い分野で活躍する。ディープラーニングとも呼ばれる。

上の図にも示していますが機械学習の内の1つの分野として強化学習があります。

強化学習は行動(Action)により報酬(Reword)が得られる環境(Environment)をエージェントと呼ばれる行動する主体に与え、得られる報酬が最大になる行動が出力されるように環境との相互作用を通じて探索を繰り返す手法です。報酬とは,エージェントが行う行動の良し悪しを判定する評価のことを指し、この報酬を用いてある状態(State)に対する次の行動を決定するための方策を改善します。以下の図に一般的な強化学習の概要図を示します。

強化学習の概要図

強化学習は、教師データを必要としない点で教師無し学習と共通しています。しかし、教師無し学習は入力として与えられたデータに対して、正解(教師データ)がない状態で学習させる手法であり、強化学習は前述した通り与えられた環境との相互作用により最適な行動を学習させる手法になります。そのため、教師無し学習は与えられたデータを分析し、データの構造や分類を理解する必要がある問題に使用されます。一方、強化学習はそれぞれの環境に対する最適な行動を獲得するために使用されます。

このような性質を持つ強化学習はQ学習・Sarsa・モンテカルロ法などを代表とする様々なアルゴリズムが研究・発見されてきました。しかし、これらの手法で解決できる問題は格子地図で表現された迷路探索などの簡単なものに限ります。

強化学習でブロック崩しや囲碁などといったような複雑な問題をこなすためにはエージェントが取り得る状態数を増やす必要があります。しかし状態数の増加に応じ、それに伴う行動との組み合わせの数が急激に増加します。それにより、最適な報酬を得るためにかかる探索空間も莫大になり、探索が困難になります。

このような理由から強化学習では複雑な問題を解決することは困難でした。しかし強化学習に深層学習を組み合わせ、状態の情報を縮約して表現することにより、この組み合わせの数の増加に対処できることが判明しました。このように強化学習に深層学習を組み合わせた手法を深層強化学習と呼びます。

深層強化学習はブロック崩しやAlphaGOが誕生することで有名になり、複雑な問題を教師データなしで解決させるための手法として注目を集めるようになります。 こういった背景から、近年では深層強化学習を用いた研究が多く進められています。特にロボティクスの分野での活躍が期待されています。

3. Isaac gymとは

Isaac GymはNvidiaが提供する、深層強化学習向けの物理シミュレーション環境です。 ロボットをメインとしたシミュレーション環境で、ロボットのモデルとしては、Allegro handANYmalなどといったロボットから倒立振子・ドローン・ヒューマノイドなどの複数のモデルを扱うことができます。

youtu.be

youtu.be

またURDFやMJCFファイルのインポートが可能なので、MuJoCo等で使用していたモデルを変換することなく使用できます。

Nvidiaが提供するシミュレーション環境にIsaac Simというものがありますがこれは現時点ではIsaac Gymとは別物となっています。 しかし、Isaac SimとIsaac GymはNVIDIAが開発するOmniverse Appというカテゴリに含まれます。そのため将来的にはIsaac GymとIsaac Simは1つに統合される可能性があります*2

Isaac Gymは特徴として、GPUのみでシミュレーションとニューラルネットワークによる学習の両方を完結させることができます。

MuJoCoやPyBulletなどを代表とする物理シミュレーション環境を用いた深層強化学習にはGPU上でシミュレーションされた情報をCPU側に渡し、CPU上で受け取った情報を元に観測や報酬が計算されます。これを繰り返し、シミュレーション環境上で学習を行います。そのため、学習を高速化させるためには、CPUとGPU間のボトルネックや大規模なCPUクラスタが必要などの課題があります。

そこでIsaac Gymは前述したようにGPUのみでこれらの処理を行うことにより、前述する問題を解消し、高速化することに成功しています。

これにより、従来のシミュレーション環境を用いた場合と比較し、学習にかかる時間を大きく短縮することに成功させています*3

4. Isaac gymのインストール

Isaac Gymをインストールする際に注意すべき問題として以下の最小条件を満たしている必要があります。

最小条件

  • OS
    • Ubuntu 18.04 または Ubuntu 20.04
  • Python version
    • Python 3.6 ~ 3.8
  • 最低限必要なハードウェア
    • VRAM 8GBを備えたNVIDIA Pascal 以降の GPU
  • 最低推奨のNVIDIA driver version
    • 470.74 (470以上が必要)

今回使用した環境を以下に示します。

実行環境

  • Ubuntu 20.04
  • conda 23.7.4
  • Python3.7(conda)
  • GeForce RTX 3060 Laptop (VRAM 6GB)
  • NVIDIA driver version 535.113.01

今回、VRAM8GB以下のGPUを使用しましたが、正常に動作することを確認しました。構成により変化しそうですが、VRAMが6GB程度あれば動作可能です。*4

Issac Gymは現在,condaかDockerのどちらでも使用することができますが、公式はcondaを利用したセットアップのほうが簡易的に行えるため強く推奨しています。

そこで今回はcondaを用いた場合の環境構築手順を紹介します。

condaでの環境構築

公式のWebsiteからIsaac Gym Preview 4 releaseをダウンロードします。

Isaac Gym - Preview Release | NVIDIA Developer

ダウンロードするためにはNVIDIAのアカウント作成とアンケートに答える必要があります。
リンク先の画面中央にあるJoin nowをクリックしてアカウント作成を行ってください。

Isaac Gym Website

アカウント作成後、以下のようなアンケートが表示されます。1~3は回答必須なので注意してください。

Isaac Gym アンケート画面

アンケート回答後、Isaac Gymを使用するにあたり必要な使用許諾契約書を確認します。
内容に問題がなければ画面左側にあるチェックボックスをクリックすることでIsaac Gymをダウンロードすることができるようになります。

Isaac Gym ダウンロード画面

ダウンロード後、展開します。その後、展開したディレクトリに入っているisaacgym/docsにあるマニュアル通りに環境を行うとセットアップできます。 以下に手順を記載しておきます。

# tar xf IsaacGym_Preview_4_Package.tar.gz
# cd isaacgym
# ./create_conda_env_rlgpu.sh 

かなり待ち時間があります。(30分程度)

これで、Isaac Gym自体のインストールは完了です。

次にIsaac Gymで深層強化学習のサンプルを使用できるようにします。

GitHub - NVIDIA-Omniverse/IsaacGymEnvs: Isaac Gym Reinforcement Learning Environments をcloneし、READMEを読みながらセットアップを行います。 基本的には以下のコマンドを入力するだけで済みます。

# git clone https://github.com/NVIDIA-Omniverse/IsaacGymEnvs.git
# cd IsaacGymEnvs
# pip install -e .

これで環境構築は完了です。次のステップで正常に動作するか確認しましょう。

正常に動作しない場合は、末尾記載のトラブルシューティングを参考にしてみてください。

5. Issac gymでのHello world

Issac Gymを動かしてみましょう。

Isaac Gymが正常に動作するかどうかの確認にはisaacgym/python/examplesディレクトリにあるjoint_monkey.pyを実行します。 正常にセットアップできていれば、ヒューマノイドのモデルが四肢を動かしてくれます。

joint_monkey.py 実行時の様子

このヒューマノイドの動きはシミュレーション環境でのアニメーションを確認するものであって、深層強化学習を使用して獲得した動作等ではないので注意してください。

では次に、深層強化学習を体験してみましょう。 IsaacGymEnvs/isaacgymenvsディレクトリに移動し、以下のコマンドを実行してください。

# python3 train.py task=Cartpole

正常にセットアップできていれば、大量の倒立振子のモデルが出てきます。

最初は棒を倒してしまう倒立振子が多くいますが、徐々に棒を立たせることができる倒立振子が増えていく様子が確認できます。

cartpoleの学習中の様子

6. 最後に

今回は深層強化学習の解説とIsaac Gymの解説・環境構築を行いました。 次回は、Isaac GymのAPIについて解説し、自作の環境を作成して学習を行っていきます。

トラブルシューティング

condaを使用した環境構築は以下のような問題が発生する可能性があります。

対処方法を記載しておきます。お役に立てば幸いです。

pythonライブラリのImportError

以下のようなImportErrorが発生することがあります。

ImportError: libpython3.7m.so.1.0: cannot open shared object file: No such file or directory

このErrorは対応する Python ライブラリをインストールすることで解決できます。

# sudo apt install libpython3.7

LD_LIBRARY_PATH の設定ミス

Isaac Gymインストール後のテストとしてjoint_monkey.pyを実行した際に以下のようなImportErrorが発生することがあります。

ImportError: /home/xyz/anaconda3/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.20` not found (required by /home/xyz/carbgym/python/isaacgym/_bindings/linux64/gym_36.so)

これはcondaを利用した際に環境変数が正常に設定できていない時に発生します。そのためLD_LIBRARY_PATH 変数を適切に設定する必要があります。

以下のコマンドを入力するか、~/.bashrcの末尾に書き込むことで解決します。

export LD_LIBRARY_PATH=/home/xyz/anaconda3/envs/rlgpu/lib

"Isaac Gym" is not responding

joint_monkey.pyなどのサンプルコードの実行時にIsaac Gymの画面が表示されないことがあります。 これは、Intel UHD GraphicsなどのIntel Graphicsが統合されたPCではNVIDIAのGPUがシステムに使用されていないケースがあるためです。以下のコマンドを入力してNVIDIAのGPUを使用するようにしてください。

# sudo prime-select nvidia
# export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json

上記のコマンドのexport VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json~/.bashrcに記載することで、毎回コマンドを入力する手間を省くことができます。


※ 2023年11月24日追記
VA Linux は、千葉工業大学 未来ロボティクス学科のロボカップチーム「CIT Brains」をスポンサーとして応援しており、インターン生も数名受け入れています。
本記事は、その一環としてインターン生の野口さんが記事を執筆し、弊社が監修を行いました。

*1:専門家によって定義は異なります。人工知能に関しては明確な定義がされていないのが現状です。本稿ではアメリカの計算機科学者であるジョン・マッカーシー氏の言葉を翻訳したものを引用しています。

*2:NVIDIA-OmniverseのGitHubに統合予定のリポジトリが存在する GitHub - NVIDIA-Omniverse/OmniIsaacGymEnvs: Reinforcement Learning Environments for Omniverse Isaac Gym

*3:それぞれの環境での学習にかかる時間の比較に関してはIsaac Gym: High Performance GPU Based Physics Simulation For Robot Learning | OpenReviewを参照してください

*4:GPU Memory Requirement for running Isaac Gym - Isaac Gym - NVIDIA Developer Forums