我正在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 个超线程)