随着高清,4K视频的推广,视频GPU硬件编码,解码,转码已经开始成为主流。同时人工智能的兴起,深度学习也离不开硬件GPU的模型训练和计算。GPU硬件参数越来得到开发人员的关注,对GPU 温度,占用率,显存等参数也纳入监控平台的重要监控指标。本文以温度为例介绍如何监控显卡GPU相关参数。
监控GPU参数通常由以下几种方式:
一.直接查看Windows资源管理器里面GPU参数。
任务管理器监控参数
Windows资源监控管理器,能看到GPU各种占有率参数,但看不到GPU的温度,且通过这UI种方式只能在Windows系统中查看,无法将数据传的传输后台监控。同时win7的任务管理器不支持GPU参数显示。
二.GPU-Z查看,鲁大师等第三方软件。
GPU-z监控参数
鲁大师监控参数
第三方软件都是UI界面,只能临时查看使用,无法集成到项目中,实时采集数据。我们的需求是完成类似第三方工具的GPU相关参数的采集。
三.显卡厂家命令行工具
像英伟达提供命令行工具,如:nvidia-smi.exe
命令行工具采集参数
可以将命令行工具集成到代码工程中,将命令行输出重定向到工程代码中的一个字符buffer中,然后解析字符buffer中的温度等相关字段。该方法简单,快速。不足之处如下:
1. 每采集一次温度调一次命令行,相当于启动一个进程,有一定开销。或者该命令行常驻执行,每N秒刷新一次参数,但如果被用户干掉了也就麻烦了,需要写一个守护程序保护这个进程。
2. 解析字符有点繁琐,命令行工具打印字符如果格式发送变化可能造成解析错误。如版本升级,或者出现小数点,或者采集数据位数增加等造成打印参数格式变了等。不过这些问题可以代码解析时做好兼容,不是问题。
3. 有些显卡驱动默认不带该命令行参数采集工具,需要自己打包带入系统
总体来说命令行工具打印重定向还是可以快速集成使用。笔者最初也是采用这个方式集成使用。但考虑这种方式有点啰嗦,不如直接调API来的利索,后面还是找到API方式获取GPU监控参数。
对于AMD显卡目前没有找到官方相关命令行工具。如果有,请大家分享一下。
四.API调用获取GPU相关参数
这种方法才是最优雅的方法,像鲁大师,GPU-Z等地方工具也都是通过API获取。基本思路:调用GPU厂家的SDK库的API来完成。
英伟达显卡API采集温度实现:
我们通过调用英伟达的SDK提供的API完成一个demo如下:
API采集参数demo