macOS+pyenv+TensorFlowでGPUを使おうとしてハマった


環境
===================================================

macOS : Sierra
pyenv : 1.0.10
TensorFlow : 1.0.1

ハマった内容
===================================================

DockerでTensorFlowを実行していたんだけど限界を感じたので「やっぱりGPUや！GPGPU入門や！」としようとしたらハマった。

インストール方法
---------------------------------------------------

`pyenv`でAnacondaを用意して、PipでTensorFlowをインストールした


### pyenv

だいぶ前だったので覚えてないけれど、Homebrewを使った気がする

``` shell
$ brew update
$ brew install pyenv
```

参考 : [pyenv/pyenv: Simple Python version management](https://github.com/pyenv/pyenv#homebrew-on-mac-os-x)


### CUDA & cuDNN

[Download and Setup  |  TensorFlow](https://www.tensorflow.org/versions/r0.12/get_started/os_setup#optional_setup_gpu_for_mac)を参考にしてセットアップする

easy_installは使わなかった。

感想でしかないのだけれど、こういうTensorFlowの範疇外のノウハウまで書かれているのはTensorFlowのユーザーの広がりと、サポートの大変さがにじみ出ていると思う。

### TensorFlow

Jupyter Notebookを使いたいので、pyenvでAnacondaを利用

```shell
$ pyenv local anaconda3-x.x.x
```

なお、次のようなことをやろうとするとうまく行かなかった(ログを残せばよかった)

```
$ pyenv virtualenv anaconda3-x.x.x tensorflow
$ pyenv shell tensorflow
$ jupyter-notebook


# (この環境にはjupyter-notebookというコマンドが無いのでanaconda3-x.x.xを使ってね的なエラーメッセージ)

```

エラー内容
---------------------------------------------------

ここまで実行しても`import tensorflow`が通らなかった

StackOverflowでも同じバグを踏んでいる人が居た

* [Library not loaded: @rpath/libcudart.8.0.dylib when running TF GPU on MacOS · Issue #6729 · tensorflow/tensorflow](https://github.com/tensorflow/tensorflow/issues/6729#issuecomment-279483546)

* [python - 'Library not loaded: @rpath/libcudart.7.5.dylib' TensorFlow Error on Mac - Stack Overflow](http://stackoverflow.com/questions/38710339/library-not-loaded-rpath-libcudart-7-5-dylib-tensorflow-error-on-mac/41073045#41073045)


解決策
---------------------------------------------------

Githubでissueに解決策が書かれていた

* [Library not loaded: @rpath/libcudart.8.0.dylib when running TF GPU on MacOS · Issue #6729 · tensorflow/tensorflow](https://github.com/tensorflow/tensorflow/issues/6729#issuecomment-279483546)

他にもいくつか解決策が書かれていたけれど、結局これにしたがってmacOSのSIP (Security Integrity Protection) を切った

原因
---------------------------------------------------

Homebrewでインストールした場合、cudaは`/Developer/NVIDIA/CUDA-8.0/`にインストールされ、`/usr/local/cuda`にエイリアスが作成される

インストール先のディレクトリ`/usr/local/cuda`がmacOSでSIPにより保護されているため、pythonからアクセス出来ないのが原因

なので色々と対処方法は考えられるけれど、cuda, cuDNN, TensorFlowのアップデートの手間を考えてSIPを切った

Disclaimer
---------------------------------------------------

上記の内容はOSに備えられたセキュリティ機構を自らオフにしています

CentOSでselinuxをOffにするのと同様に、実行する場合は自己責任で実行ください

Reference
===================================================

TensorFlow
---------------------------------------------------

* [Download and Setup  |  TensorFlow](https://www.tensorflow.org/versions/r0.12/get_started/os_setup#pip_installation)

* [Anaconda 環境に Google の人工知能オープンソース Tensorflow をインストールしてみた - datalove’s diary](http://datalove.hatenadiary.jp/entry/python/anaconda/install-tensorflow-into-anaconda-environment)

* ["import tensorflow" terminated by signal SIGSEGV (Address boundary error) - Stack Overflow](http://stackoverflow.com/questions/42073336/import-tensorflow-terminated-by-signal-sigsegv-address-boundary-error)

* [Library not loaded: @rpath/libcudart.8.0.dylib - Google 検索](https://www.google.co.jp/search?q=Library+not+loaded%3A+%40rpath%2Flibcudart.8.0.dylib&oq=Library+not+loaded%3A+%40rpath%2Flibcudart.8.0.dylib&aqs=chrome..69i58j69i57.4219j0j4&sourceid=chrome&ie=UTF-8)

* [ipython ImportError: Library not loaded: @rpath/libcudart.8.0.dylib · Issue #5141 · tensorflow/tensorflow](https://github.com/tensorflow/tensorflow/issues/5141)


cuda & cuDNN
---------------------------------------------------

* [NVIDIA cuDNN | NVIDIA Developer](https://developer.nvidia.com/cudnn)

* [How to enable cuda support for tensor flow on Mac OS X (Updated on April:2016 Tensorflow 0.8)](https://gist.github.com/Mistobaan/dd32287eeb6859c6668d)

pyenv
---------------------------------------------------

* [pyenv/pyenv: Simple Python version management](https://github.com/pyenv/pyenv#homebrew-on-mac-os-x)

* [pyenv/COMMANDS.md at master · pyenv/pyenv](https://github.com/pyenv/pyenv/blob/master/COMMANDS.md)

* [pyenv-virtualenv + TensorFlow 環境設定覚書【加筆・修正】 - Qiita](http://qiita.com/antimon2/items/b162c05c6da06ad34f0d)


* [データサイエンティストを目指す人のpython環境構築 2016 - Qiita](http://qiita.com/y__sama/items/5b62d31cb7e6ed50f02c)

* [pyenv-virtualenvの使い方 - Qiita](http://qiita.com/ryskiwt/items/eb39bca9762043601675)

* [Python3なTensorFlow環境構築 (Macとpyenv virtualenv) - Qiita](http://qiita.com/hatapu/items/054dbab03607c47cb84f)

* [pyenv-virtualenvでディレクトリ単位のpython環境構築 - Qiita](http://qiita.com/niwak2/items/5490607be32202ce1314)

Jupyter
---------------------------------------------------

* [Jupyter事始め - Qiita](http://qiita.com/taka4sato/items/2c3397ff34c440044978)

Dynamic Library周り
---------------------------------------------------

* [dynamic library の OS Xの補足 - Qiita](http://qiita.com/false-git@github/items/cb4528701752f76cfaa7)

* [Macでrpathを渡したり確認したり【なれない日記20160715】 - けつあご日記](http://www.ketsuago.com/entry/2016/07/15/031230)


SIP無効化
---------------------------------------------------

* [Mac OS X El CapiptanでSIPを無効化する - Qiita](http://qiita.com/zaburo/items/c650cda45c858fe856a9)