ひるね日記

調べ物の備忘録とか

Tensorflow環境構築の奮闘記@Ubuntu16.04.3

前回の記事Ubuntuが使えるようになったところで次はTensorflowを使えるようにしましょう。

今回の記事ではTensorflowのCIFAR10のコードが動かせるところまでを解説します。
github.com

パッケージのアップデート

とりあえずおまじない。

$ sudo apt-get update
$ sudo apt-get upgrade

ホーム下のディレクトリ名の英語化

ここが日本語なのが気に触るので英語に変更します。
別にしなくてもいいです。

$ LANG=C xdg-user-dirs-gtk-update
$ sudo reboot

pipのインストール

pipをインストールします。

$ sudo apt-get install python-pip python-dev

CUDAのインストール

こちらのページに従ってCUDAをインストールしていきます。
CUDA Toolkit 9.1 Download | NVIDIA Developer
私はdeb(local)を選択しました。そして書いてあるがままにコマンドを叩く。

$ sudo dpkg -i cuda-repo-ubuntu1604-9-1-local_9.1.85-1_amd64.deb
$ sudo apt-key add /var/cuda-repo-<version>/7fa2af80.pub
$ sudo apt-get update
$ sudo apt-get install cuda

ここで、驚くべき自体が発生しました。。。
nvidia-smiコマンドを叩くと、、、

$ nvidia-smi
Failed to initialize NVML: Driver/library version mismatch

なんとエラーが!実は一度目はこの問題を上手に解決できずにUbuntuを再インストールしました。。。(泣
こちらの記事では「再起動したら治ったぜ!!」と書いてますが、私は再起動するとログインすらできなくなりました。。。(泣
cuda - NVIDIA NVML Driver/library version mismatch - Stack Overflow
どうやらDriverのバージョンが合っていないと怒られているようなので、前の記事でインストールしたnvidia-387の一つ前のバージョンnvidia-384をインストールすると解決しました。

$ sudo apt-get install nvidia-384

ここで一度再起動します。ドライバー周りを設定するときは頻繁に動作確認して再起動するのが良いです

cuDNNのインストール

こちらのページに従ってcuDNNをインストールしていきます。
NVIDIA cuDNN | NVIDIA Developer
ちなみにアカウントを持っていないとcuDNNはダウンロードできないのでアカウントを作成してください。

Linux向けのTar形式使う場合

tarを好きな場所で展開します。

$ tar -xzvf cudnn-9.0-linux-x64-v7.tgz

cudaがインストールされたディレクトリの中にコピーしていきます。

$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn.h

deb形式のものを使う場合

三種類のdebを使用します。

$ cd <workdir>
$ sudo dpkg -i libcudnn7_7.0.5.15-1+cuda9.1_amd64.deb
$ sudo dpkg -i libcudnn7-dev_7.0.5.15-1+cuda9.1_amd64.deb
$ sudo dpkg -i libcudnn7-doc_7.0.5.15-1+cuda9.1_amd64.deb

動作チェック

$ cp -r /usr/src/cudnn_samples_v7/ ~
$ cd ~/cudnn_samples_v7/mnistCUDNN/
$ make clean && make
$ ./mnistCUDNN

はい動かない〜〜〜泣

Error: CUDA driver version is insufficient for CUDA runtime version

奮闘記

いろいろと格闘して、投げ出しそうになった時、、、神のような記事を見つけた。。。
Ubuntu 16.04.3にCUDA 8.0とcuDNN 6.0をインストールして、TensorFlow GPUの環境を作成する - Qiita
どうやらCUDA9シリーズは人類には早すぎたのが原因のようです。(2018/01/31現在)
解決策は[ドライバ周りのゴミを一掃する]->[CUDA8.0のインストールに向けて突き進む]です。
以下にお世話になったコマンドをまとめておきます。

ドライバ周りのゴミを一掃

$ dpkg -l | grep nvidia
$ dpkg -l | grep cuda
$ sudo apt-get --purge remove nvidia-*
$ sudo apt-get --purge remove cuda-*

NVIDIAドライバをインストール

Ubuntu16.04.3では何故かnvidia-384しかうまく動かないのか?

$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt-get update
$ apt-cache search 'nvidia-[0-9]+$'
$ sudo apt install nvidia-384
$ reboot

CUDA8.0をインストール

$ sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
$ sudo apt-get update
$ sudo apt-get install cuda-8-0

cuDNN v7.0.5 for CUDA8.0のインストール

$ tar xfvz cudnn-8.0-linux-x64-v7.tgz
$ sudo cp cuda/include/cudnn.h /usr/local/cuda-8.0/include/
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda-8.0/lib64/
$ sudo chmod a+r /usr/local/cuda-8.0/lib64/libcudnn*

パスの設定

$ echo 'export PATH="/usr/local/cuda/bin:$PATH"' >> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"' >> ~/.bashrc
$ source ~/.bashrc

動作確認

$ cd ~/cudnn_samples_v7/mnistCUDNN/
$ make clean && make
$ ./mnistCUDNN

動きました。ありがとうございますm(__)m

TensorFlow GPUインストール

いよいよです。こちらのページを参考にしながら進めます。
Installing TensorFlow on Ubuntu  |  TensorFlow

$ sudo apt-get install libcupti-dev

[Installing with native pip]で行きたいと思います。(仮想環境とかもうややこしいからヤメて。。。)

$ pip install --upgrade pip
$ pip install tensorflow-gpu

しかし、これでは

$ python
>>import tensorflow as tf
ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory

怒られてしまいました。実は最近tensorflow v1.5がリリースされたのですが、これはCUDA9向けでCUDA8.0を使う場合はtensorflow v1.4を使わないとダメみたいです。
ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory · Issue #15604 · tensorflow/tensorflow · GitHub
ということでv1.4をインストール

$ sudo pip install --upgrade tensorflow-gpu==1.4

ですが1.4はcuDNNのv6でしか動かないようです。

$ tar xfvz cudnn-8.0-linux-x64-v6.0.tgz
$ sudo cp cuda/include/cudnn.h /usr/local/cuda-8.0/include/
$ sudo cp cuda/lib64/libcudnn* /usr/local/cuda-8.0/lib64/
$ sudo chmod a+r /usr/local/cuda-8.0/lib64/libcudnn*

をやり直すと動くようになりました。。。しんど。。。

おまけ

$ sudo apt-get install git
$ git clone https://github.com/tensorflow/models.git
$ cd models/tutorials/image/cifar10
$ python cifar10_train.py 

動いた!!!!!!!