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.
Author: babeyh, 2015-11-04

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.

 13
Author: Daniel Renshaw, 2015-11-04 10:50:58

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
 6
Author: Dherath, 2016-06-07 09:19:18

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.

 5
Author: Erik Aronesty, 2016-02-25 18:48:19