nvidia-smi 基本命令及说明
内容提要
NVIDIA System Management Interface (nvidia-smi)是由NVIDIA提供的用于管理和监控GPU的工具。它可以查询和修改各种GPU参数,如ECC错误计数、GPU利用率、时钟速度、温度、功耗管理等。文章提供了nvidia-smi的常用命令示例,如刷新状态、检查GPU型号、查询GPU状态详细信息和查看GPU时钟频率。还提到了常见的配置命令,如启用持久模式、启用ECC模式和设置计算模式。文章最后还提供了处理在容器中运行nvidia-smi时出现的错误的故障排除部分。
延伸解读
主面板字段的监控价值
nvidia-smi 主面板集中展示了 GPU 的关键运行指标,包括驱动版本、CUDA 版本、GPU 名称与显存容量、持久模式状态、PCIe 总线地址、ECC 错误计数、风扇速度、温度、性能状态、功耗、显存使用率、GPU 利用率和计算模式等。这些字段能帮助运维人员快速判断 GPU 是否处于健康状态,例如通过 Volatile Uncorr. ECC 检测内存错误,通过 Perf 了解性能状态,通过 Pwr 和 Temp 评估功耗与散热情况。
持久模式与 ECC 的配置权衡
文章提到持久模式可在无应用使用 GPU 时保持驱动加载,适合短生命周期任务以缩短启动延时,但代价是更耗电。开启 ECC 模式能避免内存错误,但会损失 15-25% 的性能,同时显存也会减少一部分,且需要重启才能生效。计算模式则分为 Default(多进程共享,有竞争和等待)、Prohibited(禁用显卡)和 Exclusive(进程独占)。这些配置需根据实际业务场景权衡。
拓扑与 NVLink 状态解读
通过 nvidia-smi topo -m 可以查看 GPU 之间的连接拓扑,输出中的 NV12 表示有 12 根 NVLink,每根速率 25 GB/s,因此 GPU 间互联速度可达 300 GB/s。nvidia-smi nvlink -s 则直接显示每条 NVLink 的速率。这些信息对于多卡训练和分布式计算场景尤为重要,能帮助判断 GPU 间通信是否处于高速互联状态,以及是否存在跨 NUMA 节点的瓶颈。
容器内报错的排查方向
在容器中执行 nvidia-smi 可能遇到 CUDA initialization 错误,提示 API call is not supported in the installed CUDA driver。文章给出的解决方式是设置环境变量 LD_LIBRARY_PATH,将其指向 /usr/local/cuda/lib64、/usr/lib/x86_64-linux-gnu 和 /usr/local/nvidia/lib。这表明容器内缺少正确的库路径可能导致 nvidia-smi 无法正常调用驱动,排查时应优先检
Q&A
nvidia-smi 是什么?它有什么作用?
nvidia-smi 全称是 NVIDIA System Management Interface,是 NVIDIA 提供的管理和监控 GPU 的接口。它调用 NVML(NVIDIA Management Library),可以查询和修改 GPU 的各种参数,如 ECC 错误计数、GPU 利用率、时钟速度、温度和功耗管理等。
nvidia-smi 主面板中各个字段代表什么含义?
主面板字段包括:NVIDIA-SMI 版本号、Driver Version 驱动版本、CUDA Version CUDA 版本、GPU 卡序号、GPU Name 名称和内存容量、Persistence-M 持久模式是否启用、Bus-Id PCIe 总线地址、Disp.A 显示器是否连接、Volatile Uncorr. ECC 易失性 ECC 错误计数、Fan 风扇速度、Temp 温度、Perf 性能状态(P0 最大,P8 最小)、Pwr 功耗和上限、Memory-Usage 显存使用、GPU-Util 利用率、Compute M. 计算模式、MIG M. MIG 模式。
如何使用 nvidia-smi 定时刷新 GPU 状态?
使用 nvidia-smi -l 命令可以定时刷新状态,例如 nvidia-smi -l 5 表示每隔 5 秒刷新一次。
nvidia-smi 如何查询指定字段并以 CSV 格式输出?
可以使用 --query-gpu 参数指定要查询的字段,并用 --format 参数指定输出格式。例如:nvidia-smi --query-gpu=temperature.gpu,utilization.gpu,utilization.memory,memory.total --format=csv,noheader。
如何开启 GPU 的持久模式?有什么优缺点?
使用 nvidia-smi -pm 1 可以开启持久模式(可通过 -i 指定 GPU 序号)。持久模式使驱动在没有应用使用 GPU 时也保持加载状态。优点是对于短生命周期任务能缩短 GPU 程序的启动延时;缺点是持久模式比较耗电。
开启 ECC 模式有什么影响?如何开启?
使用 nvidia-smi -e 1 开启 ECC 模式(需重启生效,可通过 -i 指定 GPU)。开启 ECC 能避免内存错误,但会损失 15-25% 的性能,同时显存也会减少一部分。关闭使用 -e 0,同样需要重启生效。
在容器中执行 nvidia-smi 报错 'CUDA initialization: Unexpected error from cudaGetDeviceCount()' 如何解决?
该错误通常是由于容器内 CUDA 驱动库路径不正确导致。解决方式是设置环境变量:LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/lib/x86_64-linux-gnu:/usr/local/nvidia/lib。