CPU 在 prettytensor 演示上比 GPU 快 shakespeare.py
CPU faster than GPU on prettytensor demo shakespeare.py
我是 运行 来自 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 上比在 GPU 上更快(~ 0.2 秒)(~0.25 秒)。
通过 htop
监控 CPU 使用情况时,我观察到所有 8 个 CPU 线程都得到了很好的使用。加上使用 GPU 产生的通信开销,我猜这可能是一个可能的解释。另外,可能是模型太小,无法真正受益于 GPU 计算能力 and/or 我的 GPU 太低端了。
我的问题是:您是否曾经使用 prettytensor 或 tensorflow 观察到类似的行为(也可能是 GPU 版本更快但不是特别快)?这些解释是否有意义,或者这种行为是否太奇怪而不是真的?在通过 prettytensor(或 tensorflow)访问 GPU 时,是否还有其他 tools/tricks 我可以用来弄清楚 GPU 上到底发生了什么?我知道 tensorflow 的时间轴功能,如 所述,但我发现这有点难以破译。
我的显卡:
英伟达 GeForce GT 730 (2GB)
主要:3 次要:5 memoryClockRate (GHz) 0.9015
我的CPU:
4 核(每核 2 个超线程)类型
英特尔(R) 酷睿(TM) i7-4790K CPU @ 4.00GHz
这些观察是有道理的,而且我还有一个模型在 GPU 上的运行速度比在 CPU 上稍慢。当时的情况是,网络很小,整个过程是 CPU-bound 并且传输 CPU->GPU->CPU 会稍微减慢速度.
在你的情况下,你可以尝试做的是 运行 带有 GPU 的模型,看看 GPU 利用率(通过 nvidia-smi
)是否很小,同时, CPU高。
我是 运行 来自 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 上比在 GPU 上更快(~ 0.2 秒)(~0.25 秒)。
通过 htop
监控 CPU 使用情况时,我观察到所有 8 个 CPU 线程都得到了很好的使用。加上使用 GPU 产生的通信开销,我猜这可能是一个可能的解释。另外,可能是模型太小,无法真正受益于 GPU 计算能力 and/or 我的 GPU 太低端了。
我的问题是:您是否曾经使用 prettytensor 或 tensorflow 观察到类似的行为(也可能是 GPU 版本更快但不是特别快)?这些解释是否有意义,或者这种行为是否太奇怪而不是真的?在通过 prettytensor(或 tensorflow)访问 GPU 时,是否还有其他 tools/tricks 我可以用来弄清楚 GPU 上到底发生了什么?我知道 tensorflow 的时间轴功能,如
我的显卡: 英伟达 GeForce GT 730 (2GB) 主要:3 次要:5 memoryClockRate (GHz) 0.9015
我的CPU: 4 核(每核 2 个超线程)类型 英特尔(R) 酷睿(TM) i7-4790K CPU @ 4.00GHz
这些观察是有道理的,而且我还有一个模型在 GPU 上的运行速度比在 CPU 上稍慢。当时的情况是,网络很小,整个过程是 CPU-bound 并且传输 CPU->GPU->CPU 会稍微减慢速度.
在你的情况下,你可以尝试做的是 运行 带有 GPU 的模型,看看 GPU 利用率(通过 nvidia-smi
)是否很小,同时, CPU高。