GPU系列(三):如何管理GPU

1 使用nvidia-smi管理你的GPU卡

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

2 开启持久模式

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

nvidia-smi -pm 1

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

3 查看GPU状态

3.1 GPU设备概要信息

由以下输出可以看到驱动版本为:375.39 ,以及GPU基本信息。

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使用率
3.2 查看当前系统可用的GPU设备列表
$ 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.3 查看GPU以及单元信息
$ nvidia-smi -q
3.4 查看每一个GPU指定详细信息
# 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
3.5 指定GPU查看相关信息
# 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
3.6 查看GPU全部信息
# 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

4 监控和管理GPU Boost

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

$ 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的时钟频率,默认的时钟加速和最小的时钟频率

$ 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卡当前的状态以及时钟慢下来的原因。

$ 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卡的内存使用:

$ 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卡查看相关指标:

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

5 查看系统的拓扑结构

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

# 显示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卡之间的邻居和链接关系

# 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
相关推荐
群联云防护小杜3 分钟前
服务器压力测试怎么做
运维·服务器·网络协议·tcp/ip·阿里云·压力测试
水w38 分钟前
【项目实践】SpringBoot Nacos配置管理 map数据
java·服务器·开发语言·spring boot·nacos
火龙kess41 分钟前
使用FreeNAS软件部署ISCSI的SAN架构存储(IP-SAN)练习题
linux·运维·服务器·网络·windows·tcp/ip·架构
huapiaoy1 小时前
JavaSE---String(含一些源码)
java·linux·前端
rkmhr_sef1 小时前
frp内网穿透云服务器。云服务器映射多个家庭局域网内网端口。家庭Windows主机内网运行多个web程序
服务器·前端·windows
麦子爱种地1 小时前
前端学习DAY26(华为平板页面)
服务器·前端·javascript
云计算DevOps-韩老师1 小时前
【网络云计算】2024第52周-每日【2024/12/23】小测-理论&实操-解析
linux·运维·服务器·开发语言·网络·云计算·perl
☆凡尘清心☆2 小时前
CentOS-stream-9安装ansible
linux·centos·ansible
码农君莫笑2 小时前
Blazor项目中使用EF读写 SQLite 数据库
linux·数据库·sqlite·c#·.netcore·人机交互·visual studio
mubeibeinv2 小时前
项目搭建+图片(添加+图片)
java·服务器·前端