LoginSignup
12
13

More than 5 years have passed since last update.

書籍「Pythonで学ぶ強化学習」のサンプルコードを実行可能な環境をdockerで構築 (GUI出力対応)

Last updated at Posted at 2019-04-08

概要

強化学習の勉強を「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が起動したらセキュリティ設定(環境設定>セキュリティ)を変更しておきます。
    1. 「接続の認証」をOFF
    2. 「ネットワーク・クライアントからの接続」を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ユーザーからはできないらしく、③で別ユーザーを作成してユーザー切り替えを行っています。

Dockerfile
# 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です。

build.sh
docker build -t baby-steps-env .

5. コンテナ起動

runする際に以下の設定を行っています。

  • コンテナ内の環境変数DISPLAYにホスト側のディスプレイを設定
  • 書籍のサンプルコードのディレクトリをコンテナ内にマウント
  • ホストのXサーバーのソケットファイルをコンテナ内にマウント

使用する際は引数-vで指定している'localdir'を消して、ホスト側の書籍のサンプルコードディレクトリを絶対パスにしてください。

run.sh
# 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 へインストールする

12
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13