Testando o código theano, como está usando a GPU?
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(), ))
eu corri este código com python 3.5
NP time: 0.161123[s], theano time: 0.167119[s] (times should be close when
run on CPU!)
Result difference: 0.000000
Diz que se o tempo está próximo, significa que corres na CPU.
Como uso a GPU. ?
Nota:
-
Tenho uma estação de trabalho com Nvidia Quadro k4200.
- instalo Cuda toolkit Trabalhei com sucesso num projecto de amostra do cuda vectorAdd em VS2012.
3 answers
Você configura o Theano para usar uma GPU especificando o {[[2]} na configuração do Theano. Existem dois métodos principais para definir a configuração: (1) na variável de ambiente THEANO_FLAGS
, ou (2) via a .o ficheiro do theanorc. Ambos os métodos, e todas as bandeiras de configuração do Teano, são documentados .
Saberás que o Theano está a usar a GPU se, depois de ligares import theano
vires uma mensagem que se pareça com isto
Using gpu device 0: GeForce GT 640 (CNMeM is disabled)
Os detalhes podem variar para si, mas se não aparecer nenhuma mensagem então o Theano está a usar apenas a CPU.
Note também que mesmo que veja a mensagem GPU, o seu grafo de computação em particular pode não correr na GPU. Para ver que partes do seu cálculo estão a correr na GPU, imprima o seu grafo compilado e optimizado
f = theano.function(...)
theano.printing.debugprint(f)
As operações que começam com o prefixo 'Gpu' serão executadas na GPU. As operações que não tenham esse prefixo em seu nome serão executadas na CPU.
Se estiver no Linux, crie um .o ficheiro theanorc na sua pasta pessoal e adicione o seguinte para configurar o theano para correr na GPU.
[global]
device = gpu
floatx = float32
Em alternativa, se quiser utilizar a GPU programaticamente:
import theano.sandbox.cuda
theano.sandbox.cuda.use("gpu0")
Você deve ver uma mensagem como esta:
Using gpu device 0: Tesla K80
Útil se o ambiente em que está a correr não for fácil de configurar.