1

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 のサーバーの組み合わせを試しましたが、うまくいきません。誰でも助けることができますか?

nvprof: 同じ GPU に 2 つのドット

4

1 に答える 1