我正在尝试监视使用cuda和MPI的进程,有什么办法可以执行此操作,例如命令“ top”,但它也监视GPU?
我正在尝试监视使用cuda和MPI的进程,有什么办法可以执行此操作,例如命令“ top”,但它也监视GPU?
Answers:
我发现gpustat非常有用。In可以与一起安装pip install gpustat
,并按进程或用户打印使用情况明细。
watch gpustat -cp
您可以连续查看统计信息,但颜色消失了。您如何解决?@Alleo
watch -c
。@Roman Orac,谢谢,当我由于在python中导入_curses而遇到一些错误时,这在redhat 8上也对我有用。
watch -c gpustat -cp --color
watch -n 0.5 -c gpustat -cp --color
--watch
选择:gpustat -cp --watch
nvidia-smi -l 1
这将循环并每秒调用一次视图。
如果您不想在控制台历史记录中保留过去的循环调用记录,也可以执行以下操作:
watch -n0.1 nvidia-smi
其中0.1是时间间隔,以秒为单位。
我不知道有什么可以组合这些信息的,但是您可以使用该nvidia-smi
工具来获取原始数据,就像这样(感谢@jmsu提供有关-l的提示):
$ nvidia-smi -q -g 0 -d UTILIZATION -l
==============NVSMI LOG==============
Timestamp : Tue Nov 22 11:50:05 2011
Driver Version : 275.19
Attached GPUs : 2
GPU 0:1:0
Utilization
Gpu : 0 %
Memory : 0 %
watch -n 0.5 nvidia-smi
,这样可以避免在终端上填满输出
从以下位置下载并安装最新的稳定CUDA驱动程序(4.2) 此处。在Linux上,nVidia-smi 295.41可以为您提供所需的一切。用途nvidia-smi
:
[root@localhost release]# nvidia-smi
Wed Sep 26 23:16:16 2012
+------------------------------------------------------+
| NVIDIA-SMI 3.295.41 Driver Version: 295.41 |
|-------------------------------+----------------------+----------------------+
| Nb. Name | Bus Id Disp. | Volatile ECC SB / DB |
| Fan Temp Power Usage /Cap | Memory Usage | GPU Util. Compute M. |
|===============================+======================+======================|
| 0. Tesla C2050 | 0000:05:00.0 On | 0 0 |
| 30% 62 C P0 N/A / N/A | 3% 70MB / 2687MB | 44% Default |
|-------------------------------+----------------------+----------------------|
| Compute processes: GPU Memory |
| GPU PID Process name Usage |
|=============================================================================|
| 0. 7336 ./align 61MB |
+-----------------------------------------------------------------------------+
编辑:在最新的NVIDIA驱动程序中,此支持仅限于Tesla卡。
另一种有用的监视方法是ps
在消耗GPU的进程上使用过滤。我经常使用这个:
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的主要进程。
但是,缺点之一是它仅限于执行命令的用户所拥有的进程。要将其开放给任何用户拥有的所有进程,请sudo
在lsof
。
最后,我将其与之结合watch
以获得持续更新。因此,最后看起来像:
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
sudo
像这样获取占用所有用户GPU的计算程序的PID :nvidia-smi --query-compute-apps=pid --format=csv,noheader
nvidia-smi
并不会列出所有进程,因此最终您的内存将被未列出的进程占用。这是我跟踪和终止这些进程的主要方式。
pmem
给定的值不会考虑ps
GPU的总内存,而是CPU的总内存,因为ps
它不了解“ Nvidia GPU”
有Prometheus GPU指标导出器(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