kivantium活動日記

プログラムを使っていろいろやります

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

ランダムに選んだ動作を無限に続けるコードになっています。正しくインストールされていれば、以下のような画面が表示されます。 f:id:kivantium:20210208215102p:plain:w600

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%成功するようになります。学習結果はこんな感じになりました。

次回があれば、PyTorchあたりで強化学習アルゴリズムを何か実装します。

参考サイト

広告コーナー