My Note Pad

エンジニアリングや日々の雑感を書いていきます

ゼロから作るDeep Learningの学習環境をDockerで作った

会社で「ゼロから作るDeep Learning」を使ってDeep Learningを学ぶ勉強会をしようということになったので、環境を作ってみた。

使用する書籍はこちら↓

www.oreilly.co.jp

なぜDockerなのか

  • Pythonや各ライブラリのバージョン差異によるメンバー間の挙動の違いが発生しないようにしたい。
  • そもそも環境の構築が面倒なのでサクッと作れるようにしたい。

といった感じ。

というわけで、Docker for Macを使って学習環境を作った。

環境・バージョンなど

Mac

  • OS X ElCapitan (10.11.6)
  • Docker for Mac 1.12.5 (最新で大丈夫な気がする)

Docker

  • Python 3.5.2 :: Anaconda 4.2.0 (64-bit)
  • Jupyter 4.2.0

Docker for Macのインストール

まだインストールしていなければこちらからDocker for Macをダウンロードしてインストールする。
詰まるところは無いと思うのでインストール方法は省略。

docs.docker.com

公式のGit HubをForkしてClone

こちらがオライリーが公式に公開している、「ゼロから作るDeep Learning」用のGitHubリポジトリ
色々コードを触りたいので、自分のGitHubアカウントにForkして、Cloneする。

github.com

今回は/Users/{USER_NAME}/github/deep-learning-from-scratchにcloneした。

$ cd ~
$ mkdir github
$ cd github
$ git clone https://github.com/{GITHUB_ACCOUNT}/deep-learning-from-scratch.git

Jupyter notebookを使うことになるので、.gitignoreに以下の行を追加しておくといい。

.ipynb_checkpoints/ 

Docker Imageの作成

※Docker for Macは起動させておく。

Docker Imageはこちらのannaconda用イメージを利用した。

docker-images/anaconda3 at master · ContinuumIO/docker-images · GitHub

# docker imageをpullする
$ docker pull continuumio/anaconda3

# docker imageを作成(ざっくり以下の設定を行っている)
# cloneしておいたGitHub用のリポジトリを、/opt/notebooks/deep-learning-from-scratchにマッピング
# 8888番ポートをフォワード
$ docker run -i -t -v /Users/{USER_NAME}/github/deep-learning-from-scratch:/opt/notebooks/deep-learning-from-scratch -p 8888:8888 continuumio/anaconda3 /bin/bash

docker runするとプロンプトがdocker内に移動するので、以下のコマンドでJupyter notebookをインストールする。

# /opt/notebooksをJupyterのルートディレクトリにし、8888番ポートを利用する
$ /opt/conda/bin/conda install jupyter -y --quiet && /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='*' --port=8888 --no-browser

Jupyterが起動するので一度Ctrl + Cで終了し、exitで抜けておく。

以上でDockerの環境ができた。

Docker環境完成後

2回目以降は以下の手順でDocker Imageを立ち上げることができる。

# dockerのプロセスを探す
$ docker ps -a
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS                    PORTS               NAMES
a5f0b5dbc6db        continuumio/anaconda3   "/usr/bin/tini -- /bi"   12 hours ago        Exited (0) 10 hours ago                       serene_curran

# ↑で探したコンテナID(今回の場合:a5f0b5dbc6db)を指定してdockerを起動する
$ docker start -i a5f0b5dbc6db

dockerのプロンプトに移動するのでJupyterを起動する

$ /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='*' --port=8888 --no-browser

Jupyter起動中は、ブラウザでhttp://localhost:8888/にアクセスすることでJupyterを使う事ができる。

f:id:yuki10k:20170111015925p:plain

また、Mac側の指定したディレクトリとシンクされているので、deep-learning-from-scratchというディレクトリが既に存在する。
deep-learning-from-scratch以下には各チャプターごとの参考コードが載っているし、notebookを作成し、notebookから該当のコードを呼び出すことができる。
呼び出し方は書籍内に出て来るのでそちらを参照。

f:id:yuki10k:20170111020041p:plain

Mac側とディレクトリを共有しているので、当然finderで中身を見ることもできるし、ブラウザ上のJupyter notebookで編集したnotebookを、自分のGitHubリポジトリにpushすることもできる。

これで色々捗りそうなので、Deep Learningについても学んでいきたい。