一、什么是 nvidia-smi?

nvidia-smi 的全称是 NVIDIA System Management Interface

它是一个基于命令行界面的跨平台工具,是 NVIDIA 显卡驱动 的一部分。只要您正确安装了 NVIDIA 显卡驱动,就可以在命令行(终端)中使用它。

核心功能nvidia-smi 的主要目的是监控和管理 NVIDIA GPU 设备。它提供了关于 GPU 状态、性能、温度、内存使用情况、进程占用等信息的详细视图。对于开发者、系统管理员和任何使用 NVIDIA GPU 进行深度学习、科学计算、图形渲染等工作的人来说,它都是一个不可或缺的工具。

在这里插入图片描述

二、为什么需要使用 nvidia-smi?

  1. 监控 GPU 状态:快速查看所有 GPU 是否被识别、运行是否正常。
  2. 性能分析与调试:当程序运行缓慢时,检查 GPU 利用率、内存占用率,判断是计算瓶颈还是内存瓶颈。
  3. 资源管理:查看哪些进程正在使用 GPU,占用了多少显存,便于管理和终止异常进程。
  4. 故障排查:检查 GPU 温度、功耗和ECC错误等,帮助诊断硬件和驱动问题。
  5. 设置 GPU 状态:可以修改 GPU 的运行模式(如持久化模式)、时钟频率等。

三、基本使用与输出解读

在终端中直接输入命令:

nvidia-smi

你会看到一个典型的输出界面(可能会因驱动版本不同略有差异):

Mon Jun 10 14:30:00 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.182.03   Driver Version: 470.182.03   CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  On   | 00000000:01:00.0 Off |                  N/A |
| 30%   45C    P0    25W / 180W |   1234MiB /  8192MiB |      15%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   1  NVIDIA GeForce ...  On   | 00000000:02:00.0 Off |                  N/A |
| 20%   35C    P8     5W / 180W |     10MiB /  8192MiB |       0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

关键信息解读(以第一个 GPU 为例):

  • NVIDIA-SMI 470.182.03:nvidia-smi 的版本号。
  • Driver Version: 470.182.03:NVIDIA 驱动版本。
  • CUDA Version: 11.4:驱动支持的最高 CUDA 版本。
  • GPU 0:第一块 GPU 的索引号。
  • Name:GPU 的型号名称。
  • Persistence-M:持久化模式。On 表示开启,可以减少驱动程序初始化时间,但会消耗少量待机功耗。
  • Fan:风扇转速百分比。
  • Temp:GPU 核心温度(摄氏度)。
  • Perf:性能状态。从 P0(最高性能)到 P12(最低性能)。
  • Pwr: Usage/Cap:当前功耗 / 最大功耗。
  • Memory-Usage:显存使用情况。1234MiB / 8192MiB 表示已使用 1234MB,总显存为 8192MB(8GB)。
  • GPU-Util:GPU 计算单元的利用率百分比。这个指标反映了 GPU 核心的繁忙程度。
  • Compute M.:计算模式。Default 表示多个应用程序可以同时使用该 GPU。

四、常用参数和高级用法

nvidia-smi 提供了丰富的参数来定制输出和进行操作。

1. 循环刷新监控(类似 top 命令)
# 每 2 秒刷新一次(默认 1 秒)
nvidia-smi -l 2

# 每 5 秒刷新一次,并记录到文件
nvidia-smi -l 5 -f gpu_log.txt
# 按 Ctrl+C 停止
2. 查询特定 GPU 信息
# 只显示 GPU 0 的信息
nvidia-smi -i 0
3. 以更易解析的格式输出

这对于写脚本自动监控 GPU 非常有用。

# XML 格式
nvidia-smi -q -x

# 查询所有信息,文本格式
nvidia-smi -q

# 查询特定 GPU 的特定信息(例如内存)
nvidia-smi -i 0 -q -d MEMORY
# 其他有用的 -d 参数:UTILIZATION, POWER, TEMPERATURE, ECC, CLOCK, COMPUTE, PIDS
4. 监控运行在 GPU 上的进程
# 显示计算进程(使用GPU核心的进程)
nvidia-smi -i 0 -q -d COMPUTE

# 或者使用 gpustat (一个更友好的第三方工具,需要 pip install gpustat)
gpustat

nvidia-smi -q 的输出中,查找 Processes 部分,它会列出 PID、进程名称、使用的显存。

5. 设置 GPU 持久化模式

这可以减少应用程序频繁启动停止时,GPU 驱动的初始化时间。

# 开启持久化模式
sudo nvidia-smi -pm 1

# 关闭持久化模式
sudo nvidia-smi -pm 0
6. 重置 GPU

当 GPU 工作异常(如程序崩溃后显存未释放)时,可以尝试重置。注意:这会终止所有使用该 GPU 的进程!

# 重置 GPU 0 (需要管理员权限)
sudo nvidia-smi -i 0 -r
7. 监控功耗和温度
# 查询电源和温度详细信息
nvidia-smi -q -d POWER,TEMPERATURE

五、实用技巧和场景

  1. 在代码中调用:在 Python 脚本中,可以使用 os.popen('nvidia-smi ...').read() 来获取 GPU 信息,并据此决定将任务分配到哪张卡上。
  2. 选择空闲的 GPU:在运行程序前,先使用 nvidia-smi 查看哪张卡的 GPU-UtilMemory-Usage 最低,然后通过环境变量 CUDA_VISIBLE_DEVICES 来指定程序使用的 GPU。
    # 例如,只使用 GPU 1 来运行你的 Python 脚本
    CUDA_VISIBLE_DEVICES=1 python your_script.py
    
  3. 自动化监控脚本:结合 watch 命令和 nvidia-smi 进行持续监控。
    # 每 3 秒高亮显示变化
    watch -n 3 -d nvidia-smi
    

总结

nvidia-smi 是 NVIDIA GPU 用户的“瑞士军刀”,功能强大且全面。从简单的状态检查到复杂的性能分析和设备管理,它都能胜任。掌握 nvidia-smi 的使用,将极大地帮助你更好地理解和利用你的 GPU 计算资源。

更多推荐