Tensorflow:您如何在模型训练期间实时监控 GPU 性能?

Posted

技术标签:

【中文标题】Tensorflow:您如何在模型训练期间实时监控 GPU 性能?【英文标题】:Tensorflow: How do you monitor GPU performance during model training in real-time? 【发布时间】:2018-01-14 14:58:03 【问题描述】:

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

我有一些基本问题:

    为 GPU 安装了 Tensorflow。那么我想,它会自动优先考虑 GPU 的使用吗?如果是这样,它是同时使用所有 4 个,还是使用 1 个然后在需要时招募另一个?

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

我完全理解这是基本的硬件问题,但对这些具体问题给出明确的明确答案会很棒。

编辑:

根据这个输出 - 这真的是说我的每个 GPU 上的几乎所有内存都在使用吗?

【问题讨论】:

对于 2:在单独的终端窗口中尝试 nvidia-smi watch -n0.1 nvidia-smi 每使用 0.1 秒 非常感谢 - 请参阅编辑 另外,根据我的 tensorflow 经验,我的默认设置会抓取所有 GPU 上的所有内存。为了避免这种情况,我将会话配置的选项gpu_options.allow_growth 设置为True。另见***.com/questions/34199233。 nvidia-smi -l 也可以解决问题 【参考方案1】:

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

$ sudo apt install nvtop
$ nvtop

【讨论】:

我喜欢这个,很好用。【参考方案2】:

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

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

    每 0.1 秒检查一次使用情况

    watch -n0.1 nvidia-smi

【讨论】:

【参考方案3】:

试试这个命令:

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

这是一个演示:

【讨论】:

【参考方案4】:

您应该使用nvidia-smi。请记住,根据您的工作量,如果任务在 2 个采样事件之间完成,您可能看不到负载有任何变化。

另外请记住,最大采样间隔为 1/6 秒,根据:http://manpages.org/nvidia-smi

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

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

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

【讨论】:

【参考方案5】:

如果您使用 GCP,请查看此脚本,该脚本允许您监控 StackDriver 中的 GPU 利用率,您还可以使用它使用nvidia-smi -l 5 命令收集 nvidia-smi 数据并报告这些统计信息以供您跟踪.

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

【讨论】:

【参考方案6】:

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

如果您想同时看到htopnvidia-smi 之类的内容,可以尝试glances (pip install glances)。

【讨论】:

【参考方案7】:
    如果没有给出其他指示,启用 GPU 的 TensorFlow 安装将默认使用第一个可用的 GPU(只要您安装了 Nvidia 驱动程序和 CUDA 8.0 并且 GPU 具有必要的compute capability,其中,@ 987654322@ 是 3.0)。如果你想使用更多的 GPU,你需要在你的图中使用 tf.device 指令(更多关于它的here)。 检查 GPU 使用情况的最简单方法是控制台工具 nvidia-smi。但是,与top 或其他类似程序不同,它只显示当前使用情况并完成。正如 cmets 中所建议的,您可以使用 watch -n1 nvidia-smi 之类的东西连续重新运行程序(在这种情况下是每秒一次)。

【讨论】:

以上是关于Tensorflow:您如何在模型训练期间实时监控 GPU 性能?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Tensorboard 实时监控训练并可视化模型架构

训练CNN模型图像分类期间的tensorflow NaN损失

TensorFlow 数据集导致内核在迭代期间终止进程

生产环境中的 TensorFlow:如何重新训练您的模型

Sagemaker 在训练期间未将 Tensorboard 日志输出到 S3

AI - TensorFlow - 示例05:保存和恢复模型