cuDNN 5.1に対応したCaffeをベンチマークしてみた

cudnn51-1
cuDNN 5.1に対応したNVIDIAフォークのCaffe「NVcaffe(caffe-nv)」をベンチマークしてみました。

以下の記事のアップデートで、caffe-nvは、0.14.5-2+cuda7.5から0.15.9-1+cuda7.5になりました。なお、バージョン名から分かるように、CUDA 7.5対応のままなので、RCの取れたCUDA 8.0がリリースされると、caffe-nvのアップデートが行われる可能性があります。

NVIDIA DIGITS 4.0をインストールしてみた
NVIDIAからDeep Learning用トレーニングシステムのDIGITS 4がリリースされたので、Ubuntu 14.04にインストールしてみました。今回は、DIGITS 4、cuDNN 5.1等へのアップデートが行われています。

NVIDIAのcuDNNのページ(https://developer.nvidia.com/cudnn)のベンチマークでは、VGGのような3×3 convolutionのネットワークのトレーニングが2.7倍早いと書かれていますが、ソフト(cuDNN)だけではなくハード(GPU)も変更されているので、cuDNNの効果がはっきりしません。

スポンサーリンク

ベンチマーク

ここでは、以下の記事でインストールし、今回のアップデートの影響を受けないDIGITS 2.0のcuDNN 3対応のcaffe-nvと、今回アップデートされたcuDNN 5.1対応のcaffe-nvを比較してみます。なお、GPUは、GTX 960 4GBです。

NVIDIA DIGITS 2.0をインストールしてみた
NVIDIAからDeep Learning用トレーニングシステムのDIGITS 2.0がリリースされていたので、インストールしてみました。今回インストールしたのは、GitHubで公開されているDIGITSではなく、NVIDIAのサイトからダウンロードできるWebインストーラです。

ベンチマークには、以下の記事と同じようにconvnet-benchmarks(https://github.com/soumith/convnet-benchmarks)を利用します。

CUDA 7.5とcuDNN 5に対応したCaffeがキターッ!
RCの取れたcuDNN 5がリリースされました。また、インストールしていたNVIDIAフォークのCaffe「NVcaffe」がアップデートされて、CUDA 7.5とcuDNN 5に対応しました。

まず、digits-2.0ディレクトリに移動します。

$ cd ~/digits-2.0

AlexNet (バッチ数:32)

convnet-benchmarkからalexnet.prototxt(https://raw.githubusercontent.com/soumith/convnet-benchmarks/master/caffe/imagenet_winners/alexnet.prototxt)をダウンロードします。

alexnet.prototxtの3行目のinput_dim(バッチサイズ)を128から32に変更して、AlexNetのベンチマークを行います。

以下のコマンドを実行して、cuDNN 3対応のcaffe-nvのベンチマークを行います。

$ LD_LIBRARY_PATH=lib/cuda/:lib/cnmem caffe/build/tools/caffe time -model=alexnet.prototxt -gpu=0
...
Average Forward pass: 32.9242 ms.
Average Backward pass: 66.751 ms.
Average Forward-Backward: 99.8097 ms.

次に、以下のコマンドを実行して、cuDNN 5.1対応のcaffe-nvのベンチマークを行います。

$ caffe time -model=alexnet.prototxt -gpu=0
...
Average Forward pass: 23.553 ms.
Average Backward pass: 55.1745 ms.
Average Forward-Backward: 78.8644 ms.

Average Forward-Backwardは、cuDNN 3対応のcaffe-nvが約100ms、cuDNN 5.1対応のcaffe-nvが約79msとなりました。

GoogLeNet (バッチ数:32)

convnet-benchmarkからgooglenet.prototxt(https://raw.githubusercontent.com/soumith/convnet-benchmarks/master/caffe/imagenet_winners/googlenet.prototxt)をダウンロードします。

googlenet.prototxtの3行目のinput_dim(バッチサイズ)を128から32に変更して、GoogLeNetのベンチマークを行います。

以下のコマンドを実行して、cuDNN 3対応のcaffe-nvのベンチマークを行います。

$ LD_LIBRARY_PATH=lib/cuda/:lib/cnmem caffe/build/tools/caffe time -model=googlenet.prototxt -gpu=0
...
Average Forward pass: 115.189 ms.
Average Backward pass: 259.735 ms.
Average Forward-Backward: 375.207 ms.

次に、以下のコマンドを実行して、cuDNN 5.1対応のcaffe-nvのベンチマークを行います。

$ caffe time -model=googlenet.prototxt -gpu=0
...
Average Forward pass: 92.5176 ms.
Average Backward pass: 218.426 ms.
Average Forward-Backward: 311.168 ms.

Average Forward-Backwardは、cuDNN 3対応のcaffe-nvが約375ms、cuDNN 5.1対応のcaffe-nvが約311msとなりました。

VGG (バッチ数:16)

convnet-benchmarkからvgg_a.prototxt(https://raw.githubusercontent.com/soumith/convnet-benchmarks/master/caffe/imagenet_winners/vgg_a.prototxt)をダウンロードします。

vgg_a.prototxtの3行目のinput_dim(バッチサイズ)を64から16に変更して、VGGのベンチマークを行います。

以下のコマンドを実行して、cuDNN 3対応のcaffe-nvのベンチマークを行います。

$ LD_LIBRARY_PATH=lib/cuda/:lib/cnmem caffe/build/tools/caffe time -model=vgg_a.prototxt -gpu=0
...
Average Forward pass: 159.407 ms.
Average Backward pass: 322.507 ms.
Average Forward-Backward: 482.093 ms.

次に、以下のコマンドを実行して、cuDNN 5.1対応のcaffe-nvのベンチマークを行います。

$ caffe time -model=vgg_a.prototxt -gpu=0
...
Average Forward pass: 102.752 ms.
Average Backward pass: 206.668 ms.
Average Forward-Backward: 309.56 ms.

Average Forward-Backwardは、cuDNN 3対応のcaffe-nvが約482ms、cuDNN 5.1対応のcaffe-nvが約310msとなりました。

まとめ

上記の結果をグラフにすると、下のグラフのようになります。

cudnn51-2

なお、cuDNN 5.1対応のcaffe-nvでは、VGGとGoogLeNetの処理時間がほぼ等しくなっていますが、VGGのバッチ数がGoogLeNetの半分であることに注意が必要です。

また、NVIDIAのcuDNNのページと同様に、cuDNN 3対応のcaffe-nvを基準とした比率は、下のグラフのようになります。

cudnn51-1
GoogLeNetに関しては、cuDNN 5.0対応のcaffe-nvでも、約10%早くなっており、cuDNN 5.1対応のcaffe-nvも、ほぼ同じ結果となっています。

一方、VGGに関しては、約50%早くなっており、NVIDIAのcuDNNのページと似た傾向にあることが確認できました。

シェアする

フォローする