隨着高清,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下也是類似的思路。更多更詳細資源請關注公衆:AV_Chat