2016-02-24 12 views
6

一連の苦労の後、私はTheanoをAMDグラフィックスカードのマシンにインストールしました - Radeon HD 5450 (Cedar)OpenCL Theano - 強制的にCUDAを無効にするには?

ここで、次のコードを考えてみましょう。

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> 

は、どのように私はここから行くのですか? nvccの代わりにclccを検索する方法はありますか?

PS_1:hello world works。 PS_2:システム= 14.04 64ビット

答えて

7

OpenCLはまだTheanoによってサポートされていません。その結果、NVIDIA GPUのみがサポートされます。

OpenCLのステータスはrecorded on GitHubです。

あなたのTheano設定でdevice=cpuを設定してGPUの動作を無効にする必要があります。これを行う方法は複数あります(THEANO_FLAGS環境変数または.theanorcファイル、see documentation経由)。

スクリプトを実行する前に、追加の設定オプションが必要な場合があります

export THEANO_FLAGS=device=cpu,floatX=float64 

あなたの状況を設定してみてください。詳細はthe documentationを参照してください。

+0

はい、ありがとうございます。私はこの問題を読んだ。しかし、私はそれがうまくいくかもしれないと言及しているチャットでは、別の問題 - https://github.com/Theano/Theano/issues/4112を開設しましたが、私はそれを修正するために貢献するかもしれません。しかし、CPU上での実行は避けるべきです。中程度のサイズの問題を解決するには実用的でないことが分かります。私が検討している他のオプションはOpenCL Caffeです。 – Adorn

関連する問題