After a series of pains, I installed Theano on a machine with an AMD graphics card - Radeon HD 5450 (Cedar) .
Now consider the following 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]))
I think this code should work fine. But I get a number of errors:
ERROR (theano.gof.opt): Optimization failure due to: local_gpua_hgemm ERROR (theano.gof.opt): node: dot(xT, 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()
And I get the same set of messages several times. Then at the end:
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')
Does this mean that I canβt use this GPU, or did I do something wrong in my code. Moreover, of the errors, it seems, there was an nvcc search. But I do not have CUDA, I have opencl.
>>> import theano Mapped name None to device opencl0:0: Cedar
and
>>> 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 how do I go next? Is there any way to make sure that clcc is performed instead of nvcc .
PS_1: Hello world is working. PS_2: System = 14.04 64 bit