Ubuntu上で、TensorFlowのGPU版をpipでインストールする手順をお伝えする。
TensorFlowのバージョン0.6.0からPython3が使えるようになったので、Python3を用いることにする。

ここに記載されていることの大部分は、TensorFlowのDownload and Setupに記載されている。

環境

OS Ubuntu 14.04.3 LTS(64bit)
Python 3系
CPU Intel(R) Core(TM) i7-6700T CPU @ 2.80GHz
Memory DDR4 16G (8G+8G)
GPU NVIDIA Corporation GM107 [GeForce GTX 750 Ti]

準備

TensorFlowでGPUを使うためには、cuDNN v2 Libraryをインストールしなければならないが、cuDNN v2 Libraryをダウンロードするためには、事前にnVIDIA DEVELOPERのサイト上でアカウントを作成しなければならない。
アカウント作成後、cuDNN v2 Libraryがダウンロードできるようになるまで、およそ1〜2営業日かかるので、アカウント作成は先に済ませておいたほうが良い。

CUDA 7.0のダウンロードとインストール

CUDA 7.0 DownloadsからUbuntu 14.04のNetwork Installer版をダウンロードし、次のコマンドでインストールを行う。


sudo dpkg -i cuda-repo-ubuntu1404_7.0-28_amd64.deb
sudo apt-get update
sudo apt-get install cuda-7-0 

cuDNN v2 Libraryのダウンロードとライブラリの追加

cuDNN ArchiveからcuDNN v2 Library for Linuxをダウンロードし、次のコマンドでライブラリの解凍および移動を行う。


tar xvzf cudnn-6.5-linux-x64-v2.tgz 
sudo cp cudnn-6.5-linux-x64-v2/cudnn.h /usr/local/cuda/include
sudo cp cudnn-6.5-linux-x64-v2/libcudnn* /usr/local/cuda/lib64

環境変数の設定

Ubuntuの起動時に自動的に環境変数を読み込ませるため、~/.profileに環境変数を追記する。


vim ~/.profile

最下部に次を追記する。


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

即時反映させるため、次のコマンドを実行する。


source ~/.profile

環境変数が追加されているかを確認するため、次のコマンドを実行する。


export -p

TensorFlowのインストール

TensorFlowをpipでインストールする。Python3系を使うため、Python3用のpipをインストールしておく。


sudo apt-get install python3-pip python3-dev

TensorFlow GPU版をインスールするため、次のコマンドを実行する。


sudo pip3 install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.6.0-cp34-none-linux_x86_64.whl

TensorFlowは/usr/local/lib/python3.4/dist-packages以下に配置される。

TensorFlowのテスト

TensorFlowがきちんと動くかどうか、テストする。
ここでは、ターミナル上でPython3を起動し、対話型で入力していく。
下のコードで「>>>」の右側が入力する文字となる。
対話を終了するには、「exit()」を入力すれば良い。
下のコードを簡単説明すると、TensorFlow上で10+32を計算している。


python3 
(out)Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
(out)[GCC 4.8.4] on linux
(out)Type "help", "copyright", "credits" or "license" for more information.
(con)import tensorflow as tf
(out)I tensorflow/stream_executor/dso_loader.cc:101] successfully opened CUDA library libcublas.so.7.0 locally
(out)I tensorflow/stream_executor/dso_loader.cc:101] successfully opened CUDA library libcudnn.so.6.5 locally
(out)I tensorflow/stream_executor/dso_loader.cc:101] successfully opened CUDA library libcufft.so.7.0 locally
(out)I tensorflow/stream_executor/dso_loader.cc:101] successfully opened CUDA library libcuda.so locally
(out)I tensorflow/stream_executor/dso_loader.cc:101] successfully opened CUDA library libcurand.so.7.0 locally
(con)hello = tf.constant('Hello, TensorFlow!')
(con)sess = tf.Session()
(out)I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 8
(out)I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:909] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
(out)I tensorflow/core/common_runtime/gpu/gpu_init.cc:103] Found device 0 with properties: 
(out)name: GeForce GTX 750 Ti
(out)major: 5 minor: 0 memoryClockRate (GHz) 1.0845
(out)pciBusID 0000:01:00.0
(out)Total memory: 2.00GiB
(out)Free memory: 1.56GiB
(out)I tensorflow/core/common_runtime/gpu/gpu_init.cc:127] DMA: 0 
(out)I tensorflow/core/common_runtime/gpu/gpu_init.cc:137] 0:   Y 
(out)I tensorflow/core/common_runtime/gpu/gpu_device.cc:702] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 750 Ti, pci bus id: 0000:01:00.0)
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:42] Allocating 1.37GiB bytes.
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:52] GPU 0 memory begins at 0x701a40000 extends to 0x759128000
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 1.0KiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 2.0KiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 4.0KiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 8.0KiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 16.0KiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 32.0KiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 64.0KiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 128.0KiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 256.0KiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 512.0KiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 1.00MiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 2.00MiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 4.00MiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 8.00MiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 16.00MiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 32.00MiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 64.00MiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 128.00MiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 256.00MiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 512.00MiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 1.00GiB
(out)I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:66] Creating bin of max chunk size 2.00GiB
(out)I tensorflow/core/common_runtime/direct_session.cc:58] Direct session inter op parallelism threads: 8
(con)print(sess.run(hello))
(out)b'Hello, TensorFlow!'
(con)a = tf.constant(10)
(con)b = tf.constant(32)
(con)print(sess.run(a + b))
(out)42
(con)exit()

エラー

もし、「import tensorflow as tf」の後に、次のようなエラーが表示されたら、環境変数が設定されていない可能性が高いので、今一度、環境変数を見直すことをおすすめする。


ImportError: libcudart.so.7.0: cannot open shared object file: No such file or directory
TensorFlow×Ubuntu GPU版をpipでインスールする手順