TensorFlowを利用するプログラムの開発は進んでいますか?
今回は、以下のようなことで困っているあなたにDockerをオススメする記事を作成しました。
・TensorFlowを試してみたいけど、インストールが大変そう
・TensorFlowはバージョンアップ頻度が高くて、ついていくのが大変すぎる
・TensorFlow 1.5で開発を始めたプログラムが、最新のTensorFlowでも動作するか気になる
Dockerを使えば、TensorFlowを簡単に試せるし、最新バージョン以外のTensorFlowもインストールできるし、開発環境を汚さずに別バージョンのTensorFlowを試せます!
それでは、期待しながら読み進めてください!
Dockerコンテナを利用してTensorFlowを試そう
この記事では、以下の環境での操作を説明しています。
項目 | 説明 |
---|---|
OS | Windows 10 Pro(64ビット) |
Docker | Docker 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アプリケーションです。
現在は、Ubuntu、Debian、CentOS、Red Hat Enterprise Linux、Amazon 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」をクリックします。
Docker for Windows Installer.exeがダウンロードされます。
ダウンロードページにも記載されていますが、Docker Community Edition for Windowsは、Windows 10 Pro(64ビット)またはWindows 10 Enterprise(64ビット)にのみインストールできます。
Chromeを使っていると、ダウンロードが終わるまで空白のページが表示され続けるためとても不安になりますが、ダウンロードはされるはずです。
Chromeを使っていて不安になった場合は、Internet ExplorerやEdge、Firefoxを使うとすぐに反応するので安心できるでしょう。
(2)Docker for Windows Installer.exeを実行します。
(3)「Use Windows containers(省略)」のチェックが外れていることを確認し、「Ok」をクリックします。
Docker Community Edition for Windowsがインストールされます。
(4)「Close」をクリックします。
(5)スタートボタンをクリックし、「Docker for Windows」をクリックします。
(6)Dockerの評価とコメントを入力して、「Submit」をクリックします。
もちろん、何も入力せずに「Dismiss」をクリックしても大丈夫です。
(7)以下の画面が表示されたときは、「Ok」をクリックします。
Windowsが再起動して、WindowsのHyper-V機能が有効になります。
なお、Hyper-V機能を有効にするとVirtualBoxが動作しなくなります。
VirtualBoxを利用するときは、Hyper-V機能を無効にしてください。
ただし、Hyper-V機能を無効にするとDockerは動作しなくなります。
さて、初めてDocker Community Edition for Windowsが起動すると、以下の画面が表示されます。
これで、Docker Community Edition for Windowsのインストールは完了です。
Dockerコンテナを起動しよう
次は、TensorFlowが用意した公式のDockerイメージ(tensorflow/tensorflow)をダウンロードしてDockerコンテナを起動し、Jupyter Notebookにアクセスするまでの操作を説明しましょう。
(1)スタートボタンをクリックし、「Windows PowerShell」→「Windows PowerShell」の順にクリックします。
Windows PowerShell(以降、PowerShell)が起動します。
(2)「docker run -it -p 8888:8888 tensorflow/tensorflow」と入力し、Enterキーを押します。
初めて起動するときは、Dockerイメージ(tensorflow/tensorflow)のダウンロードが始まります。
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(赤枠)にブラウザでアクセスします。
Jupyter Notebookが表示されます。
ここまでの操作で、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キーを押します。
実行中は以下のような画面が表示されます。
残念ながら、WindowsでGPU版TensorFlowを動作させたときと比べると、27~28倍の時間がかかっていますね。
すぐには終わらなそうなので、Dockerコンテナの実行は継続したまま、いったんPowerShellを終了してみましょう。
(4)Ctrlキーを押しながらPキーを押し、続けてCtrlキーを押しながらQキーを押します。
以下の画面のようにPowerShellのプロンプトに戻ります。
この状態は、Dockerコンテナは動作が継続し、PowerShellに戻ってきた状態です。
(5)「exit」と入力し、Enterキーを押します。
PowerShellは終了しましたが、Dockerコンテナの動作は継続しています。
次に、現在のDockerコンテナでの計算状況を確認してみます。
(6)もう一度PowerShellを起動し、「docker attach 38029a303d08」と入力して、Enterキーを押します。
ここで「38029a303d08」は、手順(1)を実行したときにメモしたDockerコンテナのIDです。
すこし待つ必要がありますが、以下のような画面が表示されます。
確かに動作が継続しているようです。
このように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 WindowsをWindows 10 Proにインストールし、TensorFlow公式のDockerイメージ(tensorflow/tensorflow)を利用して、CPU版TensorFlowを動作させる方法を紹介しました。
Dockerイメージを利用することで、簡単にCPU版TensorFlowを動作させられることが分かっていただけたと思います。
ただ、GPU版TensorFlowと比べてしまうと、圧倒的に遅いことが残念です。
TensorFlowで利用できるGPUがあるなら、頑張ってGPU版TensorFlowをインストールして、そちらを使うことをオススメします!
それでは。