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