Pylearn2を使ったDeep Learningの計算を、Tesla K40でやるようになったら、突然こんなエラーが。
ERROR (theano.gof.opt): Optimization failure due to: local_gpu_softmax_with_bias
ERROR (theano.gof.opt): TRACEBACK:
ERROR (theano.gof.opt): Traceback (most recent call last):
File "/home/tsuji/anaconda/lib/python2.7/site-packages/theano/gof/opt.py", line 1286, in process_node
replacements = lopt.transform(node)
File "/home/tsuji/anaconda/lib/python2.7/site-packages/theano/sandbox/cuda/opt.py", line 999, in local_gpu_softmax_with_bias
gpu_sm = GpuSoftmaxWithBias()(gpu_from_host(x), gpu_from_host(b))
File "/home/tsuji/anaconda/lib/python2.7/site-packages/theano/gof/op.py", line 399, in __call__
node = self.make_node(*inputs, **kwargs)
File "/home/tsuji/anaconda/lib/python2.7/site-packages/theano/sandbox/cuda/basic_ops.py", line 128, in make_node
dtype=x.dtype)()])
File "/home/tsuji/anaconda/lib/python2.7/site-packages/theano/sandbox/cuda/type.py", line 68, in __init__
(self.__class__.__name__, dtype, name))
TypeError: CudaNdarrayType only supports dtype float32 for now. Tried using dtype float64 for variable None
調べて見ると、無視してもいいとのこと。たしかに、CPUで計算するとエラーが出ないのは、GPUがfloat32しか受付ないからだと思うんですが、気持ち悪いのでデータを作る時、PandasのDataFrameで精度を変更することに。こんな感じで、float64からfloat32に変更できます。
import numpy
d = data.astype(numpy.float32)