2016-02-24 4 views
6

Nach einer Reihe von Schmerzen habe ich Theano auf einer Maschine mit AMD-Grafikkarte - Radeon HD 5450 (Cedar) installiert.OpenCL Theano - Wie CUDA gewaltsam deaktivieren?

Betrachten Sie nun einen folgenden Code.

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])) 

Ich denke, dass dieser Code gut funktionieren sollte. Aber ich bekomme eine Reihe von Fehlern:

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() 

Und ich bekomme die gleiche Reihe von Nachrichten mehrmals. Dann am Ende:

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') 

Heißt das, ich kann nicht diese GPU nutzen oder ich habe etwas falsch in meinem Code. Außerdem scheint es, dass bei den Fehlern nach nvcc gesucht wurde. Aber ich habe keine CUDA, ich habe opencl.

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

auch:

>>> 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> 

So wie gehe ich von hier aus? Gibt es einen Weg, um sicherzustellen, clcc statt nvcc gesucht wird.

PS_1: Hallo Welt funktioniert. PS_2: System = 14,04 64 Bit

Antwort

7

OpenCL wird von Theano noch nicht unterstützt. Daher werden nur NVIDIA-GPUs unterstützt.

Der Status von OpenCL ist recorded on GitHub.

Sie müssen den GPU-Betrieb deaktivieren, indem Sie in Ihrer Theano-Konfiguration device=cpu einstellen. Es gibt mehrere Möglichkeiten, dies zu tun (d. H. Über THEANO_FLAGS Umgebungsvariable oder über eine .theanorc Datei; see documentation). Möglicherweise müssen zusätzliche Konfigurationsoptionen

Bevor das Skript ausgeführt wird, versuchen

export THEANO_FLAGS=device=cpu,floatX=float64 

Ihre Situation einstellen. Siehe the documentation für mehr.

+0

Ja, danke. Ich hatte dieses Problem gelesen. Aber ich fand nur wenige Referenzen im Chat, die darauf hinwiesen, dass es funktionieren könnte. Ich habe ein anderes Problem geöffnet - https://github.com/Theano/Theano/issues/4112, und ich könnte dazu beitragen, es zu beheben. Aber CPU-Betrieb sollte vermieden werden, da es sich bei der Lösung eines Problems mittlerer Größe als unpraktisch erweist. Andere Option, die ich erkunde, ist OpenCL Caffe. – Adorn