Overview
TensorFlow, Caffe, Chainer と Deep Learningの大御所を、Ubuntu 16.04 + CUDA-8.0RC + cuDNN5.0 で 一気にsetupしてみた。
(現時点では、tensorflow with CUDA on Ubuntu 16.04だとbuild breakするので、patchを作って対処していますので、お役に立てば幸いです. )
下準備
GTX-1080 など GeForce を Ubuntu 16.04 LTS で CUDA-8.0RC と共に使う を参考に、Ubuntu 16.04LTSで、CUDA-8.0RCを、お手持ちのGeForce (GTX-1080, 1070, 750Tiなど、CUDA Computing Capability 3.0以上のGPUで.)
TensorFlow
CUDA-8.0は、source code buildしないとサポートされていませんので、source codeを取得してbuildしていくという手順です。
pip環境準備 (optional)
$ sudo apt-get install python-pip python-dev -y
$ sudo pip install --upgrade pip
TensorFlowをbuildするのに必要なもののinstall
Bazel の install
$ wget https://github.com/bazelbuild/bazel/releases/download/0.3.0/bazel-0.3.0-installer-linux-x86_64.sh
$ chmod +x bazel-0.3.0-installer-linux-x86_64.sh
$ ./bazel-0.3.0-installer-linux-x86_64.sh --user
~/.bashrc に以下を追加
source /home/hidenorly/.bazel/bin/bazel-complete.bash
export PATH=$PATH:/home/hidenorly/.bazel/bin
$ source ~/.bashrc
依存componentのinstall
$ sudo apt-get install python-numpy swig python-dev python-wheel
cuDNN5.0のinstall
CUDA-8.0とともに使えるのは、まだcuDNN5.0のみです。
(今後cuDNN5.1が利用可能になるようですが未確認です)
cuDNNは nVIDIA cuDNNからdownloadしてください(要登録)
$ cd ~/work/cuda
$ tar zxvf cudnn-8.0-linux-x64-v5.0-ga.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/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
TensorFlowのdownload
$ git clone https://github.com/tensorflow/tensorflow
TensorFlowのBuild
~/work/tensorflow$ ./configure
まず全部defaultでOkです。
で、masterは、Ubuntu 16.04とCUDAの組み合わせではbuildが通りませんので、以下のpatchを当てます. masterだけでなく、v0.9 tagでも同様でした。
diff --git a/third_party/gpus/crosstool/CROSSTOOL b/third_party/gpus/crosstool/CROSSTOOL
index 8db81a9..61250bc 100644
--- a/third_party/gpus/crosstool/CROSSTOOL
+++ b/third_party/gpus/crosstool/CROSSTOOL
@@ -52,6 +52,8 @@ toolchain {
cxx_flag: "-std=c++11"
linker_flag: "-lstdc++"
linker_flag: "-B/usr/bin/"
+ linker_flag: "-lrt"
+ linker_flag: "-lm"
~/work/tensorflow$ bazel build -c opt --config=cuda //tensorflow/cc:tutorials_example_trainer
$ bazel build -c opt --config=cuda //tensorflow/tools/pip_package:build_pip_package
$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
$ sudo pip install /tmp/tensorflow_pkg/tensorflow-X.X.X-py2-none-any.whl
最後の数字はX.X.Xは、その時によるので、補完したりしてみてください。
あとは、tensorflow/exampleの中を動かしてみたりして、動作中に、
$ nvidia-smi
して、pythonが利用していれば、ちゃんとGPU使われています。
Caffe
依存するcomponentのinstall
$ sudo apt-get install -y build-essential cmake git pkg-config
$ sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
$ sudo apt-get install -y libatlas-base-dev
$ sudo apt-get install -y --no-install-recommends libboost-all-dev
$ sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev
$ sudo apt-get install -y python-pip python-dev python-numpy python-scipy
$ sudo apt-get install -y libopencv-dev
python2で使う人向け
$ sudo apt-get install --assume-yes libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip
python3で使う人向け
$ sudo apt-get install ffmpeg libopencv-dev libgtk-3-dev python-numpy python3-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libv4l-dev libtbb-dev qtbase5-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip
Caffeのdownload
$ git clone https://github.com/BVLC/caffe.git
$ cd caffe
$ cp Makefile.config.example Makefile.config
makefileの編集
# cuDNN acceleration switch (uncomment to build with cuDNN).
-# USE_CUDNN := 1
+USE_CUDNN := 1
依存コンポーネントの処理
$ find . -type f -exec sed -i -e 's^"hdf5.h"^"hdf5/serial/hdf5.h"^g' -e 's^"hdf5_hl.h"^"hdf5/serial/hdf5_hl.h"^g' '{}' \;
$ cd /usr/lib/x86_64-linux-gnu
$ sudo ln -s libhdf5_serial.so libhdf5.so
$ sudo ln -s libhdf5_serial_hl.so libhdf5_hl.so
$ cd ~/work/caffe/python
$ sudo su
# for req in $(cat requirements.txt); do pip install $req; done
build
$ cd ~/work/caffe
$ make all
$ make test
$ make runtest
$ make distribute
Chainer
.bashrcの設定
export CUDA_PATH=$CUDA_HOME
$ source ~/.bashrc
依存コンポーネントのinstall (skip可能. Caffeでinstall済みのはず)
$ sudo apt-get install libhdf5-dev
$ pip intall h5py
source code取得
$ git clone https://github.com/pfnet/chainer.git
build
$ cd chainer
$ sudo CUDA_PATH=/usr/local/cuda python setup.py develop
ちなみに、動作確認
~/work/chainer/examples/word2vec$ python ../ptb/download.py
~/work/chainer/examples/word2vec$ python train_word2vec.py --gpu 0
別のconsoleで、
$ nvidia-smi
です。
あんまりGPUに負荷かけられていないので、chainerは、tensorflowに比べると速度の面ではいまいちかもですが、--gpu 0を入れない状態で、GTX750Tiでも、i7-870 CPUの10倍高速でした。
なお、GTX-1080はGTX-750Tiの6倍速いです。
( 価格は今10倍ぐらいですけど :-) )