macOSでTensorFlow(GPU版)がアップデートできなかった


v1.0.1からv.1.3.0にアップデートしようとしたときにいきなりハマりましたのでそこから共有します。

# TensorFlow in your local macOS

TensorFlow同梱版のKerasを使うために、TensorFlowをローカルでアップデートしようとしたらできないことが判明しました。正確に言うと、推奨されていないことがわかりました。

## TensorFlowバージョン確認

何はともあれ現状確認からです。バージョン確認は次のようにして実施できます。

```python
import tensorflow as tf
tf.__version__
# '1.0.1'
```

* [はじめての人工知能。インストールされている Tensorflow のバージョンを確認する方法。 - Qiita](http://qiita.com/Leonhard/items/a65d146179710f77b40d)

## TensorFlow doesn't support GPU on macOS

[Installing TensorFlow on Mac OS X](https://www.tensorflow.org/install/install_mac#installing_with_docker)によると、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](https://github.com/tensorflow/tensorflow/issues/12770)

> 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](https://gist.github.com/ageitgey/819a51afa4613649bd18)
* [osx - tensorflow Mac OS gpu support - Stack Overflow](https://stackoverflow.com/questions/44744737/tensorflow-mac-os-gpu-support)

ただ、問題が起こることは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
```

* [tensorflow/tensorflow - Docker Hub](https://hub.docker.com/r/tensorflow/tensorflow/)

今回はPython3で利用したいので`:latest`ではなく`:latest-py3`を利用します。

```bash
$ docker pull tensorflow/tensorflow:latest-py3
```

それ以外にもバージョンを指定してインストールできるように沢山のイメージがありますので、適当に作りたい場合やバージョンを固定したい場合、macOSでGPUサポートを有効したバージョン(v1.1)と最新版を共存させたい場合などにもDockerが選択肢に上がるかと思います。

![スクリーンショット 2017-09-03 13.30.24.png](https://qiita-image-store.s3.amazonaws.com/0/41266/705f0355-c6a4-36f9-ef52-8cc09d0f4465.png "スクリーンショット 2017-09-03 13.30.24.png")

* [tensorflow/tensorflow - Docker Hub](https://hub.docker.com/r/tensorflow/tensorflow/tags/)


### One of Other Choices

他にもJupyterから[jupyter/tensorflow-notebook](https://hub.docker.com/r/jupyter/tensorflow-notebook/)という気になる名前のDocker Imageが出ているのでこちら試してみました。

* [tensorflow/README.md at master · tensorflow/tensorflow](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docker/README.md)
* [jupyter/docker-stacks: Opinionated stacks of ready-to-run Jupyter applications in Docker.](https://github.com/jupyter/docker-stacks)

こちら、TensorFlowをAnacondaを使ってインストールしているためTensorBoardがまともに動きません…。バッチリこっちの内容に引っかかります。

* [[TensorFlow] TensorBoardを動作させたいときはpipでインストールする - Qiita](http://qiita.com/hitomatagi/items/b968ea086e31ef6cb26d)

TensorBoardを用いたデバッグがしたい場合は、改めてpipでインストールすると可能になります。こちらそんなに時間かからないので、必要になった段階で試せば十分な感じでした。