确保 Python 代码在 GPU 上是 运行 还是 CPU

Ensuring if Python code is running on GPU or CPU

我已经编写了一些具有 2 LSTM 层的基本 Deep Learning 代码。我使用 KerasTheano 作为我的后端。与 AWS 上的另一台机器相比,这段代码在我 AWS 的机器上花费的时间太长了。在速度 运行ning 更快的机器上,每个 epoch 需要 640 秒,而在速度 运行ning 更慢的机器上,每个 epoch 需要超过 10,000 秒。

我开始认为较慢机器上的代码不在 GPU 上 运行ning。两台机器上的代码 运行ning 完全一样。机器配置也是一样的。

看起来 Theano 安装在较慢的机器上。我运行下面的代码得到了结果:

有没有办法检查我的代码是否在 GPU 或 CPU 上 运行ning?

在这方面的任何帮助将不胜感激。

TIA。

编辑

根据@Marcin 的建议,我添加了以下代码:

但是当我 运行 下面的代码时,我仍然得到 Used the cpu 结果:

有几种方法可以检查:

  1. 签入 Theano 标志:

    import os
    print(os.environ["THEANO_FLAGS"])
    

    看看 device 设置了什么。

  2. 尝试 运行 此代码段提供 here:

代码:

from theano import function, config, shared, tensor
import numpy
import time

vlen = 10 * 30 * 768  # 10 x #cores x # threads per core
iters = 1000

rng = numpy.random.RandomState(22)
x = shared(numpy.asarray(rng.rand(vlen), config.floatX))
f = function([], tensor.exp(x))
print(f.maker.fgraph.toposort())
t0 = time.time()
for i in range(iters):
    r = f()
t1 = time.time()
print("Looping %d times took %f seconds" % (iters, t1 - t0))
print("Result is %s" % (r,))
if numpy.any([isinstance(x.op, tensor.Elemwise) and
              ('Gpu' not in type(x.op).__name__)
              for x in f.maker.fgraph.toposort()]):
    print('Used the cpu')
else:
    print('Used the gpu')

编辑:

尝试将此代码段添加为代码的 前两行(重要)

import os
os.environ["THEANO_FLAGS"] = "mode=FAST_RUN,device=gpu,floatX=float32"