TensorFlow GPU インストール手順 - 2016年12月13日版

久しぶりに TensorFlow GPU 版をセットアップしたら簡単になっていたのでメモっておきます。なお、これは2016年12月13日に行った方法なので日付が変わると手順が変わるかもしれません。

#セットアップ環境

+ OS: Ubuntu 16.04 Desktop （デュアルブートで Windows 10）
+ GPU: TITAN X (Maxwell)
+ TensoeFlow: 0.12
+ CUDA: 8.0
+ cuDNN: 5.1


少し話がそれますが、ディープラーニングで使う高性能なGPUを持っていると最新の3Dゲームが遊びたくなると思います。その場合には、まず PC に Windows 10 をインストールし、その後で Ubuntu 16.04 Desktop をインストールすると簡単にデュアルブート環境が作れます。キモは Ubuntu 16.04 Server でもなく、Ubuntu 14.04 Desktop でもなく、Ubuntu 16.04 Desktop を使い、かつ日本語版をインストールする事です。英語版だと少しやっかいな作業が必要になると思います。興味があれは調べてみてください。

#Ubuntu を更新

Ubuntu 16.04 Desktop をインストールしただけの状態から説明します。まずは ubuntu を更新します。

```shell-session
$ sudo apt-get update
$ sudo apt-get upgrade
```

#CUDA のインストール

CUDA Toolkit 8.0 をインストールします。

```shell-session
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.44-1_amd64.debsudo dpkg -i cuda-repo-ubuntu1604_8.0.44-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
```

#cuDNN のインストール

cuDNN のインストールだけはまだまだ大変です。

[こちら](https://developer.nvidia.com/rdp/cudnn-download)のサイトに登録し（登録完了まで何日かかかるかもしれません）、`cudnn-8.0-linux-x64-v5.1.tgz` をダウンロードしてください。

ダウンロード画面はこのような表示になっています。

<img width="396" alt="cuDNN_Download___NVIDIA_Developer.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/33704/44b008df-6835-4b16-1cd6-7255438d688f.jpeg">

ファイルをDLして展開して適切な場所にコピーします。

```shell-session
tar zxvf cudnn-8.0-linux-x64-v5.1.tgz
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/lib64/libcudnn*
```

ファイルにパスを通しすため `.bashrc` の末尾に以下を書き足します。

```
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"
export CUDA_HOME=/usr/local/cuda
```

設定を反映させるコマンドを実行します。

```
$ . .bashrc
```

#TensorFlow のインストール

```shell-session
$ sudo apt-get install python-pip python-dev
$ pip install tensorflow-gpu
```

インストールされたか確認します。

```shell-session
$ pip freeze
funcsigs==1.0.2
mock==2.0.0
numpy==1.11.2
pbr==1.10.0
pkg-resources==0.0.0
protobuf==3.1.0
six==1.10.0
tensorflow-gpu==0.12.0rc1
```

`tensorflow-gpu==0.12.0rc1` がインストールされたようです。

#TensorFlow の動作チェック

コマンドとコードを打ち込みこのように表示されれば問題なく動いていると思います。

```shell-session
$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcurand.so locally
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties:
name: GeForce GTX TITAN X
major: 5 minor: 2 memoryClockRate (GHz) 1.076
pciBusID 0000:01:00.0
Total memory: 11.92GiB
Free memory: 11.81GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX TITAN X, pci bus id: 0000:01:00.0)
>>> print(sess.run(hello))
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(16)
>>> print(sess.run(a + b))
26
>>> b = tf.constant(32)
>>> print(sess.run(a + b))
42
```

#おわりに

CUDA と cuDNN のインストールはまだ熟れてないのでもっと簡単にして欲しい！みんながんばれ！