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