我试图监控一个使用CUDA和MPI的进程,有没有办法我可以做到这一点,像命令“顶部”,但也监控GPU ?


当前回答

您可以尝试nvtop,它类似于广泛使用的htop工具,但用于NVIDIA gpu。下面是nvtop的截图。

其他回答

Prometheus GPU Metrics exporters (PGME)利用了nvidai-smi二进制文件。你可以试试这个。一旦运行了导出器,就可以通过http://localhost:9101/metrics访问它。对于两个gpu,示例结果如下所示:

temperature_gpu{gpu="TITAN X (Pascal)[0]"} 41
utilization_gpu{gpu="TITAN X (Pascal)[0]"} 0
utilization_memory{gpu="TITAN X (Pascal)[0]"} 0
memory_total{gpu="TITAN X (Pascal)[0]"} 12189
memory_free{gpu="TITAN X (Pascal)[0]"} 12189
memory_used{gpu="TITAN X (Pascal)[0]"} 0
temperature_gpu{gpu="TITAN X (Pascal)[1]"} 78
utilization_gpu{gpu="TITAN X (Pascal)[1]"} 95
utilization_memory{gpu="TITAN X (Pascal)[1]"} 59
memory_total{gpu="TITAN X (Pascal)[1]"} 12189
memory_free{gpu="TITAN X (Pascal)[1]"} 1738
memory_used{gpu="TITAN X (Pascal)[1]"} 10451

另一种有用的监控方法是对消耗gpu的进程使用ps过滤。我经常用这个:

ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `lsof -n -w -t /dev/nvidia*`

这将显示所有nvidia gpu利用进程和一些统计数据。lsof……检索当前用户拥有的nvidia GPU的所有进程的列表,并且ps -p…显示这些进程的ps结果。Ps f显示子/父进程关系/层次结构的良好格式,-o指定自定义格式。这个类似于ps u,但添加了进程组ID并删除了一些其他字段。

这与nvidia-smi相比的一个优点是,它将显示使用GPU的主进程以及进程分叉。

但是,它的一个缺点是它仅限于执行该命令的用户拥有的进程。为了将其开放给任何用户拥有的所有进程,我在lsof之前添加了一个sudo。

最后,我将它与手表结合起来,以获得持续的更新。所以,在最后,它看起来像:

watch -n 0.1 'ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `sudo lsof -n -w -t /dev/nvidia*`'

它的输出如下:

Every 0.1s: ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `sudo lsof -n -w -t /dev/nvi...  Mon Jun  6 14:03:20 2016
USER      PGRP   PID %CPU %MEM  STARTED     TIME COMMAND
grisait+ 27294 50934  0.0  0.1   Jun 02 00:01:40 /opt/google/chrome/chrome --type=gpu-process --channel=50877.0.2015482623
grisait+ 27294 50941  0.0  0.0   Jun 02 00:00:00  \_ /opt/google/chrome/chrome --type=gpu-broker
grisait+ 53596 53596 36.6  1.1 13:47:06 00:05:57 python -u process_examples.py
grisait+ 53596 33428  6.9  0.5 14:02:09 00:00:04  \_ python -u process_examples.py
grisait+ 53596 33773  7.5  0.5 14:02:19 00:00:04  \_ python -u process_examples.py
grisait+ 53596 34174  5.0  0.5 14:02:30 00:00:02  \_ python -u process_examples.py
grisait+ 28205 28205  905  1.5 13:30:39 04:56:09 python -u train.py
grisait+ 28205 28387  5.8  0.4 13:30:49 00:01:53  \_ python -u train.py
grisait+ 28205 28388  5.3  0.4 13:30:49 00:01:45  \_ python -u train.py
grisait+ 28205 28389  4.5  0.4 13:30:49 00:01:29  \_ python -u train.py
grisait+ 28205 28390  4.5  0.4 13:30:49 00:01:28  \_ python -u train.py
grisait+ 28205 28391  4.8  0.4 13:30:49 00:01:34  \_ python -u train.py

在Linux Mint和Ubuntu中,你可以尝试"nvidia-smi——loop=1"

你可以使用nvidia-smi pmon -i 0来监控GPU 0中的每个进程。 包括计算模式、sm使用情况、内存使用情况、编码器使用情况、解码器使用情况。

要获得使用资源的实时洞察,请执行:

Nvidia-smi -l

这将在每一秒循环并调用视图。

如果你不想在控制台历史记录中保留循环调用的过去痕迹,你也可以这样做:

观看-n0.1 nvidia-smi

其中0.1是时间间隔,单位为秒。