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
.
如果您想同时看到htop
和nvidia-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 性能?的主要内容,如果未能解决你的问题,请参考以下文章
训练CNN模型图像分类期间的tensorflow NaN损失