KerasとTensorFlowの環境をDockerで構築する

なぜDockerで構築?

普段はローカルのMacのPythonで機械学習をやってます。 ですが、Udacityの機械学習コース(Machine Learning Nanodegree) の課題で、Anacondaが必要になってしまいました。

Anacondaというのは、機械学習などに必要なもの一式がそろったPythonのディストリビューションです。 本当はPythonをインストールした後に色々必要なパッケージをインストールしないとダメですが、 AnacondaをインストールすればそれだけでOKという便利なものです。

しかし、僕は普段からPython使ったり、色んなパッケージをすでにこのMacに入れてあります。 そこで、このMacにAnacondaを入れると、今まで入ってたものと色々競合してしまって今まで動いていたプログラムまで 動かなくなる事があります。

なるべく今の環境をゴチャゴチャにしたくない…

そこで、今回はDockerでAnacondaを用いた機械学習用の環境構築を行うことにしました。 そのログをここにまとめておきます。

今回の環境構築

  • Anaconda
  • Python
  • Keras
  • TensorFlow

これらを構築しようと思います。

そして、最後に Jupyter notebook をDockerから立ち上げたいと思います。

1. DockerのPull

まず、DockerのイメージをPullします。

$ docker pull continuumio/anaconda3

2. 必要なpackageをインストール

早速Dockerを立ち上げて、必要なpackageをインストールしていきます。

$ docker run -i -t continuumio/anaconda3 /bin/bash
root@XXX:/# python -V
Python 3.6.1 :: Anaconda 4.4.0 (64-bit)
root@XXX:/# pip install keras
root@XXX:/# conda create -n tensorflow

これで色々と依存関係にあるパッケージも取得してくれます。 他にも必要なものがあればインストールすれば大丈夫です。

3. Dockerの環境でJupyterを起動させる

今回僕は Jupyter notebook を起動させて、ブラウザで動作させる必要がありました。

Port 8888を開放して、ローカルのディレクトリをDockerの環境にマウントさせます。 こうすると、Docker内にある /foo ディレクトリを通して、ローカルのディレクトリに自由にDockerからアクセスできます。

$ docker run -i -p 8888:8888 -v /Users/XXX/path/to/directory:/foo -t continuumio/anaconda3 /bin/bash
root@XXX:/# cd /foo
root@XXX:/# ls -l

それでは、Jupyter notebookを起動させます。 下記のようにオプションを指定してあげることで、ブラウザからアクセスできます。

root@XXX:/# jupyter notebook /foo/your_book.ipynb --ip 0.0.0.0 --no-browser --allow-root
...
    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://0.0.0.0:8888/?token=ff60af8dfa082676939309c3313c452bed04361f27f07cb1

あとは、この http://0.0.0.0:8888/?token=XXX にアクセスすればOKです。

Dockerとても便利で素晴らしい…!

ではバリバリ機械学習やっていきましょう🚀

参考リンク

@takp