web-dev-qa-db-ja.com

GPUでtheanoを実行するにはどうすればよいですか

次のコードを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でこのコードを実行するにはどうすればよいですか?

注:

  • Nvidia Quadrok4200を搭載したワークステーションがあります。
  • Cudaツールキットをインストールしました
  • VS2012でcudavectorAddサンプルプロジェクトを正常に実行しました。
5
babeyh

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で実行されます。

14
Daniel Renshaw

Linuxを使用している場合は、ホームフォルダーに.theanorcファイルを作成し、以下を追加して、GPUで実行するようにtheanoをセットアップします。

[global]
device = gpu
floatx = float32
7
Dherath

または、GPUをプログラムで使用する場合は、次のようにします。

import theano.sandbox.cuda
theano.sandbox.cuda.use("gpu0")

次のようなメッセージが表示されます。

Using gpu device 0: Tesla K80

実行している環境の構成が簡単でない場合に役立ちます。

5
Erik Aronesty