TensorFlow 0.8 GPU 版を Ubuntu 14.04 にインストール

# 概要
TensorFlow の GPU 版をインストールするときは CUDA, cuDNN のバージョンをしっかりと合わせないと正常に動かない場合があります。TensorFlow 0.8 GPU 版のインストールに成功したので手順をメモしておきます。

# 環境
+ OS: Ubuntu Server 14.04 LTS (64bit) クリーンインストールし openssh-server のみをインストールした状態
+ GPU: NVIDIA TITAN X

# CUDA, cuDNN の入手
CUDA 7.5 と cuDNN v4 をダウンロードして Ubuntu の ~ に配置しておきます。

CUDA 7.5 は[こちら](https://developer.nvidia.com/cuda-downloads)から`cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb` をダウンロードしてください。

cuDNN v4 は[こちら](https://developer.nvidia.com/rdp/form/cudnn-download-survey)のサイトでアカウントを作成したのちログインし、アンケートをいくつか答えたのち`cuDNN v4 Library for Linux`のリンクから`cudnn-7.0-linux-x64-v4.0-prod.tgz`をダウンロードしてください。

# CUDA 7.5 のインストール
``` sh
$ sudo dpkg -i cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb
$ sudo apt-get update
$ sudo apt-get install cuda
```

# cuDNN v4 のインストール
``` sh
$ tar xvzf cudnn-7.0-linux-x64-v4.0-prod.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"
export CUDA_HOME=/usr/local/cuda
```

設定を反映させる

``` sh
$ . ~/.bashrc
```

# TensorFlow のインストール

virtualenv で TensorFlow のインストール先を作成

``` sh
$ sudo apt-get install python-dev python-virtualenv
$ virtualenv ~/tensorflow-GPU
$ . ~/tensorflow-GPU/bin/activate
```

TensorFlow をインストール

``` sh
$ pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.8.0rc0-cp27-none-linux_x86_64.whl
```
# 動作確認

シンプルなサンプルで動作確認を行います。CPU 版と同じ以下のコードを実行します。

``` sh
$ python
...
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print(sess.run(a + b))
42
>>>
```

GPU 版では以下のような出力に変わります。

``` sh
$ python
...
>>> import tensorflow as tf
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcurand.so locally
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:900] 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_init.cc:102] 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: 12.00GiB
Free memory: 11.87GiB
I tensorflow/core/common_runtime/gpu/gpu_init.cc:126] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_init.cc:136] 0:   Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:755] 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(32)
>>> print(sess.run(a + b))
42
```

コンソールを新しく立ち上げた場合などは以下のコマンドを実行して TensorFlow を有効にします。

``` sh
$ . ~/tensorflow-GPU/bin/activate
```

# GPU だとどれくらい速くなるの？

[Deep MNIST for Experts](https://www.tensorflow.org/versions/r0.8/tutorials/mnist/pros/index.html) を CPU で実行した場合は30分かかりました。 CPU は Intel Core i7-6700K なので速い部類だと思います。しかし TITAN X で実行するとなんと1分30秒に短縮されます。GPU での実行速度は圧倒的という感じです。