使用nvidia-smi管理你的GPU卡

nvidia-smi命令是NVIDIA系统管理接口,之前提到使用nvidia-docker实际上底层也是调用的该接口。该接口可以查看到当前主机上的相关GPU设备,任务以及当前状态等信息,熟练使用该接口能够更好的管理好GPU系统资源。

开启持久模式

在Linux上,你需要将GPUs设置为持久模式persistence mode来保证你的NVIDIA驱动即使没有应用正在运行也是出于加载状态的。这个在你有一些短生命周期的job类型应用运行时是非常有用的。持久模式比较耗电,但是它会防止每次启动GPU应用程序时发生的相当长的延迟。当然如果你使用设定了时钟频率或功率限制的GPUs的话(当驱动不加载的话,这些设置会丢失),持久模式将是非常有必要的。通过如下命令设置持久模式:

1
nvidia-smi -pm 1

在Windows上,改接口不支持设置持久模式,但是可以设置为TCC模式。

查看GPU状态

1.GPU设备概要信息 由以下输出可以看到驱动版本为:375.39 ,以及GPU基本信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
sh-4.2# nvidia-smi
Wed Oct 18 11:58:03 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.39                 Driver Version: 375.39                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla M40 24GB      On   | 0000:04:00.0     Off |                    0 |
| N/A   23C    P8    17W / 250W |      0MiB / 22939MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Tesla M40           On   | 0000:05:00.0     Off |                    0 |
| N/A   26C    P8    17W / 250W |      0MiB / 11443MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   2  Tesla M40 24GB      On   | 0000:06:00.0     Off |                    0 |
| N/A   22C    P8    17W / 250W |      0MiB / 22939MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   3  Tesla M40           On   | 0000:07:00.0     Off |                    0 |
| N/A   23C    P8    16W / 250W |      0MiB / 11443MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

# Temp 标识GPU设备的温度
# Memory-Usage 表示内存使用率
# GPU-Util 表示GPU使用率

2.查看当前系统可用的GPU设备列表

1
2
3
4
5
$ nvidia-smi -L
GPU 0: Tesla M40 24GB (UUID: GPU-eb4e4871-504d-feb7-ba59-xxxxxxxxxx)
GPU 1: Tesla M40 (UUID: GPU-6c2cb0c9-acba-1dab-6525-xxxxxxxxxx)
GPU 2: Tesla M40 24GB (UUID: GPU-85551fe5-68ea-15b3-76c1-6fe1sas2w    1)
GPU 3: Tesla M40 (UUID: GPU-8fe0a30b-7faa-0537-e3a5-53ba5c8a61wesd)

3.查看GPU以及单元信息

1
$ nvidia-smi -q

4.查看每一个GPU指定详细信息

1
2
3
4
5
6
# nvidia-smi --query-gpu=index,name,uuid,serial --format=csv
index, name, uuid, serial
0, Tesla M40 24GB, GPU-eb4e4871-504d-feb7-ba59-xxxxxxxx, xxxxxxxxxx
1, Tesla M40, GPU-6c2cb0c9-acba-1dab-6525-xxxxxxxx, xxxxxxxxxx
2, Tesla M40 24GB, GPU-85551fe5-68ea-15b3-76c1-xxxxxxxx, xxxxxxxxxx
3, Tesla M40, GPU-8fe0a30b-7faa-0537-e3a5-xxxxxxxx, xxxxxxxxxx

5.指定GPU查看相关信息

1
2
3
# nvidia-smi --query-gpu=index,name,uuid,serial --format=csv --id=0
index, name, uuid, serial
0, Tesla M40 24GB, GPU-eb4e4871-504d-feb7-ba59-d15a66d6faa7, 0322816142509

6.查看GPU全部信息

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# nvidia-smi -a -i 3 
==============NVSMI LOG==============

Attached GPUs                       : 8
GPU 00000000:11:00.0
    Product Name                    : Tesla P40
    Product Brand                   : Tesla
    Display Mode                    : Enabled
    Display Active                  : Disabled
    Persistence Mode                : Enabled
    Accounting Mode                 : Disabled
    Accounting Mode Buffer Size     : 1920
    Driver Model
        Current                     : N/A
        Pending                     : N/A
    Serial Number                   : 0323617075184
    GPU UUID                        : GPU-b5d2fd9e-648b-8cd6-d0c2-dd1665cfb043
    Minor Number                    : 3
    VBIOS Version                   : 86.02.23.00.01
    MultiGPU Board                  : No
    Board ID                        : 0x1100
    GPU Part Number                 : 900-2G610-0300-030
    Inforom Version
        Image Version               : G610.0200.00.03
        OEM Object                  : 1.1
        ECC Object                  : 4.1
        Power Management Object     : N/A
    GPU Operation Mode
        Current                     : N/A
        Pending                     : N/A
    GPU Virtualization Mode
        Virtualization mode         : None
    PCI
        Bus                         : 0x11
        Device                      : 0x00
        Domain                      : 0x0000
        Device Id                   : 0x1B3810DE
        Bus Id                      : 00000000:11:00.0
        Sub System Id               : 0x11D910DE
        GPU Link Info
            PCIe Generation
                Max                 : 3
                Current             : 1
            Link Width
                Max                 : 16x
                Current             : 16x
        Bridge Chip
            Type                    : N/A
            Firmware                : N/A
        Replays since reset         : 0
        Tx Throughput               : 0 KB/s
        Rx Throughput               : 0 KB/s
    Fan Speed                       : N/A
    Performance State               : P8
    Clocks Throttle Reasons
        Idle                        : Not Active
        Applications Clocks Setting : Not Active
        SW Power Cap                : Active
        HW Slowdown                 : Not Active
        Sync Boost                  : Not Active
        SW Thermal Slowdown         : Not Active
    FB Memory Usage
        Total                       : 22912 MiB
        Used                        : 10 MiB
        Free                        : 22902 MiB
    BAR1 Memory Usage
        Total                       : 32768 MiB
        Used                        : 2 MiB
        Free                        : 32766 MiB
    Compute Mode                    : Default
    Utilization
        Gpu                         : 0 %
        Memory                      : 0 %
        Encoder                     : 0 %
        Decoder                     : 0 %
    Encoder Stats
        Active Sessions             : 0
        Average FPS                 : 0
        Average Latency             : 0
    Ecc Mode
        Current                     : Enabled
        Pending                     : Enabled
    ECC Errors
        Volatile
            Single Bit
                Device Memory       : 0
                Register File       : N/A
                L1 Cache            : N/A
                L2 Cache            : N/A
                Texture Memory      : N/A
                Texture Shared      : N/A
                CBU                 : N/A
                Total               : 0
            Double Bit
                Device Memory       : 0
                Register File       : N/A
                L1 Cache            : N/A
                L2 Cache            : N/A
                Texture Memory      : N/A
                Texture Shared      : N/A
                CBU                 : N/A
                Total               : 0
        Aggregate
            Single Bit
                Device Memory       : 2111
                Register File       : N/A
                L1 Cache            : N/A
                L2 Cache            : N/A
                Texture Memory      : N/A
                Texture Shared      : N/A
                CBU                 : N/A
                Total               : 2111
            Double Bit
                Device Memory       : 255
                Register File       : N/A
                L1 Cache            : N/A
                L2 Cache            : N/A
                Texture Memory      : N/A
                Texture Shared      : N/A
                CBU                 : N/A
                Total               : 255
    Retired Pages
        Single Bit ECC              : 0
        Double Bit ECC              : 4       #由于一个double bit ECC error,GPU device 内存页被重试的次数
        Pending                     : Yes
    Temperature
        GPU Current Temp            : 47 C
        GPU Shutdown Temp           : 95 C
        GPU Slowdown Temp           : 92 C
        GPU Max Operating Temp      : N/A
        Memory Current Temp         : N/A
        Memory Max Operating Temp   : N/A
    Power Readings
        Power Management            : Supported
        Power Draw                  : 12.41 W
        Power Limit                 : 250.00 W
        Default Power Limit         : 250.00 W
        Enforced Power Limit        : 250.00 W
        Min Power Limit             : 125.00 W
        Max Power Limit             : 250.00 W
    Clocks
        Graphics                    : 544 MHz
        SM                          : 544 MHz
        Memory                      : 405 MHz
        Video                       : 544 MHz
    Applications Clocks
        Graphics                    : 1303 MHz
        Memory                      : 3615 MHz
    Default Applications Clocks
        Graphics                    : 1303 MHz
        Memory                      : 3615 MHz
    Max Clocks
        Graphics                    : 1531 MHz
        SM                          : 1531 MHz
        Memory                      : 3615 MHz
        Video                       : 1379 MHz
    Max Customer Boost Clocks
        Graphics                    : 1531 MHz
    Clock Policy
        Auto Boost                  : N/A
        Auto Boost Default          : N/A
    Processes                       : None

监控和管理GPU Boost

管理员和用户可以使用这种方式来观察GPUs的状态。 以下显示了每个GPU的可用时钟频率(Tesla M40)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$ nvidia-smi -q -d SUPPORTED_CLOCKS
GPU 0000:07:00.0
    Supported Clocks
        Memory                      : 3004 MHz
            Graphics                : 1114 MHz
            Graphics                : 1088 MHz
            Graphics                : 1063 MHz
            Graphics                : 1038 MHz
            Graphics                : 1013 MHz
            Graphics                : 987 MHz
            Graphics                : 962 MHz
            Graphics                : 949 MHz
            Graphics                : 924 MHz
            Graphics                : 899 MHz
            Graphics                : 873 MHz
            Graphics                : 848 MHz
            Graphics                : 823 MHz
            Graphics                : 797 MHz
            Graphics                : 772 MHz
            Graphics                : 747 MHz
            Graphics                : 721 MHz
            Graphics                : 696 MHz
            Graphics                : 671 MHz
            Graphics                : 645 MHz
            Graphics                : 620 MHz
            Graphics                : 595 MHz
            Graphics                : 557 MHz
            Graphics                : 532 MHz
        Memory                      : 405 MHz
            Graphics                : 324 MHz
            

以上显示中只有两个内存时钟(memory clock)被支持:3004 MHz和405 MHz.运行在前者的内存,有24个支持GPU时钟频率。后者只有一个GPU频率,且是空闲状态的。在Tesla K80上,GPU Boost会自动管理这些频率,来让他们运行的尽可能快。而在其他一些模块中,比如Tesla K40,必须由管理员来指定GPU时钟频率。

查看当前GPU的时钟频率,默认的时钟加速和最小的时钟频率

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$ nvidia-smi -q -d CLOCK

GPU 0000:07:00.0
    Clocks
        Graphics                    : 949 MHz
        SM                          : 949 MHz
        Memory                      : 3004 MHz
        Video                       : 873 MHz
    Applications Clocks
        Graphics                    : 947 MHz
        Memory                      : 3004 MHz
    Default Applications Clocks
        Graphics                    : 947 MHz
        Memory                      : 3004 MHz
    Max Clocks
        Graphics                    : 1114 MHz
        SM                          : 1114 MHz
        Memory                      : 3004 MHz
        Video                       : 1024 MHz
    SM Clock Samples
        Duration                    : 10989718.85 sec
        Number of Samples           : 46
        Max                         : 1063 MHz
        Min                         : 324 MHz
        Avg                         : 948 MHz
    Memory Clock Samples
        Duration                    : 10989718.85 sec
        Number of Samples           : 46
        Max                         : 3004 MHz
        Min                         : 405 MHz
        Avg                         : 3003 MHz
    Clock Policy
        Auto Boost                  : On
        Auto Boost Default          : On

理想状态中,你想让所有的时钟都一直运行在比较高的速度,但是对于所有的应用来说是不可能的。可以使用PERFORMANCE参数来查看每个GPU卡当前的状态以及时钟慢下来的原因。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ nvidia-smi -q -d PERFORMANCE/performance
GPU 0000:07:00.0
    Performance State               : P0
    Clocks Throttle Reasons
        Idle                        : Not Active
        Applications Clocks Setting : Active
        SW Power Cap                : Not Active
        HW Slowdown                 : Not Active
        Sync Boost                  : Not Active
        Unknown                     : Not Active

如果任何一个GPU时钟都以比较慢速度运行的话,那么上面的Clocks Throttle Reasons中的一个或多个将会被标记为active状态。最需要关注的是HW SlowdownUnknown 是否是active状态,如果那样的话很可能是电源或者冷却系统的问题。其余的需要关注设备卡是否是空闲的或者是由管理员手动设置为slower模式。

使用nvidia-smi还可以去监控其他相关指标,-d参数支持MEMORY UTILIZATION ECC TEMPERATURE POWER CLOCK COMPUTE PIDS PERFORMANCE SUPPORTED_CLOCKS PAGE_RETIREMENT ACCOUNTING

查看每块GPU卡的内存使用:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
$ nvidia-smi -q -d memory

GPU 0000:06:00.0
    FB Memory Usage
        Total                       : 22939 MiB
        Used                        : 21800 MiB
        Free                        : 1139 MiB
    BAR1 Memory Usage
        Total                       : 32768 MiB
        Used                        : 2 MiB
        Free                        : 32766 MiB

GPU 0000:07:00.0
    FB Memory Usage
        Total                       : 11443 MiB
        Used                        : 10876 MiB
        Free                        : 567 MiB
    BAR1 Memory Usage
        Total                       : 16384 MiB
        Used                        : 2 MiB
        Free                        : 16382 MiB

指定GPU卡查看相关指标:

1
$ nvidia-smi -i 0 -q -d MEMORY,UTILIZATION,POWER,CLOCK,COMPUTE

查看系统的拓扑结构

要适当的利用更先进的NVIDIA GPU优势(例如GPU Direct),因此系统的拓扑结构的正确配置是非常重要的。拓扑结构涉及到PCI-Express(GPUs, InfiniBand HCAs, storage controllers, etc)设备如何连接到其他设备,以及如何连接到系统CPU的。如果配置不正确,可能某些特定的功能性能会比较低甚至不能正常工作。为了解决如上问题,nvidia-smi最近的版本包含了一个可用查看系统拓扑的命令。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 显示GPU拓扑(-m参数可以看到GPU交流矩阵以及CPU亲和性绑定)
$  nvidia-smi topo -m
	GPU0	GPU1	GPU2	GPU3	CPU Affinity
GPU0	 X 	PIX	PIX	PIX	0-0,2-2,4-4,6-6,8-8,10-10,12-12,14-14,16-16,18-18,20-20,22-22
GPU1	PIX	 X 	PIX	PIX	0-0,2-2,4-4,6-6,8-8,10-10,12-12,14-14,16-16,18-18,20-20,22-22
GPU2	PIX	PIX	 X 	PIX	0-0,2-2,4-4,6-6,8-8,10-10,12-12,14-14,16-16,18-18,20-20,22-22
GPU3	PIX	PIX	PIX	 X 	0-0,2-2,4-4,6-6,8-8,10-10,12-12,14-14,16-16,18-18,20-20,22-22

Legend:

  X   = Self
  SOC  = Connection traversing PCIe as well as the SMP link between CPU sockets(e.g. QPI)
  PHB  = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
  PXB  = Connection traversing multiple PCIe switches (without traversing the PCIe Host Bridge)
  PIX  = Connection traversing a single PCIe switch
  NV#  = Connection traversing a bonded set of # NVLinks

以上配置显示我们有四块GOU卡,并且都链接在服务器的第一颗CPU上(物理机2颗6核cpu并开启超线程)。该工具建议推荐我们将job运行在偶数标记的cpu上。并且以上四块GPU卡都是互相通过PCIe switch直连的。

一个可用的GPU矩阵表示如下:

  • X = 表示GPU本身
  • SOC = 表示贯穿PCIe总线和CPU sockets之间的SMP链接。
  • PHB = 贯穿PCIe总线和PCIe Host Bridge
  • PXB = 贯穿多个PCIe switch(不通过PCIe Host Bridge)
  • PIX = 链接单个PCIe switch
  • NV# = 贯穿一组NVLinks设备

划重点啦:其实由上面的GPU拓扑可以看出来,我们系统上的4块设备是两两互相直连的架构!因为4块卡是通过一个PCIe switch来互相通信的。大体结构如图:

补充:查看GPU卡之间的邻居和链接关系

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# nvidia-smi topo 命令有个参数-n可以用来指定gpu卡以及互联结构来查看和它互联结构
#                   0 = a single PCIe switch on a dual GPU board
#                   1 = a single PCIe switch
#                   2 = multiple PCIe switches
#                   3 = a PCIe host bridge
#                   4 = a socket-level link

# 查看每个GPU卡所在的socket上链接的其他GPU卡设备
for uuid in `nvidia-smi --query-gpu=uuid --format=csv | grep GPU  | xargs`;do nvidia-smi topo -i $uuid -n 4;done
# 查看每个GPU卡所在的PCIe host bridge 上链接的其他GPU卡设备
for uuid in `nvidia-smi --query-gpu=uuid --format=csv | grep GPU  | xargs`;do nvidia-smi topo -i $uuid -n 3;done
# 查看每个GPU卡所在的PCIe switch 上链接的其他GPU卡设备
for uuid in `nvidia-smi --query-gpu=uuid --format=csv | grep GPU  | xargs`;do nvidia-smi topo -i $uuid -n 1;done

nvidia-smi命令使用帮助

nvidia-smi输出详细参数