在prettytensor demo shakespeare.py上,CPU比GPU更快

时间:2016-12-15 12:40:33

标签: tensorflow prettytensor

我正在运行来自prettytensor的演示shakespeare.py,并想知道如何使用CPU与GPU影响每批训练运行时间。因此,我在local_trainer.py中添加了以下几行:

tick = time.time()
results = sess.run(ops, dict(zip(feed_vars, data)))
print('done in %.4f secs' % (time.time() - tick))

位于run_model函数的第309行。

然后我通过设置export CUDA_VISIBLE_DEVICES=""强制在CPU上进行训练。我通过watch -n 1 nvidia-smi以及watch -n 1 lsof /dev/nvidia*监控GPU使用情况,因此我确定未触及GPU。令人惊讶的是,在CPU上运行它(~0.2秒)然后在GPU上运行(约0.25秒)。

通过htop监控CPU使用情况时,我发现所有8个CPU线程都得到了很好的使用。与使用GPU创建的通信开销一起,这可能是我猜的可能的解释。此外,可能是模型太小而无法实际受益于GPU计算能力和/或我的GPU太低端。

我的问题是:你有没有观察到使用prettytensor或tensorflow的类似行为(可能也是GPU版本更快但不是很糟糕的地方)?这些解释是否有意义,或者这种行为是否太奇怪了?是否还有其他工具/技巧可以用来确定GPU通过prettytensor(或者就此而言是tensorflow)访问它时究竟发生了什么?我知道了here所描述的tensorflow的时间轴功能,但我发现这有点难以解读。

我的GPU: NVIDIA GeForce GT 730(2GB) major:3 minor:5 memoryClockRate(GHz)0.9015

我的CPU: 4个核心(每个核心2个超线程)类型 英特尔(R)Core(TM)i7-4790K CPU @ 4.00GHz

1 个答案:

答案 0 :(得分:2)

这些观察结果是有意义的,我还有一个模型,它在GPU上比在CPU上工作稍慢。那是什么情况,网络是一个小网络,整个过程是CPU限制和转移CPU-> GPU-> CPU减慢了一点点。

在您的情况下,您可以尝试做的是使用GPU运行模型并查看GPU利用率(通过nvidia-smi)是否很小,同时CPU的利用率很高。