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

时间:2017-04-06 20:09:10

标签: machine-learning neural-network deep-learning theano keras

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

我开始认为较慢的机器上的代码没有在GPU上运行。两台机器上运行的代码完全相同。机器配置也相同。

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

enter image description here

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

在这方面的任何帮助都将受到高度赞赏。

TIA。

修改

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

enter image description here

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

enter image description here

1 个答案:

答案 0 :(得分:1)

有几种方法可以检查:

  1. 签入Theano标志:

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

    并查看device的设置。

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

  3. 代码:

    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')
    

    修改

    尝试将此代码段添加为代码的 FIRST TWO(重要)行:

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