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

  • 0
    いいね
  • 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無効化