【TensorFlow】Docker for Windowsで動かす機械学習!

TensorFlowを利用するプログラムの開発は進んでいますか?

今回は、以下のようなことで困っているあなたにDockerをオススメする記事を作成しました。

TensorFlowを試してみたいけど、インストールが大変そう
TensorFlowはバージョンアップ頻度が高くて、ついていくのが大変すぎる
TensorFlow 1.5で開発を始めたプログラムが、最新のTensorFlowでも動作するか気になる

Dockerを使えば、TensorFlowを簡単に試せるし、最新バージョン以外のTensorFlowもインストールできるし、開発環境を汚さずに別バージョンのTensorFlowを試せます!

それでは、期待しながら読み進めてください!

目次

Dockerコンテナを利用してTensorFlowを試そう

この記事では、以下の環境での操作を説明しています。

項目説明
OSWindows 10 Pro(64ビット)
DockerDocker Community Edition for Windows
DockerイメージCPU版TensorFlowをインストールしたDockerイメージ

先に「期待しながら」と書きましたが、ここで残念なお知らせを書いておきます。

  • WindowsでDockerを利用する場合は、GPU版TensorFlowは使用できません。
  • NVIDIAが提供しているnvidia-dockerは使用できません。

WindowsでGPU版TensorFlowを使用したい場合は、Dockerを使わずにWindowsに直接インストールしましょう。

インストール方法については、以下の記事で詳しく説明していますので、ぜひご覧ください。

nvidia-dockerとは

nvidia-dockerは、DockerでGPU版TensorFlowを動作させるためのLinuxアプリケーションです。

現在は、UbuntuDebianCentOSRed Hat Enterprise LinuxAmazon Linuxで動作しますが、OSごとに対応するバージョンが異なります。

対応バージョンについて詳しくは、以下のサイトをご覧ください。

参考:https://nvidia.github.io/nvidia-docker/

2018年6月時点の最新リリースは、nvidia-docker 2.0.3で、2018年3月にリリースされました。

nvidia-dockerについては、以下のページをご覧いただくと正確な情報が確認できます。

参考:https://github.com/NVIDIA/nvidia-docker/wiki

繰り返しになりますが、この記事ではnvidia-dockerのインストール方法や操作方法は説明しません。

Docker Community Edition for Windowsをインストールしよう

では、Docker Community Edition for Windowsをインストールするところから始めましょう。

(1)https://store.docker.com/editions/community/docker-ce-desktop-windowsにアクセスして、「Get Docker」をクリックします。

tensor-docker01

Docker for Windows Installer.exeがダウンロードされます。

ダウンロードページにも記載されていますが、Docker Community Edition for Windowsは、Windows 10 Pro(64ビット)またはWindows 10 Enterprise(64ビット)にのみインストールできます。

Chromeを使っていると、ダウンロードが終わるまで空白のページが表示され続けるためとても不安になりますが、ダウンロードはされるはずです。

Chromeを使っていて不安になった場合は、Internet ExplorerEdgeFirefoxを使うとすぐに反応するので安心できるでしょう。

(2)Docker for Windows Installer.exeを実行します。

(3)「Use Windows containers(省略)」のチェックが外れていることを確認し、「Ok」をクリックします。

tensor-docker02

Docker Community Edition for Windowsがインストールされます。

(4)「Close」をクリックします。

tensor-docker03

(5)スタートボタンをクリックし、「Docker for Windows」をクリックします。

(6)Dockerの評価とコメントを入力して、「Submit」をクリックします。

もちろん、何も入力せずに「Dismiss」をクリックしても大丈夫です。

tensor-docker05

(7)以下の画面が表示されたときは、「Ok」をクリックします。

tensor-docker06

Windowsが再起動して、WindowsのHyper-V機能が有効になります。

なお、Hyper-V機能を有効にするとVirtualBoxが動作しなくなります。

VirtualBoxを利用するときは、Hyper-V機能を無効にしてください。

ただし、Hyper-V機能を無効にするとDockerは動作しなくなります。

さて、初めてDocker Community Edition for Windowsが起動すると、以下の画面が表示されます。

tensor-docker07

これで、Docker Community Edition for Windowsのインストールは完了です。

Dockerコンテナを起動しよう

次は、TensorFlowが用意した公式のDockerイメージ(tensorflow/tensorflow)をダウンロードしてDockerコンテナを起動し、Jupyter Notebookにアクセスするまでの操作を説明しましょう。

(1)スタートボタンをクリックし、「Windows PowerShell」「Windows PowerShell」の順にクリックします。

tensor-docker08

Windows PowerShell(以降、PowerShell)が起動します。

(2)「docker run -it -p 8888:8888 tensorflow/tensorflow」と入力し、Enterキーを押します。

初めて起動するときは、Dockerイメージ(tensorflow/tensorflow)のダウンロードが始まります。

tensor-docker09

Dockerイメージ(tensorflow/tensorflow)のダウンロードが終わると、Dockerコンテナが起動します。

※もし、以下のようなエラーメッセージが表示されてしまったときは…

C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.

以下のサイトに書かれている設定を試してださい。

参考:http://satoyashiki.hatenablog.com/entry/2017/04/01/175604

(3)無事に以下の画面が表示されたら、指示されたURL(赤枠)にブラウザでアクセスします。

tensor-docker10

Jupyter Notebookが表示されます。

tensor-docker11

ここまでの操作で、Dockerイメージ(tensorflow/tensorflow)から作成したDockerコンテナで動作するJupyter Notebookに、Windows 10からアクセスしていることになります(文が長い…)。

ちなみに、Jupyter Notebookは、以下の記事でも軽く触れているようにPython開発環境で、コードとドキュメントを一箇所に残しておけるWebアプリケーションです。

Jupyter Notebookが動作することを確認できたら、いったんDockerコンテナを終了しましょう。

(4)ブラウザは起動したままにして、PowerShellの画面をクリックして、Ctrlキーを押しながらCキーを押します。

(5)以下のように表示されたら、すぐに「y」と入力してEnterキーを押します。

Shutdown this notebook server (y/[n])?

Dockerコンテナが終了します。

ブラウザにJupyter Notebookが表示されたままなので、試しにリロードしてみると、確かに使用できなくなっていますね。

PowerShellのプロンプトで「docker ps」と入力してEnterキーを押すと、以下のように起動中のDockerコンテナがないことを確認できます。

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

次に、「docker ps -a」と入力してEnterキーを押すと、Dockerイメージ(tensorflow/tensoflow)から作成したDockerコンテナ(boring_mirzakhani)が存在していることが確認できます。

CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS                     PORTS               NAMES
f5aab85d6e69        tensorflow/tensorflow   "/run_jupyter.sh --a…"   12 minutes ago      Exited (0) 5 minutes ago                       boring_mirzakhani

ここに表示されているDockerコンテナのIDと名前は、起動するたびに適当に決定されます。

DockerコンテナでTensorFlowのMNISTに挑戦!

いよいよ、Dockerコンテナでbashを起動してTensorFlowのMNISTに挑戦します。

TensorFlow 1.5用に書かれた「A Guide to TF Layers: Building a Convolutional Neural Network」をやってみましょう。

Windowsでこのチュートリアルを動作させてみた記事がありますので、あわせてご覧ください!

(1)PowerShellを起動して、「docker run -it tensorflow/tensorflow bash」と入力し、Enterキーを押します。

Dockerイメージ(tensorflow/tensoflow)を初めて利用するときは、ダウンロードが始まりますが、上の手順でダウンロード済みです。

そのため、すぐに新しいDockerコンテナが起動して、以下のようなプロンプトが表示されます。

root@38029a303d08:/notebooks#

ここで「38029a303d08」は、DockerコンテナのIDです。

IDは、新しいDockerコンテナを起動するたびに新しいものが割り当てられますので、上の手順で「docker ps -a」と入力して表示されたIDとは、異なる文字列が表示されていると思います。

このDockerコンテナのIDは、あとで使いますので、どこかにメモしてください。

(2)「curl -OL https://github.com/tensorflow/tensorflow/raw/r1.5/tensorflow/examples/tutorials/layers/cnn_mnist.py」と入力し、Enterキーを押します。

cnn_mnist.pyがダウンロードされ、Dockerコンテナ内に保存されます。

新しいDockerコンテナを起動した場合は、改めてダウンロードする必要があります。

(3)「python cnn_mnist.py」と入力し、Enterキーを押します。

実行中は以下のような画面が表示されます。

tensor-docker12

残念ながら、WindowsでGPU版TensorFlowを動作させたときと比べると、27~28倍の時間がかかっていますね。

すぐには終わらなそうなので、Dockerコンテナの実行は継続したまま、いったんPowerShellを終了してみましょう。

(4)Ctrlキーを押しながらPキーを押し、続けてCtrlキーを押しながらQキーを押します。

以下の画面のようにPowerShellのプロンプトに戻ります。

tensor-docker13

この状態は、Dockerコンテナは動作が継続し、PowerShellに戻ってきた状態です。

(5)「exit」と入力し、Enterキーを押します。

PowerShellは終了しましたが、Dockerコンテナの動作は継続しています。

次に、現在のDockerコンテナでの計算状況を確認してみます。

(6)もう一度PowerShellを起動し、「docker attach 38029a303d08」と入力して、Enterキーを押します。

ここで「38029a303d08」は、手順(1)を実行したときにメモしたDockerコンテナのIDです。

すこし待つ必要がありますが、以下のような画面が表示されます。

tensor-docker14

確かに動作が継続しているようです。

このようにPowerShellを終了しておけば、誤ってDockerコンテナを停止してしまい、長くかかった学習を不用意に停止してしまうことを防げます。

計算時間がかかりそうな場合は、いったんPowerShellを終了しておくと良いでしょう。

ほかのバージョンのTensorFlowを使用する

TensorFlowのバージョンを指定する場合は、ほかのDockerイメージを使います。

たとえば、TensorFlow 1.5.1を試したい場合は、以下のコマンドを入力します。

docker run -it tensorflow/tensorflow:1.5.1 bash

「1.5.1」のところを「1.6.0」にすれば、TensorFlow 1.6.0を試せます。

ただ、ここに指定できる文字列(タグと呼びます)には制限があり、たとえば「1.4」は指定できません。

指定できるタグについては、以下のサイトで確認してください。

参考:https://hub.docker.com/r/tensorflow/tensorflow/tags/

Dockerコンテナを片付ける

最後に、Dockerコンテナを片付ける操作を確認して、この記事を終わりにしましょう。

すべてPowerShellのプロンプトでコマンドを入力します。

なお、「38029a303d08」は、DockerコンテナのIDですので、お使いのDockerコンテナのIDを入力してください。

DockerコンテナのIDは、以下のコマンドで確認できます。

docker ps -a

Dockerコンテナを停止する

以下のコマンドを入力すると、起動中のDockerコンテナを停止できます。

docker stop 38029a303d08

Dockerコンテナを停止すると、Dockerコンテナで実行していたプログラムはすべて停止します。

Dockerコンテナを削除する

停止しているDockerコンテナを削除できます。

docker rm 38029a303d08

Dockerコンテナを削除すると、Dockerコンテナ起動後に変更したファイルがすべて元に戻り、作成したファイルやダウンロードしたファイルは削除されます。

今回説明した手順では「cnn_mnist.py」をダウンロードしましたが、この「cnn_mnist.py」が削除されます。

Dockerイメージを削除する

Dockerイメージ(tensorflow/tensorflow)から作成したDockerコンテナをすべて削除すれば、Dockerイメージも削除できます。

docker rmi tensorlow/tensorflow

Dockerイメージを保存しておくには、Windows 10のストレージ容量が必要です。

Dockerイメージ(tensorflow/tensorflow)は、ファイルサイズが大きく約1.3GBを超えていますので、不要になったら削除しましょう。

まとめ

今回は、Docker Community Edition for WindowsWindows 10 Proにインストールし、TensorFlow公式のDockerイメージ(tensorflow/tensorflow)を利用して、CPU版TensorFlowを動作させる方法を紹介しました。

Dockerイメージを利用することで、簡単にCPU版TensorFlowを動作させられることが分かっていただけたと思います。

ただ、GPU版TensorFlowと比べてしまうと、圧倒的に遅いことが残念です。

TensorFlowで利用できるGPUがあるなら、頑張ってGPU版TensorFlowをインストールして、そちらを使うことをオススメします!

それでは。

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次