运行张量流训练作业时,GPU util 为 0,上下文切换非常高


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

我运行分布式张量流来训练图像分类模型,但没有看到 GPU 使用情况(实际上,mnist 或其他训练作业的 GPU 利用率也是 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。

以前有人见过吗?

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

1(你可以通过使用nvidia-smi来检查:尽管GPU利用率为0%,但GPU内存利用率也是0%吗?如果流程中根本没有任何进程?

-- 如果是这样,你的 GPU 根本没有被使用,张量流必须在 CPU 上运行(你可以使用 top 来检查 CPU 使用率,如果它高于 100%,那么这是该程序实际上是在 CPU 上被截断的额外证明(

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

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

CUDA_VISIBLE_DEVICES=0 蟒蛇rnn_mnist.py

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

2(如果不是这种情况,python确实在GPU上运行,它只是利用率为0%。还有另一种可能性是数据获取花费太多时间,这是在 CPU 上,GPU 总是在等待数据,所以利用率平均为 0%。

-- 最可能的原因是你设置batch_size太小,试试 128 或 1024。

最新更新