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
動いた!!!!!!!