GPU 软件
用于监控 GPU 服务器的 nvidia-smi 命令
从快速查看到长期指标:如何观察 GPU 的利用率、显存、功耗和错误,以及如何判断哪些问题应由我们来修复。
本页内容
nvidia-smi 速查表
| 任务 | 命令 |
|---|---|
| 所有 GPU 的单次快照 | |
| 每 2 秒刷新一次 | |
| 列出 GPU 及其 UUID | |
| 持续输出使用率、功耗、时钟频率和显存 | |
| 进程及其占用的显存 | |
| 以 CSV 格式输出选定指标,每 10 秒一次 | |
| 温度、功耗或 ECC 详细信息 | (或 POWER、ECC) |
| GPU 之间的连接方式:NVLink、PCIe、NUMA | |
| 每条 NVLink 链路的状态 | |
下文逐一解释这些命令,AMD 平台的对应命令列在本页末尾。
实时查看 GPU
nvidia-smi # one snapshot
nvidia-smi -l 2 # print a new snapshot every 2 seconds
watch -n 2 nvidia-smi # same, redrawn in place
用 dmon 持续输出指标
nvidia-smi dmon -s pucm -d 5
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv
dmon 每 5 秒()为每张 GPU 输出一行。 后面的字母用于选择指标组:p 为功耗和温度,u 为利用率,c 为时钟频率,m 为显存;加上 e 可显示 ECC 和 PCIe 错误,加上 t 可显示 PCIe 吞吐量。 可将输出限定为部分 GPU。第二条命令会列出每个进程及其占用的显存。
用 --query-gpu 记录到 CSV 文件
fields=timestamp,index,utilization.gpu,memory.used,memory.total
fields=$fields,temperature.gpu,power.draw,clocks.sm
nvidia-smi --query-gpu=$fields --format=csv -l 10 >> ~/gpu-metrics.csv
这会每 10 秒为每张 GPU 追加一行;请在 tmux 中运行,或将其作为服务运行。如果文件要用脚本解析,请使用 。 会列出所有字段,例如 HBM GPU 上的 temperature.memory。
nvtop:GPU 版的 htop
sudo apt install -y nvtop
nvtop
nvtop 会为每张 GPU 绘制利用率和显存图表,图表下方是进程列表。较新的版本(例如 Ubuntu 24.04 中的版本)也支持 AMD GPU。按 Q 键退出。
用 DCGM exporter 和 Prometheus 采集长期指标
如需历史数据和告警,可以使用 NVIDIA 的 DCGM exporter:它以 Prometheus 格式暴露 GPU 指标,Grafana 可以将这些指标绘制成图表。以下是用 Docker 启动的最简示例,请将 TAG 替换为 NVIDIA NGC 目录中的当前标签:
docker run -d --name dcgm-exporter --gpus all --cap-add SYS_ADMIN \
-p 127.0.0.1:9400:9400 nvcr.io/nvidia/k8s/dcgm-exporter:TAG
curl -s http://127.0.0.1:9400/metrics \
| grep -E 'DCGM_FI_DEV_(GPU_UTIL|GPU_TEMP|POWER_USAGE|XID_ERRORS)'
每项指标都应为每张 GPU 显示一个值。请让您的 Prometheus 服务器通过私有网络或 SSH 隧道抓取这些指标,并针对 DCGM_FI_DEV_XID_ERRORS 和温度设置告警。切勿将指标端口对互联网开放。在 AMD 服务器上,AMD 面向 Instinct GPU 的 device metrics exporter 起同样的作用。
温度、功耗和 ECC 错误
nvidia-smi -q -d TEMPERATURE
nvidia-smi -q -d POWER,PERFORMANCE
nvidia-smi -q -d ECC
nvidia-smi -q -d ROW_REMAPPER
- 温度。将当前读数与同一输出中的“GPU Slowdown Temp”和“GPU Shutdown Temp”阈值进行比较。读数接近降频阈值时,时钟频率会降低。
- 功耗和时钟频率。PERFORMANCE 部分列出了时钟事件原因(clock event reasons)。高负载下出现“SW Power Cap”属于正常;如果 GPU 繁忙时出现“HW Slowdown”或“HW Thermal Slowdown”,则值得上报。
- ECC。数据中心 GPU 会即时纠正单比特显存错误。易失性(volatile)计数器在驱动重新加载时清零;累计(aggregate)计数器则覆盖 GPU 的整个生命周期。不可纠正的错误通常会中止正在运行的任务。
- 行重映射。HBM GPU 会替换有故障的显存行。“Pending: Yes”表示该 GPU 需要重置或重启才能应用此次重映射。反复出现重映射或重映射失败,说明这张 GPU 需要处理。
Xid 错误,以及何时提交工单
NVIDIA 驱动会以 Xid 消息的形式在内核日志中报告 GPU 故障:
sudo dmesg -T | grep -i xid
sudo journalctl -k --since "24 hours ago" | grep -i xid
| Xid | 含义 | 处理方法 |
|---|---|---|
| 13、31、43 | 图形引擎异常、GPU 显存页错误、GPU 停止处理 | 通常是应用程序中的 bug 或非法内存访问所致。如果在不同任务中持续出现,请提交工单。 |
| 48、94、95 | 双比特 ECC 错误;已隔离(contained)或未隔离(uncontained)的 ECC 错误 | 请提交工单。已隔离的错误(94)只会中止受影响的应用程序;出现 95 后,必须重置 GPU。 |
| 63、64 | 行重映射或显存页退役(page retirement)事件,或未能记录该事件 | 重启以应用待处理的重映射。如果反复出现或失败,请提交工单。 |
| 74 | NVLink 错误 | 请提交工单,并附上完整的日志行。 |
| 79 | GPU 已从总线上掉线 | 请提交工单。在服务器重启之前,该 GPU 一直不可用,并且可能需要维修。 |
请在工单中附上服务器 IP、Xid 日志行和一份 NVIDIA bug 报告,它会把相关日志收集到一个文件中:
sudo nvidia-bug-report.sh
该命令会将 写入当前目录。根据我们的服务等级协议,故障 GPU 会被优先更换,工程师 7×24 小时响应:请在控制台提交工单。
AMD 平台的对应命令:rocm-smi 与 amd-smi
| 任务 | NVIDIA | AMD |
|---|---|---|
| 快照 | | 或 |
| 实时查看 | | watch |
| 持续输出表格 | | |
| 使用率、显存、功耗、温度 | | |
| 进程 | | |
| 内核消息 | sudo dmesg | sudo dmesg |
关于 AMD 工具的更多内容,请参阅 ROCm 配置。
问题仍未解决?
请在控制台提交工单,写明服务器、您运行了什么以及错误输出(如有)。工程师 7×24 小时答复。