Po serii bóle, zainstalowałem Theano na maszynie z kartą graficzną AMD - Radeon HD 5450 (Cedar)
.OpenCL Theano - Jak skutecznie wyłączyć CUDA?
Rozważmy teraz następujący kod.
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]))
Myślę, że ten kod powinien działać dobrze. Ale dostaję serię błędów:
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()
I otrzymuję ten sam zestaw wiadomości wiele razy. Następnie na końcu:
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')
Czy to oznacza, że nie mogę używać tego GPU lub zrobiłem coś złego w moim kodzie. Ponadto, na podstawie błędów, wygląda na to, że nastąpiło poszukiwanie nvcc
. Ale nie mam CUDA, mam opencl.
>>> import theano
Mapped name None to device opencl0:0: Cedar
również:
>>> 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>
Więc jak mam dalej? Czy istnieje sposób, aby upewnić się, że zamiast adresu nvcc
jest przeszukiwany.
PS_1: witam świat działa. PS_2: System = 14.04 64-bitowy
Tak, dziękuję. Przeczytałem ten problem. Ale znalazłem kilka odnośników na czacie, które wspominają, że to może działać. Otworzyłem kolejny numer - https://github.com/Theano/Theano/issues/4112, i mógłbym przyczynić się do naprawienia tego. Należy unikać uruchamiania procesora, ponieważ po prostu okazuje się to niepraktyczne w rozwiązywaniu problemów o umiarkowanym rozmiarze. Inną opcją, którą wybieram jest OpenCL Caffe. – Adorn