気の向くままに辿るIT/ICT
ソフトウェア

ChainerRLとOpenAI Gymで強化学習シミュレーション

ホーム前へ次へ
フリーソフト・オープンソースを活用しよう。

ChainerRLとOpenAI Gymで強化学習シミュレーション

ChainerRLとOpenAI Gymで強化学習シミュレーション

2018/10/14
chainer 4.5.0
chainercv 0.10.0
chainerrl 0.4.0
chainermn 1.3.0
chainerui 0.6.0
gym 0.10.8

 先日、DockerでChainerの開発環境を作り、公式サイトのChainerCVのサンプル実行や有志の方のスクリプトのデモをしてみました。

 続いて公式アドオンChainerMN/ChainerRLの何れかのサンプルを、と思い、どちらかと言えば、ChainerRLの方がとっつきやすそうということで公式ドキュメントからリンクのあったOpenAI GymのサンプルをJupyter Notebookで実行してみました。

 ChainerRLは、Deep Reinforcement Learning Library/深層強化学習ライブラリ、OpenAI Gymは、ゲーム風のサンプルを多く含む強化学習(Reinforcement Learning)シミュレーションのツールキットです。

Python 3.6.6

 Pythonは3系(Python 3.6.6)を使いますが、自動で入った模様の2系は、2.7.15rc1です。

[ホスト環境]
P C:TOSHIBA dynabook B45/B
CPU:Intel Cerelon 3855U 1.60GHz Core x2
GPU:Intel HD Graphics 510 (オンボード)
RAM:4GB
O S:Debian 9.5/Stretch x86-64

 ちなみに今回、検証に使っているパソコンのGPUは、Intel HD Graphics 510というオンボードのもので主流らしきNVIDIA製ではないのでCPUで動かしてみている一方、Intel CPU アクセラレータiDeepは、まだ、試していません。

DockerとDockerfile

Docker version 18.06.1-ce, build e68fc7a

 少なくとも現時点では、UbuntuやCentOSならEE/Enterprise版も使えるようですが、DebianやFedoraはCE版のみ、RHLに触れたり、Fedoraを使っていたこともある自身もOSを乗り換えるほどの熱量はなく、DebianにCE版をインストールしました。

 CE版のインストールは、OS、プラットフォームごとに詳述されているので戸惑うこともありませんでした。

# Dockerfile
 
FROM ubuntu
 
ENV DEBIAN_FRONTEND=noninteractive
 
RUN apt update && apt install -y \
        python3 \
        python3-pip \
        python3-tk \
        curl \
        firefox \
        git \
        less \
        mpich \
        uvccapture \
        vim \
        wget
 
RUN apt install -y \
        python3-dev \
        zlib1g-dev \
        libjpeg-dev \
        cmake \
        swig \
        python-pyglet \
        python3-opengl \
        libboost-all-dev \
        libsdl2-dev \
        libosmesa6-dev \
        patchelf \
        ffmpeg \
        xvfb \
  && apt clean \
  && rm -rf /var/lib/apt/lists/*
 
RUN pip3 install -U setuptools \
  && pip3 install \
        cython \
        gym \
        h5py \
        jupyter notebook \
        matplotlib \
        numpy \
        opencv-python \
        pillow \
        scipy \
        chainercv \
        chainerrl \
        chainermn \
        chainerui \
        chainer
 
RUN pip3 install \
        'gym[all]'
 
RUN jupyter notebook --generate-config
RUN echo "c.NotebookApp.ip = '0.0.0.0'" >> ~/.jupyter/jupyter_notebook_config.py
 
ENV DISPLAY=":0"
ENV QT_X11_NO_MITSHM=1

 OpenAI Gymに倣い、インストールします。

 ここでは、冒頭の開発環境においてgymも既にインストール済みなので、その次からということでcat /etc/os-releaseによれば、Ubuntuのバージョンは、18.04なので、このバージョンに必要なパッケージをインストール、敢えてapt-installのRUN行を分けてみました。

 これまでpython3パッケージをインストールしていましたが、これを見るとpython3-devを入れたほうが良いようですね。

$ xhost local:
non-network local connections being added to access control list
$ ls
Dockerfile
$ docker build -t webzoit:chainer_move_obj_detect .
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
webzoit       chainerrl_openai_gym              ...        ...          ...
$ docker run --privileged -v /tmp/.X11-unix/:/tmp/.X11-unix/ -v /etc/localtime:/etc/localtime:ro -it --rm webzoit:chainerrl_openai_gym /bin/bash
root@b9a14242d23c:/#

 Dockerコンテナ(仮想OS)を起動しますが、こられが何をしているのかについて必要であれば、冒頭のChainer開発環境のリンク先を参照ください。

 ホストはDebian(Linux)であり、GUIは、Dockerfileでの設定に加え、docker run前のxhostコマンド実行やdocker run時の-vオプション指定で起動可能なように設定してあることで起動するので、あとは試してみるだけです。

 最初、端末でpython3として実行し、サンプルがことごとくTrueで終わってしまい、おや?と思い、あ、こんな時こそ、Jupyter...、いやいや、Jupyterを開くまでもなかったと気づいた次第。

 当然でしょうが、ChainerRL Quickstart GuideのIn [1]〜IN [11]までを端末上でpython3とやって、全てコピペしていったところ、そのページの結果通りになりました。

ChainerCV/YoloとWebカメラで100%ボトルと認識されたエクストラバージンオイル

 jaimeps/docker-rl-gymのサンプルを実行するとブラウザの同一画面上(canvas)でブロック崩しが始まりました。

OpenAI GymサンプルCartPole-v0

 続いてインストール時のチュートリアルにあったサンプルを試してみたところ、追加で環境整備が必要そうなMujocoとRoboticsと結果がテキストであるToy text以外は、相応のポップアップが表示されました。

 ただ、どれも静止画なのですが、これはこれでよいのかな...jaimeps/docker-rl-gymのサンプルのように書けば、動くんですかね?

 そのうちの1つ、CartPole-v0のサンプルが、これです。

root@b9a14242d23c:/# git clone https://github.com/openai/gym.git
root@b9a14242d23c:/# cd gym/examples/agents
root@b9a14242d23c:/# python3 cem.py
...

 と思ったら、Jupyter Notebookを開くまでもなく、openai/gymをgit cloneしてexamples/agents/に移動、cem.pyやrandom_agent.pyを実行したところ、ポップアップ画面上で先のCartPole-v0サンプルが、keyboard_agent.pyを実行すると別のサンプルが動きました。

github

 openai/gymを始めとする公式ライブラリをDockerコンテナ内でgit cloneすることで、その中の各種サンプル(examples)もいろいろ実行確認してみています。

 ライブラリをgit cloneし始めるとキリがないのでDockerfileには、書かず、ホスト側に置いてdocker run時に-vオプションでマウントしています。

ホーム前へ次へ