theano 0.8以上でcuDNNを利用する場合、一部においてcuDNNv5以上が必須となります
ex) theano.tensor.nnet.bn.batch_normalization
ところがtsubame上のcuda7.5にinstallされているcuDNNはv4となっています。
この件についてgsicの方にお問い合わせしたところ、以下にCUDA7.5用cuDNN v5がinstallされているとのことです
/usr/apps.sp3/nosupport/gsic/cudnn/5.1-cuda7.5/cuda/
というわけでCUDA7.5を使いながらcuDNNv5の利用ができるっぽいのですが、pathの設定が問題です。cuDNNv5の方が優先されるようにPATHを通しても、TheanoはCUDA側を優先するようです。
探し回った結果、
Theano-0.9.0.dev2-py3.5.egg/theano/sandbox/cuda/__init__.py
# 350行目付近
class DnnVersion(GpuOp):
def c_compiler(self):
return nvcc_compiler.NVCC_compiler
def c_headers(self):
return ['cudnn.h']
def c_header_dirs(self):
return [config.dnn.include_path]
def c_libraries(self):
return ['cudnn']
def c_lib_dirs(self):
return [config.dnn.library_path]
def c_compile_args(self):
return ['-Wl,-rpath,' + config.dnn.library_path]
なるほどー。というわけで
.theanorc
[dnn]
include_path=/usr/apps.sp3/nosupport/gsic/cudnn/5.1-cuda7.5/cuda/include
library_path=/usr/apps.sp3/nosupport/gsic/cudnn/5.1-cuda7.5/cuda/lib64
enabled=True
from keras.layers import Dense,Input,BatchNormalization
BatchNormalization()(Dense(32)(Input(shape=(32,))))
# Elemwise{switch,no_inplace}.0
めでたしめでたし