Jupyter Notebook + TensorBoard under Docker

今回のTensorflowに関する13回の連載で、頭の中に散在していたTensorflowの知識について、かなり整理できた。あとは応用部分ということでしょう。ところで、TensorflowやTensorboardは、Dockerコンテナ環境ですべて動かしている。複雑なTensorflowによるNeural Networkの動作では、単にAnacondaからJupyter Notebookを立ち上げて動かしていいるとメモリー不足となることがあり、メモリーの割当管理もDocker上では行いやすい。

Dockerコンテナ環境上でのJupyter Notebook:

でウェブ 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 等):

?ビルド

イメージファイルがダウンロードされる(時間がかかる)

?起動

?ウェブブラウザから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を一度ダウンさせて再起動させてとすれば、確実であろう。