如何监控和改进用于深度学习的 GPU 使用率?

如果您刚刚为您的下一个很棒的深度学习项目购买了一些漂亮的闪亮 GPU,并且已经开始工作。您可以听到风扇呼呼的声音(或者您可以想象它们在云中某处呼呼),但您如何确保充分利用这些 GPU?

下面我们将介绍一些可用于监控 GPU 的工具。检查它们的利用率、温度和内存使用情况。我们将介绍如何安装它们,它们最擅长什么,以及如何使用它们的一些技巧。通过确保充分利用 GPU,您至少可以确保它们尽可能快地运行现有模型(更改模型以使其尽可能高效是另一个话题)。

内容

先决条件
英伟达-smi
gpustat
nvtop
nvitop
jupyterlab-nvdashboard
其他

先决条件

至少配备一个 NVIDIA GPU 的计算机
Ubuntu 操作系统 20.04 LTS、18.04 LTS 或 16.04 LTS
与您的 GPU 类型和所需 CUDA 版本相匹配的NVIDIA 驱动程序。您可以使用Stack为 CUDA、cuDNN、NVIDIA 驱动程序以及 PyTorch 和 TensorFlow 等框架进行无忧的单行安装。

英伟达-smi

如果您正在进行深度学习,那么您使用的很有可能是 NVIDIA GPU,那么最熟悉的 GPU 监控工具就是老式的 nvidia-smi(NVIDIA 系统管理界面)。此命令行实用工具随 NVIDIA 驱动程序一起安装,可能是大多数用户熟悉的监控工具。

安装

nvidia-smi 通常在 NVIDIA 驱动程序安装期间安装,尽管它是一个单独的包。

用法

使用 nvidia-smi 就像在终端提示符下键入一样简单nvidia-smi,您应该会看到类似以下的输出:
在这里插入图片描述
默认输出一目了然地提供了有用的 GPU 状态摘要。这对于快速了解正在发生的事情非常有用,但您可以使用 nvidia-smi 做更多事情。

随着时间的推移,想要密切关注您的 GPU 利用率是很常见的。nvidia-smi 可以选择-l在给定的时间间隔内重复显示 GPU 信息。但是,我发现将它与 watch 命令结合使用会产生更好的输出:

watch -n 0.1 nvidia-smi

nvidia-smi 还允许您查询有关 GPU 的信息,并提供一种可配置的方式来设置要显示的参数,然后以机器可读的 csv 格式记录它们(使用该-f选项将其发送到文件以供以后分析)。

nvidia-smi --query-gpu=timestamp,name,pci.bus_id,temperature.gpu,utilization.gpu,utilization.memory --format=csv -l 1
在这里插入图片描述
还有一些dmon子pmon命令提供有关设备或在这些设备上运行的进程的信息。这些对于查看 GPU 利用率如何随时间变化非常有用,特别是如果您想将这些导出到文件以供以后分析。但是,如果您想要更直观地了解正在发生的事情,那么此列表中的其他工具可能会更好地为您服务。

nvidia-smi -q -d TEMPERATURE,PERFORMANCE根据 GPU 的温度以及当前系统是否正在经历热节流,显示预设阈值以减慢/关闭 GPU。通常,如果您经常看到 HW Slowdown 被激活,您可能需要改进机器的冷却。这可以通过隔开 GPU、为 CPU 安装更强大的风扇或水冷器或升级机箱来实现。测试系统热性能的一个有用工具是使用诸如gpu-burn之类的工具对所有 GPU 进行压力测试,并在 nvidia-smi 的帮助下查看系统是否遇到热节流。

nvidia-smi topo -m是检查“GPU 拓扑”的有用命令,它描述了系统中的 GPU 如何相互连接,以及如何连接到 CPU 等主机设备。拓扑对于了解 GPU 之间的数据传输是通过直接内存访问(DMA) 还是通过主机设备进行非常重要。

最后,nvidia-smi 可以帮助您调试 GPU、系统或功耗、执行模式等设置的错误。

gpustat

如果您对 nvidia-smi 的更简洁、更漂亮和更简单的替代方案感兴趣,名为gpustat的 Python 库是一个不错的选择。默认情况下,它会为每个 GPU 打印一行,其中仅包含最重要的信息,并清楚地突出显示以方便阅读。

安装
pip install --user gpustat
请注意,我们在此处使用 user 标志安装此 Python 包,仅为当前用户安装。但是,您可能更喜欢使用pipx 之类的工具在隔离环境中安装 Python 应用程序。

用法
只需键入即可gpustat给出当前 GPU 状态的简明易读摘要:
在这里插入图片描述
Gpustat 有一些可配置的选项来显示什么信息。例如,gpustat -cup将在不同 GPU 上附加进程的命令、用户和 PID,如果您尝试在多个用户之间共享 GPU 资源而不想深入研究更精细的调度工具,这将非常有用。

Gpustat 还附带有用的–watch命令,它将在给定的时间间隔运行 gpustat。这相当于运行 Linuxwatch命令,但您不必添加额外的命令来保留输出颜色。

nvtop

如果您熟悉 Linux 命令行工具,那么您可能熟悉工具 top 和 htop。这些工具为您提供了系统负载的实时仪表板。nvtop基本上做同样的事情,但对于 NVIDIA GPU。有了它,您可以在训练工作进行时查看来自 GPU 的关键信息的实时图表。

安装
sudo apt install nvtop

用法
键入nvtop将打开基于终端的界面,其中包含更新图形和 GPU 上正在运行的进程的摘要:
在这里插入图片描述
nvtop 允许您自定义显示:从图表中显示的信息到进程的排序方式以及更新的频率。这些可以交互配置,甚至可以保存到磁盘,以便您的设置在会话之间保持不变。

nvtop 还带来了一个类似于 htop 的功能:从 GUI 交互式地终止进程的能力。如果您编写了一些挂起的有缺陷的 PyTorch DDP 代码,或者您不太热衷于共享这些 GPU 资源,这将非常方便!

nvitop

nvitop是一个结合了 nvidia-smi 的信息内容和 gpustat 漂亮的终端着色和 nvtop 的交互式监控的工具。结果是一个功能强大、信息丰富且美观的工具,用于监控您的 GPU。

安装
pip install --user nvitop

用法
默认情况下,键入nvitop会将其启动到监控模式,该模式会显示持续的、自我更新的 GPU 信息屏幕。
在这里插入图片描述
但是,如果您想显示更像 nvidi-smi 的一次性输出,只需传递-1标志nvitop -1.

尽管能够显示大量有用的信息,nvitop 也足够智能,可以根据终端的可用大小进行缩放,根据需要将显示的数量减少到基本的必需品。与交互模式下的 nvtop 非常相似,它允许您自定义显示并以交互方式排序和终止进程,同时突出显示任何选定进程的相关 GPU。
在这里插入图片描述
更进一步,nvitop 提供了一个 Python API,您可以使用它在自己的代码中轻松查询所有这些 GPU 信息,并与两个流行的高级机器学习框架完美集成:Keras 和 PyTorch Lightning!

jupyterlab-nvdashboard

如果您喜欢在 Jupyter 环境而不是命令行中工作,那么下一个工具可能是满足您的 GPU 监控需求的正确解决方案。rapidsai 团队开发的 Jupyter Lab 插件jupyterlab-nvdashboard 为 Jupyter添加了 GPU 监控信息。

安装
pip install --user jupyterlab_nvdashboard

用法
在这里插入图片描述
该插件添加了一个新选项卡,直接在浏览器中的交互式图表中显示基本的 GPU 统计数据。当我们进行测试时,我们遇到了一些间歇性的错误,但该项目正在积极开发中,我们希望它能够演变成一个有用的工具。

其他

除了上面列出的工具外,还有许多其他用于监控 GPU 使用情况的选项。如果您已经在使用 Weights & Biases 之类的日志库,那么默认情况下通常会内置一些 GPU 监控统计信息。

如果您已经熟悉 Grafana 进行监控,那么您可能会对 nvidia-smi 的nvidia_gpu_exporter感兴趣,它允许您通过Grafana 仪表板收集和可视化 GPU 统计信息。
在这里插入图片描述
如果您真的想深入了解 GPU 中正在发生的事情,还有成熟的 GPU 分析工具,例如最近升级的PyTorch Profiler和NVIDIA 的 Visual Profiler。这些通常会影响代码的执行速度,因此您不会一直想要使用这些东西。但是,它们对于准确查看模型执行和训练期间花费的时间非常有用。

最后,您还可以使用类似pynvml的库在 Python 中以编程方式获取 GPU 信息。有了这个,你可以在训练运行期间检查你想要的任何 GPU 统计数据,或者编写你自己的 GPU 监控库。

结论
在这篇文章中,我们回顾了许多用于监控 GPU 的工具。我们建议将 nvidia-smi 作为处理 NVIDIA GPU 的基本工具,并建议将其用于典型的 GPU 监控、维护和设置任务。

我们认为 nvitop 是目前最好的库,它具有良好的格式和有用的功能,可用于日常监控 GPU。它的安装和使用也很简单,并带有方便的 API 和集成。

最后,如果您将大部分时间都花在 Jupyter 笔记本上,那么 jupyterlab-nvdashboard 可能是您的不错选择。它仍处于开发的早期阶段,但希望它将演变成一个强大的、功能丰富的工具。

最后希望我们本次分享的这个内容,能让您的深度学习训练更容易一些,更快乐的进行GPU 监控!

想了解更多GPU相关信息,可关注我们(微信公众号:昊源诺信)期待您的到来!

猜你喜欢

转载自blog.csdn.net/weixin_50197960/article/details/127305075