GPU使用CUDA的top命令


Answers:


83

我发现gpustat非常有用。In可以与一起安装pip install gpustat,并按进程或用户打印使用情况明细。

在此处输入图片说明


4
输入后,watch gpustat -cp您可以连续查看统计信息,但颜色消失了。您如何解决?@Alleo
AbhimanyuAryan

1
@AbhimanyuAryan使用watch -c。@Roman Orac,谢谢,当我由于在python中导入_curses而遇到一些错误时,这在redhat 8上也对我有用。
Bobak Hashemi

4
watch -c gpustat -cp --color
李·尼瑟顿

1
watch -n 0.5 -c gpustat -cp --color
加布里埃尔·罗蒙

3
gpustat现在可以--watch选择:gpustat -cp --watch
jayelm,

138

要实时了解所用资源,请执行以下操作:

nvidia-smi -l 1

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

如果您不想在控制台历史记录中保留过去的循环调用记录,也可以执行以下操作:

watch -n0.1 nvidia-smi

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

在此处输入图片说明


2
每0.1秒查询一次卡吗?那会在卡上造成负载吗?另外,使用手表,您每隔0.1秒就开始一个新过程。
米克T

@MickT这有什么大不了的吗?由于Nvidia-smi具有这种构建循环!“ watch”命令与nvidia-smi -l有很大不同吗?
Mohammad Javad

可能是,我已经看到低端卡具有怪异的锁定,并且我认为这是因为太多的用户在卡上运行nvidia-smi。我认为使用“ nvidia-smi -l”是一种更好的方法,因为您不必每次都进行新的处理。另外,每隔0.1秒钟检查一次卡是过大的,尝试调试问题时,我会每秒进行一次检查,否则,每5分钟进行一次检查以监视性能。希望对您有所帮助!:)
Mick T

@Gulzar是的,是的。
TrostAft

83

我不知道有什么可以组合这些信息的,但是您可以使用该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 %

4
我认为,如果在其中添加-l,则可以使其不断更新,从而有效地监视GPU和内存利用率。
jmsu 2011年

6
如果我运行它时,GPU实用程序只说不适用,该怎么办?
natorro

3
@natorro看起来nVidia放弃了对某些卡的支持。检查此链接forums.nvidia.com/index.php?showtopic=205165
jmsu 2011年

29
我更喜欢watch -n 0.5 nvidia-smi,这样可以避免在终端上填满输出
ali_m 2016年

nvidia-smi pmon -i 0
changqi.xia

19

从以下位置下载并安装最新的稳定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卡。


18

使用参数“ --query-compute-apps =“

nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv

如需更多帮助,请关注

nvidia-smi --help-query-compute-app

17

仅使用watch nvidia-smi,默认情况下它将以2s的间隔输出消息。

例如,如下图所示:

在此处输入图片说明

您也可以使用watch -n 5 nvidia-smi(-n 5 x 5s间隔)。


16

另一种有用的监视方法是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的主要进程。

但是,缺点之一是它仅限于执行命令的用户所拥有的进程。要将其开放给任何用户拥有的所有进程,请sudolsof

最后,我将其与之结合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

2
您也可以sudo像这样获取占用所有用户GPU的计算程序的PID :nvidia-smi --query-compute-apps=pid --format=csv,noheader
Lenar Hoyt

1
有时nvidia-smi并不会列出所有进程,因此最终您的内存将被未列出的进程占用。这是我跟踪和终止这些进程的主要方式。
rand

1
@grisaitis Carefull,我认为pmem给定的值不会考虑psGPU的总内存,而是CPU的总内存,因为ps它不了解“ Nvidia GPU”
SebMa,

9

您可以尝试使用nvtop,该htop工具类似于广泛使用的工具,但适用于NVIDIA GPU。这是运行中的屏幕截图nvtop

nvtop的屏幕截图


3

这可能并不优雅,但您可以尝试

while true; do sleep 2; nvidia-smi; done

我也尝试了@Edric的方法,该方法有效,但是我更喜欢的原始布局nvidia-smi


12
或者你可以做nvidia-smi -l 2。还是为了防止重复输出控制台,watch -n 2 'nvidia-smi'
grisaitis

3

如果只想查找在gpu上运行的进程,则只需使用以下命令即可:

lsof /dev/nvidia*

对我来说 nvidia-smiwatch -n 1 nvidia-smi在大多数情况下就足够了。有时不nvidia-smi显示任何进程,但GPU内存已用完,因此我需要使用上述命令来查找进程。


2

在Linux Mint和最有可能的Ubuntu中,您可以尝试“ nvidia-smi --loop = 1”


0

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

0

您可以nvidia-smi pmon -i 0用来监视GPU 0中的每个进程。包括计算模式,sm使用率,内存使用率,编码器使用率,解码器使用率。


0

您可以通过其 GPU监视插件使用监视程序概览

  • 开源的
  • 安装: sudo apt-get install -y python-pip; sudo pip install glances[gpu]
  • 推出: sudo glances

在此处输入图片说明

它还监视CPU,磁盘IO,磁盘空间,网络和其他一些东西:

在此处输入图片说明


0

我在Windows机器中用以下代码创建了一个批处理文件,以每秒进行一次监视。这个对我有用。

:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop

如果只想运行一次命令,则nvidia-smi exe通常位于“ C:\ Program Files \ NVIDIA Corporation”中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.