如何在 GPU 上 运行 theano
How can I run theano on GPU
如果我运行下面的代码用python3.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 Quadro k4200 的工作站。
- 我已经安装了 Cuda 工具包
- 我已经在 VS2012 上成功运行了一个 cuda vectorAdd 示例项目。
您可以通过在 Theano 的配置中指定 device=gpu
来将 Theano 配置为使用 GPU。设置配置的主要方法有两种:(1) 在 THEANO_FLAGS
环境变量中,或 (2) 通过 .theanorc 文件。这两种方法,以及 Theano 的所有配置标志,都是 documented.
如果在调用 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
如果您 运行 所在的环境不容易配置,则很有用。
如果我运行下面的代码用python3.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 Quadro k4200 的工作站。
- 我已经安装了 Cuda 工具包
- 我已经在 VS2012 上成功运行了一个 cuda vectorAdd 示例项目。
您可以通过在 Theano 的配置中指定 device=gpu
来将 Theano 配置为使用 GPU。设置配置的主要方法有两种:(1) 在 THEANO_FLAGS
环境变量中,或 (2) 通过 .theanorc 文件。这两种方法,以及 Theano 的所有配置标志,都是 documented.
如果在调用 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
如果您 运行 所在的环境不容易配置,则很有用。