Tensorflow:如何实时监控模型培训期间的GPU性能?

时间:2017-08-07 10:19:52

标签: performance tensorflow gpu

我是Ubuntu和GPU的新手,最近在我们的实验室中使用了带有Ubuntu 16.04和4个NVIDIA 1080ti GPU的新PC。该机器还配备了i7 16核心处理器。

我有一些基本问题:

  1. 为GPU安装了Tensorflow。那么我认为它会自动优先考虑GPU的使用情况?如果是这样,它是否一起使用全部4个,还是使用1然后根据需要再招募另一个?

  2. 我可以在培训模型期间实时监控GPU使用/活动吗?

  3. 我完全理解这是基本的硬件,但对这些具体问题的明确答案将是很好的。

    编辑:

    基于此输出 - 这真的说我的每一个GPU上的几乎所有内存都被使用了吗?

    enter image description here

7 个答案:

答案 0 :(得分:11)

  1. Tensorflow自动不使用所有GPU,它只使用一个GPU,特别是第一个gpu /gpu:0

    您必须编写多个gpus代码才能使用所有可用的gpus。 cifar mutli-gpu example

  2. 每0.1秒检查一次使用情况

    watch -n0.1 nvidia-smi

答案 1 :(得分:4)

  1. 如果没有给出其他指示,启用GPU的TensorFlow安装将默认使用第一个可用的GPU(只要您安装了Nvidia驱动程序和CUDA 8.0并且GPU具有必要的compute capability, ,according to the docs是3.0)。如果您想使用更多GPU,则需要在图表中使用tf.device指令(有关它的更多信息here)。
  2. 检查GPU使用情况的最简单方法是控制台工具nvidia-smi。但是,与top或其他类似程序不同,它仅显示当前的使用情况和完成情况。正如评论中所建议的那样,您可以使用类似watch -n1 nvidia-smi的内容来连续重新运行程序(在这种情况下每秒)。

答案 2 :(得分:1)

尝试此命令:

nvidia-smi --query-gpu=utilization.gpu --format=csv --loop=1

这是一个演示:

enter image description here

答案 3 :(得分:0)

以上所有命令都使用watch,通过使用builin looper保持上下文有效,效率更高: nvidia-smi -l 1

如果您想同时看到htopnvidia-smi之类的东西,可以尝试glancespip install glances)。

答案 4 :(得分:0)

如果您使用的是GCP,请查看此脚本,该脚本可用于监视StackDriver中的GPU利用率,还可以使用它使用nvidia-smi -l 5命令收集nvidia-smi数据并为您报告这些统计信息进行跟踪。

https://github.com/GoogleCloudPlatform/ml-on-gcp/tree/master/dlvm/gcp-gpu-utilization-metrics

enter image description here

答案 5 :(得分:0)

您应该使用nvidia-smi。请记住,如果任务在两个采样事件之间完成,则可能看不到负载的变化,具体取决于您的工作量。

还请记住,最大采样间隔为:http://manpages.org/nvidia-smi

为1/6秒

使用率报告每个GPU在一段时间内有多忙,可用于确定应用程序在系统中使用GPU的数量。 注意:在启用ECC的驱动程序初始化期间,可以看到较高的GPU和内存利用率读数。这是由驱动程序初始化期间执行的ECC内存清理机制引起的。

GPU 在一个或多个内核在GPU上执行的过去采样周期内的时间百分比。取决于产品,采样时间可能在1秒到1/6秒之间。

内存 在读取或写入全局(设备)内存的过去采样周期内的时间百分比。取决于产品,采样时间可能在1秒到1/6秒之间。

答案 6 :(得分:0)

我建议 nvtop ,它显示实时状态,并且比nvidia-smi更易于观看。它还显示在图形中。

$ sudo apt install nvtop
$ nvtop

enter image description here