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