CUDA 7.5とcuDNN 5に対応したCaffeがキターッ!

caffe
RCの取れたcuDNN 5がリリースされました。また、NVIDIAのMachine LearningリポジトリでインストールしていたNVIDIAフォークのCaffe「NVcaffe」がアップデートされて、CUDA 7.5とcuDNN 5(cuDNN v5)に対応しました。

スポンサーリンク

ソフトウェアの更新

NVIDIA DIGITS 3.0をインストールしてみた
NVIDIAからDeep Learning用トレーニングシステムのDIGITS 3.0がリリースされていたので、Ubuntu 14.04にインストールしてみました。

上の記事「NVIDIA DIGITS 3.0をインストールしてみた」で、DIGITS 3.0と同時にインストールされたNVIDIAフォークのCaffe「NVcaffe」(パッケージ名:caffe-nv)は、下の記事「DIGITS 3.0のCaffe、CUDA 7.5にリンクされてないってよ」のように、CUDA 7.0とcuDNND 4(cuDNND v4)に対応していました。

DIGITS 3.0のCaffe、CUDA 7.5にリンクされてないってよ
DIGITS 3.0では、リポジトリを登録してインストールを実行すると、DIGITSとCaffe(caffe-nv)等の関連するいくつかのパッケージがインストールされるようになりましたが、勘違いからDIGITS 3.0と一緒にインストールされたCaffeが、動作しなくなっていました。

今回、Ubuntuのランチャーに「ソフトウェアの更新」アイコンが現れたので、アップデートを行いました。再起動後、「Ubuntuソフトウェアセンター」で履歴を確認すると、cuDNN 5(パッケージ名:libcudnn5)が新規にインストールされていました。
また、caffe-nvは、0.14.2-1から0.14.5-2+cuda7.5にアップデートされていました。

(2016/06/17追記)
更に、torch7-nvは、0.9.92から0.9.98-1+cuda7.5にアップデートされていました。

上の記事「DIGITS 3.0のCaffe、CUDA 7.5にリンクされてないってよ」と同じ勘違いを避けるため、リンクされているライブラリを確認してみました。

$ ldd /usr/bin/caffe | grep cu
libcudart.so.7.5 => /usr/local/cuda/lib64/libcudart.so.7.5 (0x00007fa0e2dfc000)
libcurand.so.7.5 => /usr/local/cuda/lib64/libcurand.so.7.5 (0x00007fa0dd09f000)
libcublas.so.7.5 => /usr/local/cuda/lib64/libcublas.so.7.5 (0x00007fa0db7c0000)
libcudnn.so.5 => /usr/lib/x86_64-linux-gnu/libcudnn.so.5 (0x00007fa0d7c75000)
libcudart.so.6.5 => /usr/local/cuda-6.5/lib64/libcudart.so.6.5 (0x00007fa0d0653000)

注)libcudart.so.6.5は、OpenCV関係でリンクされているようです。

ベンチマーク

cuDNN 5は、3×3の畳み込みが高速化されたようなので、DIGITS 2.0のCaffeと処理時間を比較してみます。
まず、digits-2.0ディレクトリに移動します。

$ cd ~/digits-2.0

3×3の畳み込みを多用しているGoogLeNetの処理時間を比較するために、convnet-benchmarks(https://github.com/soumith/convnet-benchmarks)からgooglenet.prototxtをダウンロードします。
VRAMのサイズ(4GB)に合わせて、googlenet.prototxtの3行目のinput_dim(バッチサイズ)を128から32に変更します。
DIGITS 2.0のCUDA 7.0とcuDNND 3に対応したCaffeの処理時間は、

$ LD_LIBRARY_PATH=lib/cuda/:lib/cnmem \
caffe/build/tools/caffe time -model=googlenet.prototxt -gpu=0
...
I0517 21:21:23.256845  3408 caffe.cpp:335] Average Forward pass: 107.78 ms.
I0517 21:21:23.256862  3408 caffe.cpp:337] Average Backward pass: 249.557 ms.
I0517 21:21:23.256878  3408 caffe.cpp:339] Average Forward-Backward: 357.497 ms.
I0517 21:21:23.256893  3408 caffe.cpp:341] Total Time: 17874.9 ms.
I0517 21:21:23.256906  3408 caffe.cpp:342] *** Benchmark ends ***

これに対し、CUDA 7.5とcuDNND 5に対応したCaffeの処理時間は、

$ caffe time -model=googlenet.prototxt -gpu=0
...
I0517 21:23:54.607095  3424 caffe.cpp:378] Average Forward pass: 95.0315 ms.
I0517 21:23:54.607112  3424 caffe.cpp:380] Average Backward pass: 221.821 ms.
I0517 21:23:54.607130  3424 caffe.cpp:382] Average Forward-Backward: 316.999 ms.
I0517 21:23:54.607146  3424 caffe.cpp:384] Total Time: 15849.9 ms.
I0517 21:23:54.607159  3424 caffe.cpp:385] *** Benchmark ends ***

フォワード、バックワード共に、約10%早くなっています。