我该如何在GPU上运行Theano?

8
如果我使用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 Quadro k4200 的工作站。
  • 我已经安装了 Cuda 工具包。
  • 我已经成功地在 VS2012 上运行了一个 cuda vectorAdd 示例项目。
3个回答

17

您可以通过在Theano的配置中指定device=gpu来配置Theano以使用GPU。有两种主要方法可以设置配置:(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 上运行。


谢谢。但是在我的环境变量中,没有关于Theano的变量。文档说有一个名为.theanorc的文件,在我的主目录中,但是这个文件不存在。我该如何设置“device”值? - babeyh
如果THEANO_FLAGS不存在,则创建它! - Daniel Renshaw
1
import theano device='gpu0' 检查设备值 print(theano.config.device) 它又变成了 'cpu'。 - babeyh
我该如何创建这些标志? - babeyh
我知道环境变量的位置,但是我不明白我应该在环境变量中添加什么标志?我创建了一个名为.theanorc的文件并在文本文件中添加了标志。当我运行import theano时,会出现多个错误:( - babeyh
显示剩余3条评论

7
如果您使用的是Linux系统,请在您的主目录下创建一个名为 .theanorc 的文件,并添加以下内容,以设置Theano在GPU上运行。
[global]
device = gpu
floatx = float32

2
只是一个细节。应该是float32,而不是floar32(笔误)。我无法编辑它 :-( - FiReTiTi
针对版本1.0.4;设备=cuda - mokarakaya

5

如果你想要在程序中使用GPU:

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

您应该会看到如下类似的信息:
Using gpu device 0: Tesla K80

如果你运行的环境不容易配置,这将非常有用。


3
您正在导入 theano.sandbox.cuda,这是旧的 GPU 后端并已从 Theano 中删除。请使用 Theano 0.9 版本进行使用。更好的选择是过渡到新的 GPU 后端!请参阅 https://github.com/Theano/Theano/wiki/Converting-to-the-new-gpu-back-end%28gpuarray%29。此方法仅适用于 theano v0.9,并已被弃用。 - chmodsss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接