使用Theano和CUDA但没有cudNN

时间:2017-01-24 04:21:48

标签: python theano cudnn

我需要使用Theano和我的GPU(Nvidia 820M)。但是,cudNN至少要求Compute Capability 3.0。我的是2.1。因此,我不想(实际上,不能)使用cudNN,但我仍然希望将我的GPU与CUDA和Theano一起使用。

我正在使用Theano 0.9(dev),当我在.theanorc文件中禁用cudNN时,只使用了cpu。有没有办法使用Theano和我的GPU(CUDA),但没有cudNN?

提前致谢!

这就是我得到的:

Can not use cuDNN on context None: Disabled by dnn.enabled flag
Mapped name None to device cuda: GeForce 820M (0000:09:00.0)
[GpuElemwise{exp,no_inplace}(<GpuArrayType<None>(float32, (False,))>),       HostFromGpu(gpuarray)(GpuElemwise{exp,no_inplace}.0)]
Looping 1000 times took 0.900911 seconds
Result is [ 1.23178029  1.61879349  1.52278066 ...,  2.20771813  2.29967761 1.62323296]
Used the cpu

编辑:

我刚看到这个链接(http://philipperemy.github.io/configure_gpu_for_deep_learning/),作者也没有使用cudnn,但是使用了gpu而不是cpu。我可以做些什么?

编辑2:

我完全忘记粘贴生成此输出的代码。我为此道歉。这是:

from theano import function, config, shared, sandbox
import theano.tensor as T
import numpy
import time

vlen = 10 * 96 * 768  # 10 x #cores x # threads per core
iters = 1000

rng = numpy.random.RandomState(22)
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
f = function([], T.exp(x))
print(f.maker.fgraph.toposort())
t0 = time.time()
for i in range(iters):
    r = f()
t1 = time.time()
print("Looping %d times took %f seconds" % (iters, t1 - t0))
print("Result is %s" % (r,))
if numpy.any([isinstance(x.op, T.Elemwise) for x in f.maker.fgraph.toposort()]):
    print('Used the cpu')
else:
    print('Used the gpu')

我有新闻。我注意到,尽管它打印了“使用cpu&#39;当我在.theanorc中设置device = cuda时,执行时间比使用device = cpu时短近30倍。然后我进行了另一次体验,这次是CNN处理一些图像,我注意到当我进入&nvidia-smi&#39;在算法运行时,命令使用的gpu内存量从330 MB增加到超过415 MB。当我关闭进程时,它会回到最初的330 MB。很明显,theano正在使用GPU,但上面的测试代码打印出了“使用cpu&#39;出于某种原因。

另一个信息。当我进入&#39;导入theano&#39;在python解释器中,它显示以下消息:

Can not use cuDNN on context None: Disabled by dnn.enabled flag
Mapped name None to device cuda: GeForce 820M (0000:09:00.0)

我不明白为什么测试说它正在使用CPU,而我有证据证明我的GPU是正在使用的。

最后,这是我的.theanorc文件:

[dnn]
enabled = False

[global]
device = cuda
floatX = float32
optimizer = None

我必须将None分配给优化器选项,否则程序将无法工作,因为显示以下异常:

AssertionError: AbstractConv2d Theano optimization failed: there is no 
implementation available supporting the requested options. Did you 
exclude both "conv_dnn" and "conv_gemm" from the optimizer? If on GPU,
is cuDNN available and does the GPU support it? If on CPU, do you have a 
BLAS library installed Theano can link against?

这可能是因为我的gpu不支持cuDNN。不是吗?

0 个答案:

没有答案