通过前面的文章,我们对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.04Driver Version:
驱动版本号,当前是546.17CUDA Version:
CUDA版本号,当前是12.3
GPU:
GPU ID,计数从0开始,0表示第一张GPU。如果有2张GPU,则第二张GPU的ID是1Name:
GPU名称,当前是NVIDIA GeForce RTX 4060 TiPersistence-M:
显卡的持久模式状态,当设置为启用状态(On)时,驱动程序在系统启动时就加载,并且在最后一个进程关闭时保持运行。如果设置为关闭(Off),则在最后一个GPU进程结束时,驱动程序将会卸载。这个特性在一般的使用场景中不会有显著影响。Fan:
风扇转速百分比,0%表示当前风扇没有转动Temp:
温度,当前为40°Perf:
GPU的性能状态,从P0(最大性能)-P12(最小性能)Pwr:Usage/Cap:
显卡功率,显示当前功率和最大功率。当前功率为38W,最大功率为165W
Bus-Id:
显卡是插在PCIe总线槽上的,每个插在总线上的设备都有唯一id标识,这里就是指GPU在PCIe总线上的idDisp.A:
Display Active GPU状态,一般如果接了显示器,这里会显示OnMemory-Usage:
显存使用情况,显示当前显存大小和显存总大小。当前显存使用3521MiB,显存总大小为16380MiB
Volatile Uncorr. ECC:
报告 GPU 错误检查和纠正(ECC)状态。N/A 表示这个 GPU 不支持 ECC 或者没有启用 ECCGPU-Util:
显示GPU的使用率,即GPU正在执行计算任务的比例,0%表示GPU目前在空闲状态,和CPU使用率类似Compute M.:
表示计算模式,NVIDIA GPU有Default、Exclusive Process、Exclusive Thread、Prohibited 四种计算模式,一般就用默认的Default就可以了。在Default 模式下,多个进程可以同时共享不同的GPUMIG M.:
MIG模式,MIG一般用在GPU虚拟化场景,N/A表示该GPU不支持MIG
processes指的是当前正在使用GPU的进程,相关信息有:
GPU:
进程使用的GPU ID号GI ID:
GPU instance ID,GPU实例idCI ID:
Compute instance ID,计算实例idPID:
进程idType:
进程类型,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
微信公众号卡巴斯同步发布,欢迎大家关注。