読者です 読者をやめる 読者になる 読者になる

デジタル・デザイン・ラボラトリーな日々

アラフィフプログラマーが数学と物理を基礎からやり直す

WindowsユーザーがTensorFlowをインストールしてみた(Docker版)

はじめに

静岡Developers勉強会では、今年の勉強会のテーマとして「人工知能ハンズオン」を2016/4/23に開催します。 以前、TensorFlowを自PC(Windows 10 64bit)にインストールした記事を書きました。 yaju3d.hatenablog.jp

ですが初心者の人には敷居が高いかと思い、もっと簡単な方法がないか模索していました。
ネットで「Tensorflow Windows インストール」で検索すると、Dockerなら簡単だよというのが見つかるのですが、Dockerってクラウドで使うものだと思い込んでいたために見逃していました。
Dockerを調べるとクラウドでなくても使えることが理解できたので、今回Dockerを使ってのTensorflowのインストールに挑戦してみました。

※Dockerを使用するにはPCが64bitである必要があります。

qiita.com

環境

DockerToolboxのインストール

DockerのオフィシャルサイトのDocker ToolboxからDocker Toolboxのインストーラを入手します。このインストーラにはVirtualBoxやGit for Windowsが同梱されてます。

自分はチェックボックスなど気にせずデフォルト状態のままインストールしました。

Docker用の仮想マシンを構築

Docker Quickstart Terminalを起動します。初回のみVirtualBox上にDocker用の仮想マシン(default)を生成します。 その後、Dockerエンジンが動作しているDockerホストの仮想マシンに接続されます。 VirtualBoxを開くとdefaultインスタンスが出来ていることが確認できます。

自PCのWindows 10 Home 64bitではDocker Quickstart Terminalでエラーになりました。その顛末は下記ブログに書いています。 qiita.com

Dockerの動作確認

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   ERRORS
default   *        virtualbox   Running   tcp://192.168.99.101:2376

URLにあるIPアドレスは後で入力するので覚えて置いてください。
ちなみにIPアドレスだけを知りたい場合は下記となります。

$ docker-machine ip
192.168.99.100

DockerにTensorFlowのインストール

TensorflowのサイトのDocker installationにインストールする方法が記載されています。

$ docker run -it b.gcr.io/tensorflow/tensorflow
         ︙
[I 08:48:55.427 NotebookApp] The Jupyter Notebook is running at: http://[all ip
addresses on your system]:8888/
[I 08:48:55.427 NotebookApp] Use Control-C to stop this server and shut down all
 kernels (twice to skip confirmation).

記載のコマンドを入力するとtensorflowがインストールされていきます。説明の通りだとWebブラウザでdefaultマシンのIPアドレスにポート番号8888を付ければ、Notebook(Jupyter)が動作するとなっています。

自分はこの通りに入力したのですが、Webブラウザで「http:192.168.99.100:8888/」を入力しても、「このサイトにアクセスできません」のエラーでどうすることも出来なかったため、Control-Cを押すしかありませんでした。

Jupyter Notebookの起動

ネットで調べるとポートを指定するようなことが書かれていました。
How do I start tensorflow docker jupyter notebook

$ docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow
         ︙
[I 08:48:55.427 NotebookApp] The Jupyter Notebook is running at: http://[all ip
addresses on your system]:8888/
[I 08:48:55.427 NotebookApp] Use Control-C to stop this server and shut down all
 kernels (twice to skip confirmation).

これでWebブラウザで「http:192.168.99.100:8888/」と入力するとJupyter Notebookが起動されました。
IPアドレスは、Dockerの動作確認した際のURLとなります。

TensorFlowのサンプル確認

DockerのTensorFlowには、下記のサンプルが最初から用意されています。

  • 1_hellow_tensorflow.ipynb
  • 2_getting_started.ipynb
  • 3_minst_from_scratch.ipynb

※DockerのTensorflowはPython2用となります。

f:id:Yaju3D:20160407003301p:plain

TensorBoradの確認

yaju3d.hatenablog.jp

このサイトの「TensorBoardによる可視化」にあるソースを入力します。
※その上にあるdef x2_plus_b(x, b)関数も入力が必要です。

f:id:Yaju3D:20160407003353p:plain

実行するとlogフォルダが作成されます。 次に右横の「New」で「Terminal」を作成します。

f:id:Yaju3D:20160407003452p:plain

Terminalにて、下記コマンドを入力します。

# tensorboard --logdir=log                                                                                                                                    

f:id:Yaju3D:20160407003516p:plain

これでWebブラウザで「http:192.168.99.100:6006/」と入力すると「TernsorBorad」が表示されます。 f:id:Yaju3D:20160407004805p:plain

TensorBoradの停止

Runningタブにて該当Terminalの「Shutdown」ボタンをクリックすれば停止します。 f:id:Yaju3D:20160407003537p:plain

ホストとファイル共有

Dockerはプロセス内にコンテナを生成するので、コンテナ内にファイルを保存してもPC再起動等でプロセスが消えるとコンテナも破棄されます。下記方法でホスト側のフォルダをマウントしておくことでコンテナが破棄されてもファイルが消えることがなくなります。

ホスト側(C:\Users(ユーザー名))の配下に「tensor_share」フォルダ(例)を作成したとします。

$ docker run -d -p 8888:8888 -p 6006:6006 -v /c/Users/(ユーザー名)/tensor_share:/notebooks b.gcr.io/tensorflow/tensorflow

PWDコマンドを使うとカレントディレクトリを取得できます。

$ echo $PWD
/c/Users/(ユーザー名)

$ docker run -d -p 8888:8888 -p 6006:6006 -v $PWD/tensor_share:/notebooks b.gcr.io/tensorflow/tensorflow

qiita.com