machine-learning - OpenCL Theano - 如何强制禁用 CUDA?

标签 machine-learning neural-network opencl theano

经过一系列的努力,我在一台配备 AMD 显卡的机器上安装了 Theano - Radeon HD 5450 (Cedar)

现在,考虑以下代码。

import numpy
import theano
import theano.tensor as T
rng = numpy.random

N = 400         #number of samples
feats = 784     #dimensionality of features
D = (rng.randn(N, feats), rng.randint(size=N, low=0, high=2))
training_steps = 10000

# theano symbolic variables
x = T.matrix("x")
y = T.vector("y")
w = theano.shared(rng.randn(784), name="w")
b = theano.shared(0., name="b")

print("Initial Model:")
print(str(w.get_value()) + " " + str(b.get_value()) )

p_1 = 1/(1 + T.exp(-T.dot(x, w) - b))       # probability of target being 1
prediction = p_1 > 0.5                      # prediction threshold
xent = -y * T.log(p_1) - (1-y)*T.log(1-p_1) # cross-entropy loss function
cost = xent.mean() + 0.01 * (w**2).sum()    # cost - to be minimized
gw, gb = T.grad(cost, [w, b])

#compile it
train = theano.function(
                        inputs = [x, y],
                        outputs = [prediction, xent],
                        updates = {w: w - 0.1*gw, b: b - 0.1*gb}    )

predict = theano.function(inputs = [x], outputs = prediction)

#train it
for i in range (training_steps):
    pred, err = train(D[0], D[1])

print("Final Model: ")
print(str(w.get_value()) + " " + str(b.get_value()) )
print("Target values for D: " + str(D[1]))
print("Predictions on D: " + str(D[0]))

我认为这段代码应该可以正常工作。但我收到一系列错误:

ERROR (theano.gof.opt): Optimization failure due to: local_gpua_hgemm
ERROR (theano.gof.opt): node: dot(x.T, Elemwise{sub,no_inplace}.0)
ERROR (theano.gof.opt): TRACEBACK:
ERROR (theano.gof.opt): Traceback (most recent call last):
  File "/home/user/anaconda3/lib/python3.5/site-packages/theano/gof/opt.py", line 1772, in process_node
    replacements = lopt.transform(node)
  File "/home/user/anaconda3/lib/python3.5/site-packages/theano/sandbox/gpuarray/opt.py", line 140, in local_opt
    new_op = maker(node, context_name)
  File "/home/user/anaconda3/lib/python3.5/site-packages/theano/sandbox/gpuarray/opt.py", line 732, in local_gpua_hgemm
    if nvcc_compiler.nvcc_version < '7.5':
TypeError: unorderable types: NoneType() < str()

我多次收到同一组消息。然后在最后:

  File "/home/user/anaconda3/lib/python3.5/site-packages/pygpu-0.2.1-py3.5-linux-x86_64.egg/pygpu/elemwise.py", line 286, in __init__
    **self.flags)
  File "pygpu/gpuarray.pyx", line 1950, in pygpu.gpuarray.GpuKernel.__cinit__ (pygpu/gpuarray.c:24214)
  File "pygpu/gpuarray.pyx", line 467, in pygpu.gpuarray.kernel_init (pygpu/gpuarray.c:7174)
pygpu.gpuarray.UnsupportedException: ('The following error happened while compiling the node', GpuElemwise{Composite{((-i0) - i1)}}[(0, 0)]<gpuarray>(GpuFromHost<None>.0, InplaceGpuDimShuffle{x}.0), '\n', b'Device does not support operation')

这是否意味着我无法使用该 GPU 或者我在代码中做错了什么。此外,从错误来看,似乎有对nvcc的搜索。但我没有CUDA,我有opencl。

>>> import theano
Mapped name None to device opencl0:0: Cedar

还有:

>>> from theano import config
>>> config.device
'opencl0:0'
>>> config.cuda
<theano.configparser.AddConfigVar.<locals>.SubObj object at 0x7fba9dee7d30>
>>> config.nvcc
<theano.configparser.AddConfigVar.<locals>.SubObj object at 0x7fba9e5967f0>
>>> config.gpu
<theano.configparser.AddConfigVar.<locals>.SubObj object at 0x7fbaa9f61828>

那么我该如何离开这里呢?有没有办法确保搜索 clcc 而不是 nvcc

PS_1: Hello World 工作正常。 PS_2:系统 = 14.04 64 位

最佳答案

Theano 尚不支持 OpenCL。因此,仅支持 NVIDIA GPU。

OpenCL 的状态为 recorded on GitHub .

您需要通过在 Theano 配置中设置 device=cpu 来禁用 GPU 操作。有多种方法可以做到这一点(即通过 THEANO_FLAGS 环境变量或通过 .theanorc 文件; see documentation )。

在运行脚本之前,尝试设置

export THEANO_FLAGS=device=cpu,floatX=float64

您的情况可能需要额外的配置选项。请参阅the documentation了解更多。

关于machine-learning - OpenCL Theano - 如何强制禁用 CUDA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35596795/

相关文章:

python - 将 CudaNdarraySharedVariable 转换为 TensorVariable

c++ - 对于简单的矩阵乘法,OpenCL CPU 比 OpenCL GPU 更快

cpu - 符合OpenCL的CPU/GPU列表

OpenCL local_work_size NULL

python - 在keras中使用predict_generator()时如何获取关联的图像名称

tensorflow - 使用 Keras 构建多变量、多任务 LSTM

python - 挤压网络问题

python - ValueError : Layer weight shape (43, 100) 与提供的权重形状不兼容 (412457, 400)

machine-learning - 在未知测试集上使用 Select-K-best

python - 具有 5 个未知参数的最小二乘函数