GPU与CPU的传输带宽监测
bash
nvidia-smi dmon -i 0,1,2,3 --gpm-options d --gpm-metrics 20,21 -d 1
用于每隔 1 秒监控第 0 张 GPU 的 PCIe 收发带宽 ,输出的是 NVIDIA **GPM(GPU Performance Metrics)**中的两个指标:
20 = PCIe TX,GPU 发出的 PCIe 流量,MiB/s
21 = PCIe RX,GPU 接收的 PCIe 流量,MiB/s
结果样例
# gpu pwr gtemp mtemp sm mem pcitx pcirx
# Idx W C C % % GPM:MiB/s GPM:MiB/s
0 461 40 37 63 1 451 7470
1 406 38 35 39 2 365 6025
2 379 37 33 39 0 433 7170
3 391 36 34 100 5 402 6670
NVIDIA 官方文档中,--gpm-metrics 的指标编号来自 NVML 的 nvmlGpmMetricId_t,其中 NVML_GPM_METRIC_PCIE_TX_PER_SEC = 20 表示 GPU 发出的 PCIe traffic,单位 MiB/s;NVML_GPM_METRIC_PCIE_RX_PER_SEC = 21 表示流向 GPU 的 PCIe traffic,单位 MiB/s。
dmon 是 device monitoring 模式,用于连续输出 GPU 的动态监控数据。
-i 0 指定监控哪一张 GPU。
如果想监控多张卡,可以写成:nvidia-smi dmon -i 0,1,2,3
--gpm-options d
这个参数指定 GPM 指标的显示层级。
NVIDIA 文档中,--gpm-options 支持以下模式:d 表示显示 Device Level GPM metrics,m 表示显示 MIG Level GPM metrics,dm 表示同时显示 Device 和 MIG Level metrics。
这里的 d 是 device 的意思,不是 delay。
如果 GPU 开启了 MIG,并且你想看 MIG 实例级别指标,可能会用:
--gpm-options m
或者:
--gpm-options dm
--gpm-metrics 20,21
这个参数指定要显示哪些 GPM 指标。
这里选择了两个指标:
| 指标 ID | NVML 名称 | 含义 | 单位 |
|---|---|---|---|
| 20 | NVML_GPM_METRIC_PCIE_TX_PER_SEC |
PCIe traffic from this GPU | MiB/s |
| 21 | NVML_GPM_METRIC_PCIE_RX_PER_SEC |
PCIe traffic to this GPU | MiB/s |
也就是:
20 = GPU → PCIe → Host/其他设备
21 = Host/其他设备 → PCIe → GPU
NVIDIA 官方 NVML 文档明确列出:20 是从 GPU 发出的 PCIe 流量,21 是流向 GPU 的 PCIe 流量。
-d 1
指定采样间隔, 表示每 1 秒 输出一次。
-d 1
不用 GPM 时,dmon -s 可监控的常规信息
nvidia-smi dmon 默认会输出功耗、温度、SM/Mem 时钟,以及 SM、显存、编码器、解码器、JPEG、OFA 等利用率。NVIDIA 官方说明也提到,dmon 可通过 -s <metric_group> 选择不同监控组。
常用分组如下:
| 参数 | 监控内容 | 典型用途 |
|---|---|---|
-s p |
Power Usage、GPU/Memory Temperature | 看功耗、温度是否异常 |
-s u |
SM、Memory、Encoder、Decoder、JPEG、OFA 利用率 | 看计算、显存、编解码模块负载 |
-s c |
SM/Proc Clock、Memory Clock | 看频率是否降频 |
-s v |
Power Violation、Thermal Violation | 看是否触发功耗墙/温度墙 |
-s m |
FB Memory、BAR1、Confidential Compute protected memory | 看显存、BAR1 占用 |
-s e |
ECC 单/双 bit 错误、PCIe replay error | 看硬件链路/显存可靠性问题 |
-s t |
PCIe RX/TX Throughput | 看 PCIe 收发吞吐 |
-s n |
Noise / MMA Stall,Rubin 及以后支持 | 新架构上看 MMA stall 类信息 |
来源:NVIDIA nvidia-smi dmon 官方参数说明。
例如:
# 功耗 + 利用率 + 时钟 + 显存 + PCIe 吞吐
nvidia-smi dmon -i 0,1,2,3 -s pucmt -d 1
# 加上日期时间,输出 CSV,便于画图
nvidia-smi dmon -i 0,1,2,3 -s pucmt -d 1 -o DT --format csv
使用 --gpm-metrics 时可监控的更细指标
--gpm-metrics 对应 NVML 的 nvmlGpmMetricId_t 枚举,--gpm-options d 表示 device level ,m 表示 MIG level ,dm/md 表示同时显示 device 和 MIG level。
比较常用的 GPM metric 可以分为几类。
A. GPU 计算活跃度 / SM 利用率
| ID | 指标 | 含义 |
|---|---|---|
1 |
Graphics/Compute Util | 任意 compute/graphics app 活跃时间百分比 |
2 |
SM Util | SM busy 百分比 |
3 |
SM Occupancy | 活跃 warp 相对理论最大值的百分比 |
4 |
Integer Util | INT 运算活跃度 |
5 |
Any Tensor Util | 任意 Tensor Core 运算活跃度 |
6 |
DFMA Tensor Util | FP64 Tensor 类运算 |
7 |
HMMA Tensor Util | FP16/BF16 Tensor Core 类运算,常见于 LLM |
8 |
DMMA Tensor Util | FP64/TF64 相关 tensor 类运算,视架构而定 |
9 |
IMMA Tensor Util | INT Tensor Core 类运算 |
11 |
FP64 Util | 非 Tensor FP64 运算 |
12 |
FP32 Util | 非 Tensor FP32 运算 |
13 |
FP16 Util | 非 Tensor FP16 运算 |
这些指标可以用来判断模型推理/训练到底是在跑 CUDA core、Tensor Core,还是 SM 并没有被充分喂饱。官方 NVML 文档给出了 1~13 这些 GPM 指标的含义。
例如看 LLM 推理的 SM、占用率、Tensor Core、FP16:
nvidia-smi dmon -i 0,1,2,3 --gpm-options d --gpm-metrics 1,2,3,5,7,13 -d 1
B. 显存带宽
| ID | 指标 | 含义 |
|---|---|---|
10 |
DRAM BW Util | DRAM 带宽利用率,相对理论峰值的百分比 |
这个对 LLM decode 很有用。decode 阶段通常 memory-bound,SM Util 不一定满,但 DRAM BW Util 可能较高。
nvidia-smi dmon -i 0,1,2,3 --gpm-options d --gpm-metrics 2,3,10 -d 1
C. PCIe 带宽
| ID | 指标 | 含义 |
|---|---|---|
20 |
PCIe TX/s | GPU 发往 PCIe 的流量,MiB/s |
21 |
PCIe RX/s | GPU 从 PCIe 接收的流量,MiB/s |
你现在用的就是这两个。
nvidia-smi dmon -i 0,1,2,3 --gpm-options d --gpm-metrics 20,21 -d 1
D. NVLink 带宽
| ID | 指标 | 含义 |
|---|---|---|
60 |
NVLink Total RX/s | 所有 NVLink 总读带宽 |
61 |
NVLink Total TX/s | 所有 NVLink 总写带宽 |
62~97 |
NVLink 单 link RX/TX | link0 ~ link17 的逐链路带宽 |
212+ |
更多 NVLink link18 之后的逐链路带宽 | 新架构/更多链路场景 |
官方文档列出了 60/61 总 NVLink 带宽,以及 62~97 对应 link0~link17 的 RX/TX,后续还扩展到更多 link。
例如:
# 看 NVLink 总带宽
nvidia-smi dmon -i 0,1,2,3 --gpm-options d --gpm-metrics 60,61 -d 1
# 同时看 PCIe + NVLink
nvidia-smi dmon -i 0,1,2,3 --gpm-options d --gpm-metrics 20,21,60,61 -d 1
E. NVDEC / NVJPG / NVOFA / NVENC
| ID 范围 | 指标 | 含义 |
|---|---|---|
30~37 |
NVDEC 0~7 Util | 视频解码单元利用率 |
40~47 |
NVJPG 0~7 Util | JPEG 解码单元利用率 |
50~51 |
NVOFA 0~1 Util | Optical Flow Accelerator 利用率 |
166~169 |
NVENC 0~3 Util | 视频编码单元利用率 |
这些对视频推理、多媒体转码、视觉服务更有用。NVML 文档列出了 NVDEC、NVJPG、NVOFA 以及 NVENC 的 GPM metric ID。
F. C2C / Grace-Hopper / GPU-CPU 互连相关
| ID 范围 | 指标 | 含义 |
|---|---|---|
100~103 |
C2C Total/Data TX/RX | C2C 总流量和数据流量 |
104~159 |
C2C link0~link13 TX/RX | 单 C2C link 级别流量 |
这些主要用于 Grace-Hopper、Grace-Blackwell 等 CPU-GPU coherent interconnect 场景。官方 NVML GPM 枚举中列出了 C2C total/data 以及逐 link 的 TX/RX 指标。
G. Cache hit/miss、上下文切换类指标
| ID 范围 | 指标 | 含义 |
|---|---|---|
160~165 |
HostMem / PeerMem / DRAM Cache Hit/Miss | 不同来源内存访问的 cache hit/miss |
170~209 |
GR0~GR7 Context Switch | graphics/compute context switch cycles、requests、active pct 等 |
这类指标更偏底层,适合排查多进程、多租户、MIG 或上下文切换开销。
3. 对 LLM 推理最有价值的组合
如果你是分析大模型推理,我建议优先看这几组。
看 prefill 是否 compute-bound
nvidia-smi dmon -i 0,1,2,3 --gpm-options d --gpm-metrics 1,2,3,5,7,10 -d 1
重点看:
2 SM Util
3 SM Occupancy
5 Any Tensor Util
7 HMMA Tensor Util
10 DRAM BW Util
如果 Tensor Util 和 SM Util 高,通常说明矩阵乘比较充分,prefill 可能偏 compute-bound。
看 decode 是否 memory-bound
nvidia-smi dmon -i 0,1,2,3 --gpm-options d --gpm-metrics 2,3,10,20,21,60,61 -d 1
重点看:
10 DRAM BW Util
20/21 PCIe TX/RX
60/61 NVLink RX/TX
如果 SM Util 不高但 DRAM BW Util 高,常见于 KV cache 读取压力较大的 decode。
看多卡通信是否走 PCIe / NVLink
nvidia-smi dmon -i 0,1,2,3 --gpm-options d --gpm-metrics 20,21,60,61 -d 1
如果 NVLink 流量高,说明 GPU-GPU 通信主要走 NVLink;如果 PCIe RX/TX 高,可能有 host-device 拷贝、CPU staging、跨 PCIe 通信或数据加载瓶颈。
4. 一个比较实用的"全景监控"命令
nvidia-smi dmon \
-i 0,1,2,3 \
--gpm-options d \
--gpm-metrics 1,2,3,5,7,10,20,21,60,61 \
-d 1 \
--format csv
含义:
1 GPU active
2 SM busy
3 SM occupancy
5 Tensor Core overall
7 HMMA Tensor Core
10 DRAM bandwidth utilization
20 PCIe TX
21 PCIe RX
60 NVLink total RX
61 NVLink total TX
对 LLM 推理性能分析,这组通常比只看 nvidia-smi 默认的 GPU-Util 更有价值。注意:不同 GPU 架构、驱动版本、MIG 模式下支持的字段会不同;不支持或读取失败时,dmon 会显示 -。NVIDIA 官方文档也明确说明,MIG 场景下部分 utilization 查询并不总是支持。