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

  • 2
    いいね
  • 0
    コメント

環境

macOS : Sierra
pyenv : 1.0.10
TensorFlow : 1.0.1

ハマった内容

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

インストール方法

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

pyenv

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

$ brew update
$ brew install pyenv

参考 : pyenv/pyenv: Simple Python version management

CUDA & cuDNN

Download and Setup  |  TensorFlowを参考にしてセットアップする

easy_installは使わなかった。

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

TensorFlow

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

$ 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でも同じバグを踏んでいる人が居た

解決策

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

他にもいくつか解決策が書かれていたけれど、結局これにしたがって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

cuda & cuDNN

pyenv

Jupyter

Dynamic Library周り

SIP無効化