1. 什么是 nvidia-smi
nvidia-smi 全称是 NVIDIA System Management Interface,是 NVIDIA 提供的管理和监控 GPU 的接口。
nvidia-smi 调用的是 NVML。NVML 全称是 NVIDIA Management Library,提供了一组 C API,用于 NVIDIA GPU 监控和管理的库。
1.1 可查询的状态
- ECC 错误计数
- GPU 利用率
- 活动计算进程
- 时钟和 PState
- 温度和风扇速度
- 电源管理
- 硬件识别
1.2 可修改的状态
- ECC 模式
- ECC 复位
- 计算模式
- 持久模式
2. nvidia-smi 字段含义
| |
| 字段 | 说明 |
|---|---|
| NVIDIA-SMI | nvidia-smi 的版本号 |
| Driver Version | 驱动版本号 |
| CUDA Version | CUDA 版本号 |
| GPU | GPU 卡序号 |
| GPU Name | GPU 的名称和内存容量 |
| Persistence-M | 持久模式是否启用。On 表示启用, Off 表示关闭。启用时 GPU 将保持最大性能状态 |
| Bus-Id | GPU 所在的 PCIe 总线地址 |
| Disp.A | 显示器是否连接到 GPU 的输出端口。On 表示连接,Off 表示没有连接 |
| Volatile Uncorr. ECC | 未 corrected 错误的易失性 ECC 内存错误计数。用于检测内存错误 |
| Fan | 风扇速度, N/A 表示没有风扇或风扇速度读数 |
| Temp | GPU 温度 |
| Perf | 性能状态。P0 是最大性能状态, P8 是最小性能状态 |
| Pwr | Usage/Cap: 当前功耗和功耗上限 |
| Memory-Usage | 已用 GPU 显存/总 GPU 显存 |
| GPU-Util | GPU 利用率 |
| Compute M. | 计算模式。Default 是默认模式 |
| MIG M. | MIG(Multi-Instance GPU) 模式, 将一个物理 GPU 分成多个独立、隔离的实例。Disabled 表示未启用 |
| 字段 | 说明 |
|---|---|
| GPU | GPU 设备的 ID |
| GI | Global ID, 针对多 GPU 系统, 一个进程所有的 cuda context 的统一 ID |
| CI | Compute Instance ID, 属于同一个 GPU 进程内, 区分不同 cuda context 的 ID |
| PID | 进程 ID |
| Type | 进程类型, C 表示 CUDA 进程, G 表示 Graphics 进程 |
| Process name | 进程名称 |
| GPU Memory Usage | 该进程当前在 GPU 上占用的内存大小 |
3. 常用参数
nvidia-smi -l定时刷新状态
每隔 5 秒刷新一次
| |
nvidia-smi -L查看显卡型号
| |
nvidia-smi -q查看 GPU 的状态详情
可通过 -i 参数指定 GPU 序号,如果不指定,默认查询全部。
| |
nvidia-smi -q -x查询信息输出为 XML 格式
| |
nvidia-smi --query-gpu=gpu_name --format=csv查询指定字段信息
--query-gpu 参数可以指定要查询的信息,--format 参数可以指定输出格式。
| |
nvidia-smi -q -d SUPPORTED_CLOCKS查看 GPU 的时钟频率
通过 -i 参数指定 GPU 序号,如果不指定,则默认查询全部 GPU 的时钟频率。
| |
4. 常用子命令
nvidia-smi nvlink -s查看 NVLink 网络状态
| |
nvidia-smi topo -m查看连接拓扑
| |
NV12 表示有 12 根 NVLink,以每个 25 GB/s 的速率计算,这里 GPU 与 GPU 之间的互联速度达 300 GB/s。
5. 常用配置命令
- 开启持久模式(已经被 nvidia-persistenced 守护进程替代)
可以通过 -i 参数指定 GPU 序号。
| |
持久模式 persistence mode,即在没有应用使用 GPU 时,驱动也处于加载状态。
持久模式比较耗电,但如果有短生命周期的任务,使用持久模式能够缩短 GPU 程序的启动延时。
- 开启 ECC 模式,重启生效
可以通过 -i 参数指定 GPU 序号。
| |
如果关闭,使用 -e 0,需要重启才能生效。
需要注意的是开启 ECC 之后,虽然能够避免内存错误,但是会损失 15-25% 的性能,同时显存也会减少一部分。
- 设置计算模式
一共有三种计算模式:0/Default 多个进程共享,会有竞争和等待;2/Prohibited 禁用显卡;3/Exclusive 进程独占
nvidia-smi -c 0
6. 常见异常处理
6.1 容器中执行 nvidia-smi 报错
- 错误信息
| |
- 解决方式
设置环境变量
| |
- 原因
容器中的 cuda 版本比较旧,cuda.so 匹配不上驱动,通过上面的 LD_LIBRARY_PATH 环境变量绕过旧版本的驱动。
6.2 禁用某张显卡
- 查看卡的 PCI 位置
| |
第一列是卡的编号,第二列是卡的 PCI 位置。
- 禁用指定的 GPU 卡
| |
-m 1 表示驱逐状态,-m 0 表示关闭驱逐状态。执行完成之后,卡在 nvidia-smi 不可见,但在 lspci 中可见。
- 查看卡的驱逐状态
| |
