概要
強化学習の勉強を「Pythonで学ぶ強化学習」でしており、サンプルコードを実行可能なdockerを構築してみたので紹介します。
こちらの書籍はサンプルコードが充実していることに加えて、比較的新しい手法が説明されており、強化学習の現状把握のスタートにはとてもおすすめです。
環境
macOS Mojave(10.14.4)
※Ubuntu 18.04版も紹介
目指す環境
- python==3.5
- tensorflow==1.12.0
- docker内でグラフプロット等のGUI使用可能
下準備
1. dockerのインストール
自分の環境にdockerをインストールします。
Mac向け参考記事:DockerをMacにインストールする (更新:2018/5/14)
※私の環境ではXquartzの設定後に上手くいかず、PC再起動で上手くいきました。
Ubuntu向け参考記事:Ubuntuにdockerをインストールする
2. ホスト側のGUI表示用設定
共通参考記事:Dockerコンテナの中でGUIアプリケーションを起動させる
Mac
- socatの導入・起動
- Xquartzの導入・起動
XQuartzが起動したらセキュリティ設定(環境設定>セキュリティ)を変更しておきます。
- 「接続の認証」をOFF
- 「ネットワーク・クライアントからの接続」をON
Mac向け参考記事:DockerをMacにインストールする (更新:2018/5/14)
Docker上のGUI出力をMacで表示
Ubuntu
以下コマンドを実行します
xhost local:
3. NVIDIAドライバーとnvidia-docker2のインストール(GPU使用の場合)
Ubuntu向け参考記事:nvidia-docker 2 を Docker CE (安定版) と共に Ubuntu 18.04 へインストールする
dockerの設定
3. Dockerfile
ベースイメージはtensorflow:1.12.0-py3を使用してそれに必要なpythonモジュールをインストールしています。
必要はパッケージは書籍のサンプルコードのGitリポジトリ内にrequirements.txtで入っているので、それをコンテナ内にコピーしてpipでインストールするだけになります。
ホスト側のXサーバーへの接続がセキュリティー的にrootユーザーからはできないらしく、③で別ユーザーを作成してユーザー切り替えを行っています。
# GPUの場合
#FROM tensorflow/tensorflow:1.12.0-gpu-py3
# ①CPUの場合
FROM tensorflow/tensorflow:1.12.0-py3
COPY into_container/requirements.txt /root/
# ②パッケージインストール
RUN add-apt-repository -y ppa:jonathonf/vim \
&& apt-get update \
&& apt-get install -y git vim xterm sudo python3-tk \
&& pip3 install --upgrade pip \
&& pip3 install -r /root/requirements.txt
# ③ユーザーの切り替え
RUN groupadd -g 1000 developer && \
useradd -u 1000 -g 1000 --groups sudo --create-home --shell /bin/bash developer && \
echo 'developer:P@ssw0rd' | chpasswd
USER developer
WORKDIR /home/developer
4. ビルド
普通にビルドすればOKです。
docker build -t baby-steps-env .
5. コンテナ起動
runする際に以下の設定を行っています。
- コンテナ内の環境変数DISPLAYにホスト側のディスプレイを設定
- 書籍のサンプルコードのディレクトリをコンテナ内にマウント
- ホストのXサーバーのソケットファイルをコンテナ内にマウント
使用する際は引数-vで指定している'localdir'を消して、ホスト側の書籍のサンプルコードディレクトリを絶対パスにしてください。
# GPUの場合
#nvidia-docker run --rm --name baby-steps-container -it \
# -e DISPLAY=host.docker.internal:0.0 \
# -v 'localdir':/home/developer/baby-steps-of-rl-ja \
# -v /tmp/.X11-unix/:/tmp/.X11-unix \
# baby-steps-env bash
# CPUの場合
docker run --rm --name baby-steps-container -it \
-e DISPLAY=host.docker.internal:0.0 \
-v 'localdir':/home/developer/baby-steps-of-rl-ja \
-v /tmp/.X11-unix/:/tmp/.X11-unix \
baby-steps-env bashdocker build -t baby-steps-env .
6. 実行
Dockerfile, build.sh, run.shのある階層で以下を実行します。
$ sh build.sh
$ sh run.sh
7. 動作確認
コンテナ内のbashコンソールで
$ xterm
と入力してEnter。
これでウィンドウが立ち上がれば成功です。
8. Gitリポジトリ
Gitに今回紹介したソースをあげていますのでよければご利用ください。
Mac用 : kinziro/baby-steps-mac-env_on_docker
Ubuntu用 : kinziro/baby-steps-ubuntu-env_on_docker
参考にさせて頂いたサイト
DockerをMacにインストールする (更新:2018/5/14)
Docker上のGUI出力をMacで表示
Ubuntuにdockerをインストールする
Dockerコンテナの中でGUIアプリケーションを起動させる
nvidia-docker 2 を Docker CE (安定版) と共に Ubuntu 18.04 へインストールする