日々drdrする人のメモ

今日も明日もdrdr

Ubuntu 16.04: GPUを使うTensorflow (0.9.0)を入れる

少し前、GPUでTensorflow動かしたくて、Ubuntu 16.04に環境整えてたらドライバ入れるときに困ってたりしてたので簡単なメモとしてまとめ

インストールの流れとして、Nvidiaドライバ -> CUDA -> Tensorflow の順番

Nvidiaドライバを入れる

Ubuntuは"システム設定 > ソフトウェアとアップデート"の追加のドライバからNvidiaドライバを入れてみる。(今回はnvidia-367)
ここで再起動したら、ログイン画面まで到達できなくなった。

到達できない状態からCtrl+Alt+F1を入力するとコンソールでログインして操作できたので、Nvidiaドライバを削除。

$ sudo apt-get purge nvidia-*

そしたらGUIのログイン画面が立ち上がった。

どうやら、標準で使われているNouveauを無効にしないといけないらしいので、/etc/modprobe.d/blacklist-nouveau.confに以下の内容を追加。

blacklist nouveau
options nouveau modeset=0

この状態で再起動すると、代わりのドライバとしてxserver-xorg-video-nouveauが使われていた。

あとはGUIのドライバ一覧からインストール。再起動しても正常にログインできた。
コマンド上でnvidia-smiが動くことで動作確認した。

$ nvidia-smi
Fri Oct 28 00:34:06 2016       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 367.44                 Driver Version: 367.44                    |
|-------------------------------+----------------------+----------------------+
...

CUDAを入れる

CUDA ToolkitとcuDNNを入れる。今回入ったCUDAのバージョンは7.5

まず、CUDA Toolkitは以下でインストールした

$ sudo apt-get install nvidia-cuda-toolkit

この時入ったバージョンが4007だったので、それに対応したcuDNNを以下から持ってくる。バージョンが違うと、TensorflowをGPUで動かす時にエラーになる。
(4007に対応するファイルは"cudnn-7.0-linux-x64-v4.0-prod.tgz")
developer.nvidia.com

持ってきたcuDNNを以下で入れる。

$ tar xzf cudnn-7.0-linux-x64-v4.0-prod.tgz
$ sudo cp -a cuda/lib64/* /usr/local/lib/
$ sudo cp -a cuda/include/* /usr/local/include/
$ sudo ldconfig

Tensorflowを入れる

公式の方に導入が書いてあるので、これに合わせて入れるとうまくいった。
https://www.tensorflow.org/versions/r0.9/get_started/os_setup.html

pipはすでに入れてあり、Pythonのバージョンは2.7
ここで入れたTensorflowは0.9.0

$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl
$ sudo pip install --upgrade $TF_BINARY_URL


これでPythonでtensorflowが使えるようになった。

$ python
Python 2.7.12 (default, Sep 21 2016, 02:48:31) 
[GCC 5.3.1 20160413] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcuda.so locally
I tensorflow/stream_executor/dso_loader.cc:108] successfully opened CUDA library libcurand.so locally
>>>