CUDA9.1の環境でTensorFlowをインストールする

fast.aiのpart1 v2は基本的に PyTorch を使って進めることになりますが Keras+TensorFlow用の notebook(keras_lesson1.ipynb)が1つだけあります。

これも動かしたる! と思ってTensorFlowのパッケージをインストールしようとしたところ、、

part1 v2用の環境はCUDAのバージョンが9.1となっており、Anacondaやpipを使ってGPU対応のTensorFlowを一発でインストールができないことが分かりました。。(CUDA8.0用にビルドされているため)

が、先人の記事を発見し何とかインストールできました。(๑˃̵ᴗ˂̵)و

deep-rikei.hatenadiary.jp

自分の記事の中で書きたいことはただ1つ。

bazel は 0.7.0 を使おう

(↑の記事の中で推奨とされている通り。最新版はダメ、絶対)

というのも、最初は 「p3インスタンス(V100)上でCUDA+CUDNN+Tensorflowを動かすのが大変だったのできろく。 - 焼肉が食べたい」 の記事を発見し、これを参考に作業してたのですが

bazelのインストールでそのまま真似したら

sudo apt-get -y install openjdk-8-jdk
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update && sudo apt-get install oracle-java8-installer
echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get install bazel
sudo apt-get upgrade bazel

の手順で bazel の 0.9.0がインストールされていて、そのまま進めると TensorFlowのビルド時に大量のエラーメッセージ... ><

記事ではその後、TensorFlowのconfigureスクリプトの実行ログで

$ ./configure
You have bazel 0.7.0 installed.

となっているのでその時だときっと bazel 0.7.0 がインストールされたのでしょう。。

CUDAとcudnnをインストールした以降の手順のメモ

fast.aiの環境構築が済んでいるとCUDAとcudnnは既にインストールされているので 先のid:syakai-jinさんの記事の (16) 以降をやればよいです。

  1. bazelのインストール (0.7.0じゃないとダメ。0.9.0だとビルド時にエラーが出た)

     $ wget https://github.com/bazelbuild/bazel/releases/download/0.7.0/bazel-0.7.0-installer-linux-x86_64.sh
     $ chmod +x bazel-0.7.0-installer-linux-x86_64.sh
     $ ./bazel-0.7.0-installer-linux-x86_64.sh
     $ bazel version
    

    bazel のバージョンが 0.7.0 であることを確認しましょう

  2. export PATH=~/bin:$PATH を.bashrcに追加

  3. 必要なパッケージをインストール

    $ sudo apt-get -y install libcupti-dev

  4. TensorFlowのソースコードを取ってきます

     $ git clone -b v1.4.0 https://github.com/tensorflow/tensorflow
     $ cd tensorflow
     $ ./configure
    
    • Do you wish to build TensorFlow with CUDA support? [y/N]: => Yes
    • Please specify the CUDA SDK version you want to use, e.g. 7.0. [Leave empty to default to CUDA 8.0]: => 9.1
    • Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 6.0]: => 7.0.5

    これら以外は No と ENTER(デフォルトのまま)でよい

    CUDAのバージョンは ls /usr/local/cuda*、cndnnのバージョン確認は ls /usr/local/cuda/lib64/libcudnn.so.* で確認できます

  5. シンボリックリンクを作る

     $ sudo ln -s /usr/local/cuda/include/crt/math_functions.hpp /usr/local/cuda/include/math_functions.hpp
    

    これをしないとファイルがないというビルドエラーになる

  6. ビルド

     $ bazel build -c opt --copt=-march="haswell" --config=cuda //tensorflow/tools/pip_package:build_pip_package
    
  7. パッケージを作成

     $ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg`
    
  8. パッケージをインストール

     $ pip install /tmp/tensorflow_pkg/tensorflow-1.4.0-cp36-cp36m-linux_x86_64.whl`
    

あとは keras と h5py をインストールしましょう。

$ pip install keras
$ conda install h5py # これをインストールしないとweightファイルのload時にエラーが出る