久しぶりに 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 を更新します。
$ sudo apt-get update
$ sudo apt-get upgrade
CUDA のインストール
CUDA Toolkit 8.0 をインストールします。
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 のインストールだけはまだまだ大変です。
こちらのサイトに登録し(登録完了まで何日かかかるかもしれません)、cudnn-8.0-linux-x64-v5.1.tgz
をダウンロードしてください。
ダウンロード画面はこのような表示になっています。
ファイルをDLして展開して適切な場所にコピーします。
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 のインストール
$ sudo apt-get install python-pip python-dev
$ pip install tensorflow-gpu
インストールされたか確認します。
$ 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 の動作チェック
コマンドとコードを打ち込みこのように表示されれば問題なく動いていると思います。
$ 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 のインストールはまだ熟れてないのでもっと簡単にして欲しい!みんながんばれ!