You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于nvmlDeviceGetProcessUtilization返回的SmUtil等技术问题

NVML nvmlDeviceGetProcessUtilization API 常见疑问解答

我在编写监控进程GPU使用情况的程序时,用到了NVML提供的nvmlDeviceGetProcessUtilization API。根据API注释,它会读取当前运行进程的GPU SM(3D/计算)、帧缓冲区、视频编码器及解码器的近期使用率。我分别以1秒和10秒间隔调用该API,得到以下采样结果(ReadTime为API调用时间,sample为返回采样数据):

ReadTime:10:58:56.194 - sample:[Pid:28128, Timestamp:10:58:55.462519, SmUtil:05, MemUtil:01, EncUtil:00, DecUtil:00]
ReadTime:10:58:56.194 - sample:[Pid:28104, Timestamp:10:58:55.127657, SmUtil:05, MemUtil:02, EncUtil:00, DecUtil:00]
ReadTime:10:58:56.194 - sample:[Pid:28084, Timestamp:10:58:48.051124, SmUtil:03, MemUtil:01, EncUtil:00, DecUtil:00]
ReadTime:10:58:56.194 - sample:[Pid:28050, Timestamp:10:58:53.944518, SmUtil:03, MemUtil:01, EncUtil:00, DecUtil:00]
ReadTime:10:58:56.194 - sample:[Pid:27989, Timestamp:10:58:47.043732, SmUtil:03, MemUtil:01, EncUtil:00, DecUtil:00]
ReadTime:10:58:56.194 - sample:[Pid:27976, Timestamp:10:58:53.604955, SmUtil:09, MemUtil:03, EncUtil:00, DecUtil:00]
ReadTime:10:58:56.194 - sample:[Pid:27814, Timestamp:10:58:48.386200, SmUtil:19, MemUtil:07, EncUtil:00, DecUtil:00]
ReadTime:10:58:56.194 - sample:[Pid:27900, Timestamp:10:58:56.132879, SmUtil:17, MemUtil:06, EncUtil:00, DecUtil:00]
ReadTime:10:58:56.194 - sample:[Pid:27960, Timestamp:10:58:51.423172, SmUtil:06, MemUtil:02, EncUtil:00, DecUtil:00]
ReadTime:10:58:56.194 - sample:[Pid:27832, Timestamp:10:58:47.883811, SmUtil:21, MemUtil:08, EncUtil:00, DecUtil:00]
SUM - GPUId:0, process:10, smSum:91, memSum:32, encSum:0, decSum:0

疑问与解答

1. 为何无论以1秒还是10秒间隔调用该API,返回样本中每个进程仅对应一条数据?

nvmlDeviceGetProcessUtilization的设计逻辑是,每次调用时返回当前每个活跃进程的最新一次采样数据,而非该进程在调用间隔内的所有采样记录。NVML内部会持续对进程GPU使用情况采样,但对外暴露时,每个进程仅保留最近的有效采样结果,因此不管调用间隔是1秒还是10秒,每个进程只会返回一条代表其近期状态的数据。

2. 各样本时间戳看似无规律,NVML如何确定采样时间?

NVML的进程级采样并非固定间隔触发,而是基于GPU内部的事件驱动或动态采样机制:

  • 当进程发起GPU相关操作(如启动计算内核、访问显存)时,采样器会记录状态并更新时间戳;
  • 对于长期无GPU活动的进程,采样时间会停留在其最后一次GPU操作的时间点;
  • 后台维护的采样线程会定期对活跃进程轮询,但间隔不固定,因此不同进程的采样时间戳会呈现出看似无规律的分布。

3. SmUtil如何计算?如何理解该API返回的进程级SmUtil?

进程级的SmUtil与设备级nvmlDeviceGetUtilizationRates的计算逻辑本质一致,但维度从整个GPU缩小到单个进程:

  • 设备级SmUtil是整个GPU在采样周期内有SM核心被占用的时间占比;
  • 进程级SmUtil则是该进程在自身采样周期内,占用SM核心的时间占比。具体来说,NVML会统计该进程调度到SM核心上执行的时间,除以采样周期总时长得到百分比数值。这个数值反映的是该进程自身对SM资源的使用强度,而非其占用整个GPU的比例(因此多个进程的SmUtil之和可能超过100%)。

内容的提问来源于stack exchange,提问作者nezhababa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:15:30