Edited at

WindowsのWSLにOpenAI gymとchainerrlをインストールした時のメモ

More than 1 year has passed since last update.


はじめに

この記事はWSL (Windows Subsystem for Linux) 上にOpenAIのgym(強化学習フレームワーク)の実行環境を構築した時のメモです。

インストールしたもの


  • python3.6

  • pip

  • 強化学習で使いそうなライブラリ

  • VcXsrv(XServerクライアント)

この記事には以下の内容は含まれません。


  • WSLはインストール済みであることが前提です。

  • 強化学習の説明はしませんので、別の記事をご参照ください。


インストールするもの


Linux側

WSL(ubuntu)のデフォルトはpython3.5が入っているので、Python3.6とpipを使えるようにする。

このページを参考にapt-getでインストールする。

sudo add-apt-repository ppa:jonathonf/python-3.6

sudo apt install python3.6 python3-pip
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2

python3 -Vでpython3.6が有効になっていればOK。

今回は仮想環境とかは作らずにWSL上に環境を作っていく。

pipでさしあたって使いそうなものをインストール。

pip3 install --user numpy tensorflow keras chainer chainerrl gym jupyter scipy


Windows側

XServerクライアントが必要になります。

Xmingが有名ですが、こちらでVcXsrvが勧められていたのでVcXsrvをインストールしてみました。

ダウンロード:SourceForge

インストール方法など:WindowsでリモートのLinuxのGUIアプリを表示させる-Xサーバ VcXsrv

インストールは特に難しいことはなく、インストーラを起動してボタンをクリックしていくだけ。

インストール後はデスクトップにあるXLaunchというのを起動して、タスクバーに"X"マークのロゴが出ればOK。

一応、ロゴをマウスオーバーしてディスプレイのポートが0.0であることを確認しておく。

("ホスト名:0.0 - 0 clients"となっているはず。)

WSL側の設定は.bashrcに以下の二行を追加。localhostの後ろの0.0はロゴのマウスオーバーで確認した値にしておく。

二行目は"failed to load driver: swrast wsl"というエラーメッセージを消すために入れているが、なくても動く。

export DISPLAY=localhost:0.0

export "LIBGL_ALWAYS_INDIRECT=1"

.bashrc変更後はsource ~/.bashrcするか、再起動する。

OpenGymのGUIが動くように以下をインストール。

sudo apt-get install python3.6-gdbm python-opengl


実際に試してみる


簡易確認

以下の内容でファイルを作ってコマンドラインから実行。テストなので、ランダムに行動させています。

最後の一行を入れないと終了時にエラーが出るみたいです。(2018/4/2時点)

import gym

env = gym.make('CartPole-v0')
observation = env.reset()
for _ in range(100):
env.render()
action = env.action_space.sample()
observation, reward, done, info = env.step(action)
env.close()

自動でXwindowが最前面に来ないこともあるので、タスクバーを見ていないと見落とすかも。


jupyter + chainerrl

jupyterを起動すれば、ChainerRLのクイックスタートも実行できる。

jupyterはjupyter notebookで起動して、Windows側のブラウザから表示されたURLにアクセスすればOK.