OpenAI Gym Roboticsの環境構築とBaselinesの実行
OpenAIが提供している強化学習環境のGymを使って、OpenAI BaselinesのHER (Hindsight Experience Replay) を実行するまでの手順について記録しておきます。環境構築はUbuntu 20.04で行いました。
MuJoCoのライセンス取得
Gymで提供されている環境のうち、3Dを使うものはMuJoCoに依存しています。今回使いたいRobotics環境は3Dなのでライセンスを取得する必要があります。
ライセンスの取得はLicenseから行います。30日間の試用期間中は無料で利用できますが、その後は正式なライセンスを取得する必要があります。学生の個人利用は無料ですが、学生でない場合は個人の非商用利用で年間$500、商用利用では年間$2000掛かります。ぼったくり
私はまだ学生なので、学生個人利用ライセンスを申請しました。申請から数日後にaccount numberがメールで送られてきました。ライセンスページで配布されているgetid
なるバイナリを実行して得られるComputer idとaccount numberを登録するとmjkey.txt
というファイルをダウンロードできます。これを~/.mujoco/
に保存します。
Productsで配布されているmujoco200 linux
をダウンロードします。これを解凍して~/.mujoco/mujoco200/
に置きます。
~/.bashrc
に以下を追記して(username
は自分の名前にする)、シェルを再起動します。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/username/.mujoco/mujoco200/bin
必要ライブラリのインストール
OpenAI Gym Roboticsの実行に必要なライブラリ
GymのREADMEに従って以下をインストールします。
sudo apt-get install -y libglu1-mesa-dev libgl1-mesa-dev libosmesa6-dev xvfb ffmpeg curl patchelf libglfw3 libglfw3-dev cmake zlib1g zlib1g-dev swig
MuJoCoに依存する環境を実行するためにはmujoco-pyが必要になります。
pip install -U 'mujoco-py<2.1,>=2.0'
Baselinesの実行に必要なライブラリ
BaselinesのREADMEに従って
sudo apt-get update && sudo apt-get install cmake libopenmpi-dev python3-dev zlib1g-dev
を実行します。
次にTensorFlowをインストールする必要があるのですが、今のところTensorFlow 1.14が推奨されています。自分が使っているPython環境では古すぎてインストールできなかったため、Tensorflowの旧バージョンをインストールする - Qiitaに従ってpyenvでPython 3.7.2の環境を構築してそこでインストールを行いました。
pip install tensorflow==1.14.0
その他、ドキュメントに書いていない必要なライブラリをインストールするために以下を実行します。
pip install matplotlib pandas atari_py filelock mpi4py pytest
Baselinesのインストール
OpenAI Baselinesをインストールします。
git clone https://github.com/openai/baselines.git cd baselines pip install -e .
インストールが終わったらテストを実行します。テストが通らなかったら適宜対応してください。
pytest
OpenAI Gym Roboticsの動作確認
まずはOpenAI Gym Roboticsが正しく動くか確認します。以下のコードを実行します。
import gym env = gym.make('FetchReach-v1') while True: observation = env.reset() while True: env.render() action = env.action_space.sample() observation, reward, done, info = env.step(action) if done: print("Done!") break
ランダムに選んだ動作を無限に続けるコードになっています。正しくインストールされていれば、以下のような画面が表示されます。
Baselinesの実行
Baselinesに実装されているHER (Hindsight Experience Replay) を実行します。このアルゴリズムは報酬がスパースな環境(例えばロボットアームによる操作が成功したかしなかったかのどちらかしか分からないような環境)でうまく強化学習を行うために開発されたアルゴリズムです。現在の方策がゴールに到達できなかった場合でも、現在の方策で実行できた範囲のものをゴールと設定して報酬を与えることで報酬のスパースさを解決しているようですが、詳細は今度実装したときにでも書きます。
OpenAIによるHERのベースライン実装を実行するには、先にインストールしたbaselines
のディレクトリで
python -m baselines.run --alg=her --env=FetchReach-v1 --num_timesteps=5000 --play
を実行すればよいです。ここで実行するFetchReach-v1は、ランダムに選ばれた3次元空間上の点に手を動かすだけの簡単なタスクなので、CPUのみの環境でもすぐに100%成功するようになります。学習結果はこんな感じになりました。
OpenAI Gym FetchReach-v1のベースライン実装 https://t.co/VeCkkETlmY pic.twitter.com/E3FqlgryUJ
— きばん (@kivantium) 2021年2月8日
次回があれば、PyTorchあたりで強化学習のアルゴリズムを何か実装します。