今回のTensorflowに関する13回の連載で、頭の中に散在していたTensorflowの知識について、かなり整理できた。あとは応用部分ということでしょう。ところで、TensorflowやTensorboardは、Dockerコンテナ環境ですべて動かしている。複雑なTensorflowによるNeural Networkの動作では、単にAnacondaからJupyter Notebookを立ち上げて動かしていいるとメモリー不足となることがあり、メモリーの割当管理もDocker上では行いやすい。
Dockerコンテナ環境上でのJupyter Notebook:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
MacBook-Pro:~ $ docker run -it -p 8888:8888 -v $(pwd)/data/notebooks:/data/notebooks --rm tensorflow-project [I NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret [I NotebookApp] JupyterLab beta preview extension loaded from /opt/conda/lib/python3.6/site-packages/jupyterlab [I NotebookApp] JupyterLab application directory is /opt/conda/share/jupyter/lab [I NotebookApp] Serving notebooks from local directory: /data/notebooks [I NotebookApp] 0 active kernels [I NotebookApp] The Jupyter Notebook is running at: [I NotebookApp] http://0.0.0.0:8888/?token=*************************** [I NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [C NotebookApp] 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=*************************** |
でウェブ http://0.0.0.0:8888/ で起動する。
Tensorboardのコードでは、ポイントはtensorboardのログの出力先フォルダを.writer = tf.summary.FileWriter(logdir, sess.graph)を通じて、
logdir = ./logs
と指定して、このあとのtensorbordの読み込み先とマッチする必要がある。
Session()を実行すれば、指定のフォルダlogに、events.out.tfevents.*********と出力ファイルが自動生成される。Tensorboardは、そのファイルを読んで表示する。
ーーーーーーーーーーーーーーーーーーーーーー
Dockerコンテナ上でのTensorboardの起動:
? Dockerfileを作成(~/working_dir 等):
1 2 3 4 5 |
FROM python:3.5 RUN pip install tensorflow WORKDIR /logs ENTRYPOINT ["tensorboard", "--logdir", "/logs"] CMD [] |
?ビルド
1 |
$ docker build . -t tensorboard |
イメージファイルがダウンロードされる(時間がかかる)
?起動
1 2 3 4 5 6 |
$ docker run --rm -it -v /Users/********/data/notebooks/logs:/logs -p 6006:6006 tensorboard MacBook-Pro:tensorboard $ docker run --rm -it -v /Users/*********/data/notebooks/logs:/logs -p 6006:6006 tensorboard TensorBoard 1.12.0 at http://*************:6006 (Press CTRL+C to quit) W1207 Thread-2 application.py:309] path /data/plugin/text/runs not found, sending 404 W1207 application.py:309] path /data/plugin/text/runs not found, sending 404 |
?ウェブブラウザからTensorboardを呼び出す。
http://0.0.0.0:6006/
【参考:Tensorboardの確実な終了方法】
1. Ctlr + Z
2.pgrepコマンドで、プロセス名tensorboardのPIDを表示。lオプションはあってもなくてもいい
$ pgrep -l -f ‘tensorboard’
3.killコマンドの9オプションをつけて、プロセスを止める
$ kill -9 PID
ポイントは、TensorflowのFileWriterクラスのインスタンスwriterについて、writer = tf.summary.FileWriter(‘./logs’, sess.graph)
というように、ログの書き込みフォルダを指定した場合、Tensorboardの立ち上げ時にも、そのフォルダパスを合わして記載する必要がある。加えて、Notebook側では、動かすKernel>Restart Clean Outputをしてからプログラムの実行をしないと、メモリ上に残されている以前のGraphやScalar値がバインドされて出力される。
きちんと確かめたいときは、ログフォルダ./logのファイルを消去して、notebookでKernel>Restart Clean Output後に、プログラムを実行し、次にTensorboardを一度ダウンさせて再起動させてとすれば、確実であろう。