次のコードをpython 3.5で実行すると
import numpy as np
import time
import theano
A = np.random.Rand(1000,10000).astype(theano.config.floatX)
B = np.random.Rand(10000,1000).astype(theano.config.floatX)
np_start = time.time()
AB = A.dot(B)
np_end = time.time()
X,Y = theano.tensor.matrices('XY')
mf = theano.function([X,Y],X.dot(Y))
t_start = time.time()
tAB = mf(A,B)
t_end = time.time()
print ("NP time: %f[s], theano time: %f[s] **(times should be close when run
on CPU!)**" %(np_end-np_start, t_end-t_start))
print ("Result difference: %f" % (np.abs(AB-tAB).max(), ))
出力を取得します
NP time: 0.161123[s], theano time: 0.167119[s] (times should be close when
run on CPU!)
Result difference: 0.000000
時間が近い場合は、CPUで実行していることを意味します。
GPUでこのコードを実行するにはどうすればよいですか?
注:
Theanoの構成でdevice=gpu
を指定して、GPUを使用するようにTheanoを構成します。構成を設定するには、主に2つの方法があります。(1)THEANO_FLAGS
環境変数を使用する方法、または(2).theanorcファイルを使用する方法です。両方のメソッド、およびTheanoのすべての構成フラグは、 文書化 です。
import theano
を呼び出した後、次のようなメッセージが表示された場合、TheanoがGPUを使用していることがわかります。
Using gpu device 0: GeForce GT 640 (CNMeM is disabled)
詳細は異なる場合がありますが、メッセージがまったく表示されない場合、TheanoはCPUのみを使用しています。
GPUメッセージが表示されても、特定の計算グラフがGPUで実行されない場合があることにも注意してください。計算のどの部分がGPUで実行されているかを確認するには、コンパイルおよび最適化されたグラフを印刷します
f = theano.function(...)
theano.printing.debugprint(f)
プレフィックス「Gpu」で始まる操作はGPUで実行されます。名前にそのプレフィックスが付いていない操作は、CPUで実行されます。
Linuxを使用している場合は、ホームフォルダーに.theanorcファイルを作成し、以下を追加して、GPUで実行するようにtheanoをセットアップします。
[global]
device = gpu
floatx = float32
または、GPUをプログラムで使用する場合は、次のようにします。
import theano.sandbox.cuda
theano.sandbox.cuda.use("gpu0")
次のようなメッセージが表示されます。
Using gpu device 0: Tesla K80
実行している環境の構成が簡単でない場合に役立ちます。