通过前面的文章,我们对GPU和cuda有了初步的了解,并且说到可以用nvidia-smi命令来验证cuda和查看GPU信息,本文我们对该命令做个简单介绍。

1、nvidia-smi

nvidia-smi全称NVIDIA System Management Interface,是NVIDIA提供的用于监控和管理NVIDIA GPU显卡的命令行工具。直接输nvidia-smi命令可以得到如下信息:

在这里插入图片描述

为了大家更好的理解,我把输出内容分隔开来解释:

在这里插入图片描述

  • NVIDIA-SMI: nvidia-smi版本号,当前是545.29.04
  • Driver Version: 驱动版本号,当前是546.17
  • CUDA Version: 当前GPU驱动支持的最高cuda版本,当前是12.3

在这里插入图片描述

  • GPU: GPU ID,计数从0开始,0表示第一张GPU。如果有2张GPU,则第二张GPU的ID是1
  • Name: GPU名称,当前是NVIDIA GeForce RTX 4060 Ti
  • Persistence-M: 显卡的持久模式状态,当设置为启用状态(On)时,驱动程序在系统启动时就加载,并且在最后一个进程关闭时保持运行。如果设置为关闭(Off),则在最后一个GPU进程结束时,驱动程序将会卸载。这个特性在一般的使用场景中不会有显著影响。
  • Fan: 风扇转速百分比,0%表示当前风扇没有转动
  • Temp: 温度,当前为40°
  • Perf: GPU的性能状态,从P0(最大性能)-P12(最小性能)
  • Pwr:Usage/Cap: 显卡功率,显示当前功率和最大功率。当前功率为38W,最大功率为165W

在这里插入图片描述

  • Bus-Id: 显卡是插在PCIe总线槽上的,每个插在总线上的设备都有唯一id标识,这里就是指GPU在PCIe总线上的id
  • Disp.A: Display Active GPU状态,一般如果接了显示器,这里会显示On
  • Memory-Usage: 显存使用情况,显示当前显存大小和显存总大小。当前显存使用3521MiB,显存总大小为16380MiB

在这里插入图片描述

  • Volatile Uncorr. ECC: 报告 GPU 错误检查和纠正(ECC)状态。N/A 表示这个 GPU 不支持 ECC 或者没有启用 ECC
  • GPU-Util: 显示GPU的使用率,即GPU正在执行计算任务的比例,0%表示GPU目前在空闲状态,和CPU使用率类似
  • Compute M.: 表示计算模式,NVIDIA GPU有Default、Exclusive Process、Exclusive Thread、Prohibited 四种计算模式,一般就用默认的Default就可以了。在Default 模式下,多个进程可以同时共享不同的GPU
  • MIG M.: MIG模式,MIG一般用在GPU虚拟化场景,N/A表示该GPU不支持MIG

在这里插入图片描述

processes指的是当前正在使用GPU的进程,相关信息有:

  • GPU: 进程使用的GPU ID号
  • GI ID: GPU instance ID,GPU实例id
  • CI ID: Compute instance ID,计算实例id
  • PID: 进程id
  • Type: 进程类型,C表示计算进程,G表示图形进程,C+G表示都有
  • Process name: 进程名称
  • GPU Memory Usage: 进程显存使用量

如果全部总结起来,就有下图:

在这里插入图片描述

2、其它参数

除了直接使用nvidia-smi命令查看显卡GPU信息,还可以添加参数来查找更详细的信息,例如:

// 查看GPU基本信息
$ nvidia-smi -L
GPU 0: NVIDIA GeForce RTX 4060 Ti (UUID: GPU-0d015b67-1159-32a4-1eb7-09411c85fdd0)


// 查询所有GPU详细信息
$ nvidia-smi -q
// 输出内容过多,略过


// 查询指定id的GPU详细信息,如下,通过-i参数指定id为0的GPU
$ nvidia-smi -q -i 0
// 输出内容过多,略过


// 查询指定id的GPU的显存信息
$ nvidia-smi -q -i 0 -d MEMORY

==============NVSMI LOG==============

Timestamp                                 : Tue Mar  5 22:46:39 2024
Driver Version                            : 546.17
CUDA Version                              : 12.3

Attached GPUs                             : 1
GPU 00000000:01:00.0
    FB Memory Usage
        Total                             : 16380 MiB
        Reserved                          : 257 MiB
        Used                              : 3618 MiB
        Free                              : 12504 MiB
    BAR1 Memory Usage
        Total                             : 16384 MiB
        Used                              : 1 MiB
        Free                              : 16383 MiB
    Conf Compute Protected Memory Usage
        Total                             : N/A
        Used                              : N/A
        Free                              : N/A


// 查看GPU系统的拓扑连接信息
$ nvidia-smi topo -m
        GPU0    CPU Affinity    NUMA Affinity   GPU NUMA ID
GPU0     X                              N/A

Legend:

  X    = Self
  SYS  = Connection traversing PCIe as well as the SMP interconnect between NUMA nodes (e.g., QPI/UPI)
  NODE = Connection traversing PCIe as well as the interconnect between PCIe Host Bridges within a NUMA node
  PHB  = Connection traversing PCIe as well as a PCIe Host Bridge (typically the CPU)
  PXB  = Connection traversing multiple PCIe bridges (without traversing the PCIe Host Bridge)
  PIX  = Connection traversing at most a single PCIe bridge
  NV#  = Connection traversing a bonded set of # NVLinks

更详细的参数可以使用nvidia-smi --help查看,或者查看NVIDIA官方文档:https://developer.download.nvidia.com/compute/DCGM/docs/nvidia-smi-367.38.pdf

3、NVML

通过上面的内容我们可以知道,nvidia-smi可以用于查看显卡GPU相关信息,这些信息在显卡监控GPU性能监控等场景是非常有用的。其实nvidia-smi底层是调用NVIDIA封装好的NVML(NVIDIA Management Library)动态库获取到这些数据的,代码层面也可以通过调用NVML库函数来获取相关数据上报到业务监控数据库中。也有一些其它语言基于NVML封装的SDK,例如go语言的SDK:https://github.com/NVIDIA/go-nvml

NVML也可以参考官方文档获取更详细信息:https://docs.nvidia.com/deploy/nvml-api/index.html

微信公众号卡巴斯同步发布,欢迎大家关注。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐