运行tensorflow训练作业时Gpu util为0,并且上下文切换非常高

时间:2017-08-15 02:27:17

标签: tensorflow gpu nvidia

tensorflow: 1.2.0
gpu: TITAN X (Pascal)
driver: 370.28

我运行distrubuted tensorflow来训练图像分类模型,但是看不到gpu使用(实际上,mnist或其他训练作业的gpu util也是0)。

在训练过程中有很多轮询系统调用(民意调查fd是/ dev / nvidia0):

 poll([{fd=8, events=POLLIN}, {fd=12, events=POLLIN}, {fd=13, events=POLLIN}, {fd=14, events=POLLIN}, {fd=15, events=POLLIN}, {fd=17, events=POLLIN}, {fd=18, events=POLLIN}, {fd=19, events=POLLIN}, {fd=20, events=POLLIN}, {fd=21, events=POLLIN}], 10, 100 <unfinished ...>
 futex(0x2d1eca4, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 3340677, {1502763800, 428734182}, ffffffff) = -1 ETIMEDOUT (Connection timed out)

vmstat显示非常高的上下文切换,每秒数百万个cs。

以前有人见过这个吗?

1 个答案:

答案 0 :(得分:1)

之前我遇到过同样的问题,但这是因为我的gpu没有设置运行 - 我在我的CPU上运行了tensorflow,但我认为它是在GPU上运行的。如果你做的一切都是正确的,那就不会是这样了。

1)您可以通过使用nvidia-smi来检查:尽管gpu util为0%,但是gpu memory util也是0%?如果进程中根本没有任何进程?

- 如果是这样,你的gpu根本就没用了,张量流必须在CPU上运行(你可以使用top来检查cpu的使用情况,如果它高于100%那么它就是一个额外的证据,证明该程序实际上已经过了在CPU上)

在这种情况下,您应该检查是否已经安装了tensorflow的gpu版本。您可以在www.tensorflow.org中找到2个不同版本的安装介绍,以获取cpu / gpu。 CPU版本张量流可能永远不会在GPU上运行。

此外,某些机器环境要求您明确指定要使用的gpu设备。使用如下命令检查:

CUDA_VISIBLE_DEVICES = 0 python rnn_mnist.py

(注意=?必须采用正确的格式,例如CUDA_VISIBLE_DEVICES = [0]无效但不会提升警告,程序将仅在CPU上运行)

2)如果不是这样的话,python实际上是在GPU上运行的,而它只是效用率是0%。另一种可能性是数据获取花费了太多时间,这在CPU上,并且GPU总是在等待数据,因此util是平均0%。

- 最可能的原因是您将batch_size设置得太小,请尝试128或1024。