1

我正在shakespeare.py从 prettytensor 运行演示,想知道使用 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 行。

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

通过监控 CPU 使用率时,htop我观察到所有 8 个 CPU 线程都得到了很好的使用。加上使用 GPU 产生的通信开销,我猜这可能是一个可能的解释。此外,可能是模型太小而无法真正受益于 GPU 计算能力和/或我的 GPU 太低端。

我的问题是:你有没有观察过使用 prettytensor 或 tensorflow 的类似行为(也可能是 GPU 版本更快但不是非常快的地方)?这些解释是否有意义,或者这种行为是否太奇怪以至于不真实?当通过prettytensor(或tensorflow)访问GPU时,是否有其他工具/技巧可以用来弄清楚GPU上发生了什么?我知道 tensorflow 的时间线功能,如此处所述但我发现这有点难以解读。

我的 GPU:NVIDIA GeForce GT 730 (2GB) 主要:3 次要:5 memoryClockRate (GHz) 0.9015

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

4

1 回答 1

2

这些观察是有道理的,我也有一个模型在 GPU 上比在 CPU 上运行得稍慢。当时的情况是,网络很小,整个过程受 CPU 限制,并且传输 CPU->GPU->CPU 会稍微减慢速度。

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

于 2016-12-15T13:36:25.353 回答