読者です 読者をやめる 読者になる 読者になる

まんぼう日記

takataka's diary

Theano 0.8.2 と cuDNN v5

研究

Theano 0.8.2 がリリースされましたね:

https://groups.google.com/forum/#!topic/theano-announce/kzuECmYnXgU

Highlight:
- cuDNN v5 convolution support (cuDNN v3 isn't supported anymore)
- A few crash fix

ということなので,Theano を 0.8.0 から 0.8.2 へ,cuDNN を v4 から v5 (現時点ではまだ RC = release candidate 版)へ,それぞれアップグレードすることにしました.ちなみに,Theano 0.8.0 と cuDNN 4 - まんぼう日記 に前回の作業のメモがあります.

 

Theano 0.8.2 へのアップグレード

Ubuntu 14.04 LTS の場合

インストールしたマシンのスペックや環境については,Theano 0.8.0rc1(または,ignore_border は True にしよう) - まんぼう日記 とそのリンク先へどうぞ.CUDA のバージョンは 7.5 です.前( Theano 0.8.0 と cuDNN 4 - まんぼう日記 )に 0.8.0 を pip 経由でインストールしてたので,pip コマンドでアップグレードするだけ:

$ sudo pip install --upgrade --no-deps theano
$ python
>>> import theano
>>> theano.version.full_version
'0.8.2.dev-RELEASE'

らくちん.

Mac OS X の場合

CPU only で Theano を使ってる Mac の場合です.前に 0.8.0 を MacPorts でインストールしてたので,port コマンドでアップグレードするだけ:

$ sudo port upgrade py27-theano

 

 cuDNN v5 (RC) のインストール

上記の Ubuntu マシンに cuDNN v5 のRC版をインストールします.以下もどうぞ.

 

https://developer.nvidia.com/rdp/cudnn-download にログインして,

Download cuDNN v5 Release Candidate (RC) (April, 2016), for CUDA 7.5 and later.

から cuDNN v5 Library for Linux を選択.cudnn-7.5-linux-x64-v5.0-rc.tgz というファイルがダウンロードされます.これを適当な場所に展開して,ヘッダファイルとライブラリを所定の場所へコピー.こういうことになりました.たかたかの環境では CUDA_HOME は /usr/local/cuda です.

$ ls -l $CUDA_HOME/include/cudnn*
-r--r--r-- 1 root root 99317  5月  7 14:14 /usr/local/cuda/include/cudnn.h
$ ls -l $CUDA_HOME/lib64/libcudnn*
lrwxrwxrwx 1 root root       13  5月  7 14:18 /usr/local/cuda/lib64/libcudnn.so -> libcudnn.so.5
lrwxrwxrwx 1 root root       17  5月  7 21:50 /usr/local/cuda/lib64/libcudnn.so.4 -> libcudnn.so.4.0.7
-rwxr-xr-x 1 root root 61453024  3月 25 17:51 /usr/local/cuda/lib64/libcudnn.so.4.0.7
lrwxrwxrwx 1 root root       17  5月  7 14:17 /usr/local/cuda/lib64/libcudnn.so.5 -> libcudnn.so.5.0.4
-rwxr-xr-x 1 root root 59823168  5月  7 14:16 /usr/local/cuda/lib64/libcudnn.so.5.0.4
-rw-r--r-- 1 root root 58734618  5月  7 14:16 /usr/local/cuda/lib64/libcudnn_static.a

v4 のライブラリを残してあるのは,↓のような事情からです.

 

ついでに Caffe も再インストール…

しようとしましたが,make 途中で cuDNN 関係らしきエラーを吐いて止まってしまいました.どうやら現時点では Caffe はまだ cuDNN v5 に対応してないようです.そういうわけで,上記のように v4 と v5 のライブラリを共存させることにしました.ちなみに,Ubuntu マシンに Caffe をインストール - まんぼう日記 に以前の作業メモがあります.

 

速くなった?

Theano 使って書いた CNN のプログラムを実行して,速くなったかどうか調べてみました.

MNIST の学習

まずは,Theano では allow_gc を False にしよう - まんぼう日記 で使ったプログラムを動かしてみました.詳しい実験条件はそちらを見てもらうとして,結論は,「この条件では,Theano 0.8.0 & cuDNN v4 から 0.8.2 & v5 に移行しても計算時間は変わらない」でした.

VGG-16の場合

次に,Caffe の学習済みネットワークを Theano に移して動かす (2) - まんぼう日記 で使ったVGG-16(Models used by the VGG team in ILSVRC-2014 の 16-layer のモデル)を動かしてみました.Theano 0.8.0 & cuDNN v4 では

Caffe で動かすプログラム ex160328_Caffe.py での結果は次の通り:

  • top-1 error rate: 29.03%, top-5 error rate: 10.118%
  • 計算時間 10分,GPU メモリ使用量 1376MiB

Theano に移して動かすプログラム ex160328_Theano.py での結果は次の通り:

  • top-1 error rate: 29.03%, top-5 error rate: 10.118%
  • 計算時間 18分,GPU メモリ使用量 2984MiB

 という結果でしたが,Theano 0.8.2 & cuDNN v5 の下で ex160328_Theano.py を実行すると,721秒 = 12分 となりました.おお.

 

とまあ,こんな感じです.