GPU使用情况监控(CUDA)


223

我在计算机上安装了CUDA工具包,并在GPU上启动了BOINC项目。在BOINC中,我可以看到它正在GPU上运行,但是有没有一个工具可以向我显示有关GPU上正在运行的内容的更多详细信息-GPU使用率和内存使用率?

Answers:


250

对于Nvidia GPU,有一个工具nvidia-smi可以显示内存使用情况,GPU利用率和GPU温度。还有一个计算过程列表和更多选项,但是我的图形卡(GeForce 9600 GT)不受完全支持。

Sun May 13 20:02:49 2012       
+------------------------------------------------------+                       
| NVIDIA-SMI 3.295.40   Driver Version: 295.40         |                       
|-------------------------------+----------------------+----------------------+
| Nb.  Name                     | Bus Id        Disp.  | Volatile ECC SB / DB |
| Fan   Temp   Power Usage /Cap | Memory Usage         | GPU Util. Compute M. |
|===============================+======================+======================|
| 0.  GeForce 9600 GT           | 0000:01:00.0  N/A    |       N/A        N/A |
|   0%   51 C  N/A   N/A /  N/A |  90%  459MB /  511MB |  N/A      Default    |
|-------------------------------+----------------------+----------------------|
| Compute processes:                                               GPU Memory |
|  GPU  PID     Process name                                       Usage      |
|=============================================================================|
|  0.           Not Supported                                                 |
+-----------------------------------------------------------------------------+

1
我的ION芯片也没有显示使用情况。:/
拉斐尔2012年

123
watch -n 0.5 nvidia-smi,将使输出保持更新,而不会在终端上填充输出。
2016年

31
@Bar好提示。watch -d -n 0.5 nvidia-smi会更好。
zeekvfu

3
@zeekvfu我认为最好解释一下-d国旗的作用
donlucacorleone

5
@donlucacorleone man watch告诉我们该-d标志突出显示输出之间的差异,因此它可以帮助突出显示随时间变化的指标。
David Kaczynski '18

71

对于linux,use nvidia-smi -l 1将持续为您提供gpu使用情况信息,刷新间隔为1秒。


74
我更喜欢使用watch -n 1 nvidia-smi获取连续更新而不用向终端填充输出
ali_m '16

1
使用手表意味着您每秒都要开始一个新的过程以轮询卡。最好做-l,而不是每秒,我建议每分钟或每5分钟一次。
米克T


55

对于Intel GPU的存在着intel-gpu-toolshttp://intellinuxgraphics.org/项目,该项目带来的指令intel_gpu_top(除其他事项外)。它与top和相似htop,但专门用于Intel GPU。

   render busy:  18%: ███▋                                   render space: 39/131072
bitstream busy:   0%:                                     bitstream space: 0/131072
  blitter busy:  28%: █████▋                                blitter space: 28/131072

          task  percent busy
           GAM:  33%: ██████▋                 vert fetch: 0 (0/sec)
          GAFS:   3%: ▋                       prim fetch: 0 (0/sec)
            VS:   0%:                      VS invocations: 559188 (150/sec)
            SF:   0%:                      GS invocations: 0 (0/sec)
            VF:   0%:                           GS prims: 0 (0/sec)
            DS:   0%:                      CL invocations: 186396 (50/sec)
            CL:   0%:                           CL prims: 186396 (50/sec)
           SOL:   0%:                      PS invocations: 8191776208 (38576436/sec)
            GS:   0%:                      PS depth pass: 8158502721 (38487525/sec)
            HS:   0%:                      
            TE:   0%:                      
          GAFM:   0%:                      
           SVG:   0%:                      

35

nvidia-smi在某些Linux机器上不起作用(许多属性返回N / A)。您可以nvidia-settings改用(这也是mat kelcey在他的python脚本中使用的内容)。

nvidia-settings -q GPUUtilization -q useddedicatedgpumemory

您还可以使用:

watch -n0.1 "nvidia-settings -q GPUUtilization -q useddedicatedgpumemory"

进行连续监控。


4
很高兴这不是评论。碰到这个问题时,这正是我要寻找的东西。
2015年

谢谢,这对我有用,因为我有一个GeForce卡,该卡不受nvidia-smi支持。
alexg

4
您可以nvidia-settings -q all查看要监视的其他参数。我正在监视GPUCurrentProcessorClockFreqsGPUCurrentClockFreqs
alexg

1
谢谢男人,查询所有内容的好主意,因为每张卡可能有不同的字符串要监视!
ruoho ruotsi '16

如果您只想要数字而不是其他任何东西(例如nvidia-settings -q [gpu:0]/UsedDedicatedGPUMemory -t
conky

16

对于Linux,我使用我自己编写的类似HTOP的工具。它监视并概述GPU温度以及内核/ VRAM / PCI-E和内存总线使用情况。它不会监视GPU上正在运行的内容。

监控器

在此处输入图片说明


1
nvidia-settings需要运行X11,并非总是如此。
维克多·

为我工作没有麻烦!
Hennadii Madan

15

为了完整性,AMD有两种选择:

  1. fglrx(封闭源代码驱动程序)。

    $ aticonfig --odgc --odgt
    
  2. mesa(开源驱动程序),则可以使用RadeonTop

    查看您的GPU利用率,包括总活动百分比和单个块。


13

我有一个GeForce 1060 GTX视频卡,我发现以下命令为我提供了有关卡利用率,温度,风扇速度和功耗的信息:

$ nvidia-smi --format=csv --query-gpu=power.draw,utilization.gpu,fan.speed,temperature.gpu

您可以通过以下方式查看所有查询选项的列表:

$ nvidia-smi --help-query-gpu

1
也应该加上memory.used或(memory.free)。
Zoltan '18

3

对于OS X

包括山狮

iStat菜单

不包括山狮

atMonitor

支持GPU相关功能的atMonitor的最新版本是atMonitor 2.7.1。

–和2.7.1的链接提供2.7b。

对于该应用程序的最新版本,atMonitor-常见问题解答说明:

为了使atMonitor与MacOS 10.8兼容,我们删除了所有与GPU相关的功能。

我在装有NVIDIA GeForce 9600M GT的MacBookPro5,2上在Mountain Lion上进行了2.7b aka 2.7.1的实验。该应用程序在退出前运行了几秒钟,显示温度但没有显示使用情况:

                                                  山狮atMonitor 2.7b的屏幕截图


3

我的进程已终止(可能已终止或崩溃)并继续使用资源,但未在中列出nvidia-smi。通常这些进程只是占用gpu内存。

如果您认为自己有一个进程正在使用GPU上的资源,而该进程未在中显示nvidia-smi,则可以尝试运行此命令进行仔细检查。它将向您显示正在使用GPU的进程。

sudo fuser -v /dev/nvidia*

这在EL7,Ubuntu或其他发行版上可能有效,其nvidia设备可能会在另一个名称/位置下列出。



2

对于Linux上的nvidia,我使用以下python脚本,该脚本使用可选的延迟并像iostat和vmstat一样重复

https://gist.github.com/matpalm/9c0c7c6a6f3681a0d39d

$ gpu_stat.py 1 2
{"util":{"PCIe":"0", "memory":"10", "video":"0", "graphics":"11"}, "used_mem":"161", "time": 1424839016}
{"util":{"PCIe":"0", "memory":"10", "video":"0", "graphics":"9"}, "used_mem":"161", "time":1424839018}


1

以下函数将信息(例如PID,用户名,CPU使用率,内存使用率,GPU内存使用率,程序参数和正在GPU上运行的进程的运行时间)附加到以下输出nvidia-smi

function better-nvidia-smi () {
    nvidia-smi
    join -1 1 -2 3 \
        <(nvidia-smi --query-compute-apps=pid,used_memory \
                     --format=csv \
          | sed "s/ //g" | sed "s/,/ /g" \
          | awk 'NR<=1 {print toupper($0)} NR>1 {print $0}' \
          | sed "/\[NotSupported\]/d" \
          | awk 'NR<=1{print $0;next}{print $0| "sort -k1"}') \
        <(ps -a -o user,pgrp,pid,pcpu,pmem,time,command \
          | awk 'NR<=1{print $0;next}{print $0| "sort -k3"}') \
        | column -t
}

输出示例:

$ better-nvidia-smi
Fri Sep 29 16:52:58 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 378.13                 Driver Version: 378.13                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GT 730      Off  | 0000:01:00.0     N/A |                  N/A |
| 32%   49C    P8    N/A /  N/A |    872MiB /   976MiB |     N/A      Default |
+-------------------------------+----------------------+----------------------+
|   1  Graphics Device     Off  | 0000:06:00.0     Off |                  N/A |
| 23%   35C    P8    17W / 250W |    199MiB / 11172MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0                  Not Supported                                         |
|    1      5113    C   python                                         187MiB |
+-----------------------------------------------------------------------------+
PID   USED_GPU_MEMORY[MIB]  USER    PGRP  %CPU  %MEM   TIME      COMMAND
9178  187MiB                tmborn  9175  129   2.6    04:32:19  ../path/to/python script.py args 42

仔细一点,我认为ps给出的pmem不会考虑GPU的总内存,而是CPU的总内存,因为ps不了解“ Nvidia GPU”
SebMa,

0

该脚本更具可读性,旨在用于简单的mod和扩展。

您可以使用自己喜欢的终端窗口程序替换gnome-terminal。


#! /bin/bash

if [ "$1" = "--guts" ]; then
    echo; echo "    ctrl-c to gracefully close"
    f "$a"
    f "$b"
    exit 0; fi

# easy to customize here using "nvidia-smi --help-query-gpu" as a guide
a='--query-gpu=pstate,memory.used,utilization.memory,utilization.gpu,encoder.stats.sessionCount'
b='--query-gpu=encoder.stats.averageFps,encoder.stats.averageLatency,temperature.gpu,power.draw'
p=0.5    # refresh period in seconds
s=110x9  # view port as width_in_chars x line_count

c="s/^/    /; s/, +/\t/g"
t="`echo '' |tr '\n' '\t'`"
function f() { echo; nvidia-smi --format=csv "$1" |sed -r "$c" |column -t "-s$t" "-o   "; }
export c t a b; export -f f
gnome-terminal --hide-menubar --geometry=$s -- watch -t -n$p "`readlink -f \"$0\"`" --guts

#

许可证:GNU GPLv2,TranSeed Research


0

您可以使用

nvidia-smi pmon -i 0

监视GPU 0中的每个进程。包括计算/图形模式,sm使用率,内存使用率,编码器使用率,解码器使用率。


0

我没有在可用的答案中看到它(可能在评论中除外),所以我想补充一点,您可以通过使用来获得更好的刷新nvidia-smi效果watch。每次更新都会刷新屏幕,而不是不断滚动。

watch -n 1 nvidia-smi

一秒钟的间隔更新。用1您想要的替换,包括小数秒:

watch -n 5 nvidia-smi
watch -n 0.1 nvidia-smi
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.