ふとTensorFlowを試してみたくなりました。(そのためにDocker環境作ってました)
で、なかなかよさげなTensorFlowのチュートリアルを発見しました。
TensorFlow入門(https://deepinsider.jp/tutor/introtensorflow)
こちらを参考に進めてみます。
第2回の環境構築でつまづきましたので、そのメモです。
環境は、冒頭に書いたとおり、TensorFlowを試すためにDockerの環境を作ったので、Docker前提で進めます。(Docker環境にしたのは、現状のLinuxMintの環境をできるだけ壊さないためです)
で、TensorFlowの公式サイト(https://www.tensorflow.org/install/)を参考にTensorFlowコンテナをインストール、起動します。
~/docker$ cd tensorflow/ ~/docker/tensorflow$ ~/docker$ cd tensorflow/ ~/docker/tensorflow$ docker pull tensorflow/tensorflow Using default tag: latest latest: Pulling from tensorflow/tensorflow 7b722c1070cd: Pull complete (中略) 9c2312dbc5d7: Pull complete Digest: sha256:40844012558fe881ec58faf1627fd4bb3f64fe9d46a2fd8af70f139244cfb538 Status: Downloaded newer image for tensorflow/tensorflow:latest ~/docker/tensorflow$ docker run -u $(id -u):$(id -g) -it -p 8888:8888 tensorflow/tensorflow ________ _______________ ___ __/__________________________________ ____/__ /________ __ __ / _ _ \_ __ \_ ___/ __ \_ ___/_ /_ __ /_ __ \_ | /| / / _ / / __/ / / /(__ )/ /_/ / / _ __/ _ / / /_/ /_ |/ |/ / /_/ \___//_/ /_//____/ \____//_/ /_/ /_/ \____/____/|__/ You are running this container as user with ID 1000 and group 1000, which should map to the ID and group for your user on the Docker host. Great! tf-docker / >
公式サイトの冒頭の起動方法では、まず docker run コマンドに -u オプションをつけろ、と警告が出ます。上記では「-u $(id -u):$(id -g)」を付けています。
しかし、この環境では python のバージョンを確認すると2.7でした。python3とするためにコンテナのタグに-py3を付けます。
~/docker/tensorflow$ docker run -u $(id -u):$(id -g) -it -p 8888:8888 tensorflow/tensorflow:latest-py3 python Unable to find image 'tensorflow/tensorflow:latest-py3' locally latest-py3: Pulling from tensorflow/tensorflow 7b722c1070cd: Already exists (中略) 3fce84e77cad: Pull complete Digest: sha256:7309cfcdc1adbde8925f8cb301f802053bfa15d69a6605c8b73fe19ce9ab2a78 Status: Downloaded newer image for tensorflow/tensorflow:latest-py3 Python 3.5.2 (default, Nov 12 2018, 13:43:14) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import tensorflow as tf >>> sess = tf.InteractiveSession() 2019-04-19 20:30:24.944775: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 2793680000 Hz 2019-04-19 20:30:24.945045: I tensorflow/compiler/xla/service/service.cc:150] XLA service 0x37004b0 executing computations on platform Host. Devices: 2019-04-19 20:30:24.945079: I tensorflow/compiler/xla/service/service.cc:158] StreamExecutor device (0): <undefined>, <undefined> >>> message = tf.constant('Hello, Tensorflow!') >>> message.eval() b'Hello, Tensorflow!' >>> sess.close() >>>
python3での対話モードでの確認もエラーは出ませんでした。が、こんどは Jupyter Notebookでハマります。結局、ホスト側でJupyter Notebookのディレクトリをまず作ります。
~/docker/tensorflow$ mkdir ~/notebooks
その上で、Jupyter Notebookに対応したイメージを引っ張ってきて起動します。
~/docker/tensorflow$ docker run -u $(id -u):$(id -g) -it --rm -v $(realpath ~/notebooks):/tf -p 8888:8888 tensorflow/tensorflow:latest-py3-jupyter Unable to find image 'tensorflow/tensorflow:latest-py3-jupyter' locally latest-py3-jupyter: Pulling from tensorflow/tensorflow 7b722c1070cd: Pull complete (中略) 12156a969bcb: Pull complete Digest: sha256:aaf427d8590ae2935f6c9d39851380402d7ce422b7e26315f73df59f774614f3 Status: Downloaded newer image for tensorflow/tensorflow:latest-py3-jupyter ________ _______________ ___ __/__________________________________ ____/__ /________ __ __ / _ _ \_ __ \_ ___/ __ \_ ___/_ /_ __ /_ __ \_ | /| / / _ / / __/ / / /(__ )/ /_/ / / _ __/ _ / / /_/ /_ |/ |/ / /_/ \___//_/ /_//____/ \____//_/ /_/ /_/ \____/____/|__/ You are running this container as user with ID 1000 and group 1000, which should map to the ID and group for your user on the Docker host. Great! [I 21:04:46.052 NotebookApp] Writing notebook server cookie secret to /.local/share/jupyter/runtime/notebook_cookie_secret /usr/local/lib/python3.5/dist-packages/IPython/paths.py:68: UserWarning: IPython parent '/' is not a writable location, using a temp directory. " using a temp directory.".format(parent)) [I 21:04:46.328 NotebookApp] Serving notebooks from local directory: /tf [I 21:04:46.328 NotebookApp] The Jupyter Notebook is running at: [I 21:04:46.328 NotebookApp] http://(d3798d48a88f or 127.0.0.1):8888/?token=3dcab8dd69809896495d64041dba74e654c52612ea877c70 [I 21:04:46.328 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [C 21:04:46.334 NotebookApp] To access the notebook, open this file in a browser: file:///.local/share/jupyter/runtime/nbserver-12-open.html Or copy and paste one of these URLs: http://(d3798d48a88f or 127.0.0.1):8888/?token=3dcab8dd69809896495d64041dba74e654c52612ea877c70
ということで、
docker run -u $(id -u):$(id -g) -it --rm -v $(realpath ~/notebooks):/tf -p 8888:8888 tensorflow/tensorflow:latest-py3-jupyter
で起動するのが最終形となりました。起動後、ブラウザで表示されたトークンを含む形(今回の起動であれば http://127.0.0.1:8888/?token=3dcab8dd69809896495d64041dba74e654c52612ea877c70 )にアクセスすると、
こんな感じでアクセスできました。ちなみに、Docker環境を終了させる場合には、Ctrl + Cで「y」入力です。
とりあえず、第2回まで完了です。