v1.0.1からv.1.3.0にアップデートしようとしたときにいきなりハマりましたのでそこから共有します。
TensorFlow in your local macOS
TensorFlow同梱版のKerasを使うために、TensorFlowをローカルでアップデートしようとしたらできないことが判明しました。正確に言うと、推奨されていないことがわかりました。
TensorFlowバージョン確認
何はともあれ現状確認からです。バージョン確認は次のようにして実施できます。
import tensorflow as tf
tf.__version__
# '1.0.1'
TensorFlow doesn't support GPU on macOS
Installing TensorFlow on Mac OS Xによると、macOSではv1.2.0以降GPUサポートを打ち切ってました。
Note: As of version 1.2, TensorFlow no longer provides GPU support on Mac OS X.
理由を求めてGithubを見に行ったところ、次のIssueが見つかりました。
GPU support on Mac OS X? compile by oneself? · Issue #12770 · tensorflow/tensorflow
The reason is Apple has not released a Mac with an NVIDIA GPU since 2014. We tested with external boxes, but there were too many issues around the drivers and software TF depended on.
Therefore, we decided to drop support for GPUs on MacOS.
一応、GCCを使ったりすればビルドできなくはない様子です。
- Build tensorflow on OSX with NVIDIA CUDA support.md
- osx - tensorflow Mac OS gpu support - Stack Overflow
ただ、問題が起こることはTensorFlowの中の人が確認済みのようなので、今回は避けます。
TensorFlow on your container
環境構築はDockerを利用しました。TensorFlowの環境構築には様々な選択肢がありますが、ここでは最も手数が少なさそうなものを選びました。
TensorFlow Official Image
ローカルで環境構築をする理由も特になくなったため、Dockerを使って環境構築します。今回は公式配布のイメージを使います。公式のイメージを利用するとJupyter NotebookやScikit learnもmatplotlibもscipyもnumpyもついてくるのはもっと知られてもいいんじゃないかと思います。
# works
import numpy as np
import scipy
import matplotlib
import seaborn as sns
import skleran
# doesn't works
# import seaborn
今回はPython3で利用したいので:latest
ではなく:latest-py3
を利用します。
$ docker pull tensorflow/tensorflow:latest-py3
それ以外にもバージョンを指定してインストールできるように沢山のイメージがありますので、適当に作りたい場合やバージョンを固定したい場合、macOSでGPUサポートを有効したバージョン(v1.1)と最新版を共存させたい場合などにもDockerが選択肢に上がるかと思います。
One of Other Choices
他にもJupyterからjupyter/tensorflow-notebookという気になる名前のDocker Imageが出ているのでこちら試してみました。
- tensorflow/README.md at master · tensorflow/tensorflow
- jupyter/docker-stacks: Opinionated stacks of ready-to-run Jupyter applications in Docker.
こちら、TensorFlowをAnacondaを使ってインストールしているためTensorBoardがまともに動きません…。バッチリこっちの内容に引っかかります。
TensorBoardを用いたデバッグがしたい場合は、改めてpipでインストールすると可能になります。こちらそんなに時間かからないので、必要になった段階で試せば十分な感じでした。