如何在Linux终端实时采集保存nvidia-occupancy时序数据
可直接落地的采集方案
你不需要额外写复杂脚本,用NVIDIA官方自带工具就能实现10秒间隔的CUDA占用率(SM Occupancy)时序采集,拿到的是每个采样点的实时值,不是统计最大值。
方案1:用nvidia-smi原生能力采集(零额外依赖,和你现有采集逻辑完全兼容)
nvidia-smi的dmon子命令原生支持按固定间隔输出实时SM占用率指标,不需要安装任何第三方包:
- 基础采集命令(10秒间隔,输出到终端):
nvidia-smi dmon -s u -d 10
参数说明: -s u:指定采集GPU利用率类指标,输出列中的smoc就是你要的实时CUDA SM占用率,和你截图里的occupancy指标口径完全一致-d 10:设置采样间隔为10秒,和你现有GPU时序数据的采集频率对齐- 如果要直接持久化保存为带时间戳的日志文件,方便后续和已有nvidia-smi采集数据做时间对齐,用下面的命令后台运行即可:
nohup nvidia-smi dmon -s u -d 10 -o T > gpu_occupancy_ts.log 2>&1 &
其中-o T指定输出为带标准时间戳的CSV格式,后续直接用pandas、awk等工具就能处理。
典型输出格式参考:
#Date Time gpu sm mem enc dec smoc 20240520 14:32:10 0 12 5 0 0 18 20240520 14:32:20 0 35 12 0 0 42 20240520 14:32:30 0 8 3 0 0 11
输出里的smoc列就是每个采样点的实时占用率,不是周期内最大值。
方案2:用NVIDIA DCGM采集(精度更高,适合生产/多进程场景)
如果你需要更高的指标精度,或者要区分不同进程的CUDA占用率,可以用NVIDIA官方的DCGM工具采集:
- 安装DCGM(Ubuntu/Debian系):
sudo apt install -y datacenter-gpu-manager - 启动服务后执行10秒间隔采集命令:
dcgmi dmon -e 1002 -d 10000
参数说明:
-e 1002对应指标为SM_ACTIVE_OCCUPANCY,即实时SM占用率-d 10000设置采样间隔为10000毫秒(即10秒),输出自带时间戳,可直接重定向存文件。
注意:DCGM对数据中心级GPU(Tesla、A系列、H系列)全版本支持,470及以上版本驱动也支持消费级GPU,指标统计粒度比nvidia-smi更细。
你之前只能拿到最大值,是因为你查看的是nvidia-smi的汇总视图,这类视图默认展示监控周期内的峰值占用,不是实时采样值,换用上面两个命令的持续采样模式就能拿到连续时序数据。
内容的提问来源于stack exchange,提问作者yooons
相关产品推荐
相关产品推荐

