2 つの異なる GPU で 2 つの theano.tensor.dot を計算する方法を示す簡単なサンプルを実装しようとしています。2 つのドットが同じ A と異なる B を共有している場合。
theano.tensor.dot(A,B0); theano.tensor.dot(A,B1)
B0 と B1 を別の GPU に保存したいと考えています。A はもともと 1 つの GPU に格納されていましたが、明示的な伝達関数を使用して別の GPU にコピーを作成しました。最後に、2 つの GPU に別々にドットを付けます。
私の実装は次のとおりです。
import numpy
import theano
va0 = theano.shared(numpy.random.random((1024, 1024)).astype('float32'),
target='dev0')
va1 = va0.transfer('dev1')
vb0 = theano.shared(numpy.random.random((1024, 512)).astype('float32'),
target='dev0')
vb1 = theano.shared(numpy.random.random((1024, 2048)).astype('float32'),
target='dev1')
vc0 = theano.tensor.dot(va0,vb0)
vc1 = theano.tensor.dot(va1,vb1)
f = theano.function([], [vc1,vc0])
print f()
nvprof の結果を調べているときに、2 つのドットがまだ同じ GPU で実行されていることがわかりました。そして va0.tranfer('dev1') は機能しません。実際には、代わりに vb1 を dev0 にコピーし、両方のドットを dev0 で計算しました。
Theano Flags のサーバーの組み合わせを試しましたが、うまくいきません。誰でも助けることができますか?