使用騰訊雲“自定義監控”監控GPU使用率


歡迎大家前往雲+社區,獲取更多騰訊海量技術實踐干貨哦~
作者:李想
隨着人工智能以及比特幣的火熱,GPU雲服務的使用場景是越來越廣,在很多場景下我們也需要獲取GPU服務器的性能參數來優化程序的執行。目前騰訊雲提供的GPU雲服務器並未提供GPU方面的監控數據,本文旨在通過使用騰訊雲的“自定義監控”服務來自行實現對GPU服務器的GPU使用率的監控。

1.GPU雲服務創建

騰訊雲GPU雲服務器的創建可以參考下面官網的文檔,采用雲市場提供的GPU服務器專用鏡像可以免於自行安裝GPU驅動程序。
使用雲市場的鏡像創建的服務器,默認已經包含了NVML 管理庫(Nvidia Management Library)和 基於NVML的命令行工具nvidia-smi (NVIDIA System Management Interface)。
在服務器上執行nvidia-smi可以獲取當前服務器的GPU使用率。
除了nvidia-smi 命令行工具,Nvidia也提供了NVML的Python SDK供開發者使用,本文就基於NVML的python SDK用於讀取GPU使用率,並將數據上傳到騰訊雲自定義監控對應接口進行監控。
同時需要執行如下命令安裝NVML的Python庫:
pip install nvidia-ml-py

2.自定義監控配置

首先創建監控配置,命名空間是該監控的名字,維度用於定義每一個監控數據,由於一個服務器可能有多個GPU,所以我們這里定義兩個維度,server_name用於記錄GPU服務器名字,gpu_id用於記錄GPU序列號。如果還需監控GPU其他指標可以在監控指標里進行添加。
配置創建完畢需要創建指標統計方式,這里配置統計周期為5分鍾,並按照平均值進行統計。

3.數據上報

數據上報通過一個Python腳本來實現,腳本主要需要完成下面幾個任務。
  1. 初始化NVML並調用nvmlDeviceGetCount()讀取GPU個數。
  2. 計算Signature作為API接口校驗和鑒權參數。需要注意數據上報接口跟一般騰訊雲API接口不同,並且簽名算法也有所不同,具體可參考官方文檔
  3. 調用NVML接口nvmlDeviceGetUtilizationRates()讀取GPU使用率。
  4. 將讀取的數據進行封裝並上傳。dimensions需要指定每個維度的值,這里server_name指定為‘testserver’,gpu_id為讀取的GPU ID號。
核心部分的代碼如下:
        nvmlInit()
        deviceCount = nvmlDeviceGetCount()

        while True:
                ts=int(time.time())
                nonce=random.randint(10000,100000)
                text="GETreceiver.monitor.tencentyun.com/v2/index.php?Action=PutMonitorData&Nonce=%d&Region=%s&SecretId=%s&Timestamp=%d" % (nonce,region,secretId,ts)
                data['Timestamp']=ts
                data['Nonce']=nonce
                data['Signature']=hmac.new(secretKey,text,hashlib.sha1).digest().encode("base64").rstrip('\n')

                for i in range(deviceCount):

                        handle = nvmlDeviceGetHandleByIndex(i)
                        gpu_util = getGpuUtilization(handle)
                        Data=[
                             {
                              "dimensions": {"gpu_id": str(i) ,"server_name": 'testserver'},
                              "metricName": "gpu_util",
                              "value": gpu_util,
                              }
                              ]
                        data["Data"]=json.dumps(Data)
                        xx = urllib.urlencode(data)
                        sender.send_data(xx)

                time.sleep(20)
完整代碼可以參考如下的Github鏈接:

4.監控數據查看

登錄到自定義監控管理界面,可以查看采集到的數據。如果需要配置告警策略,可以在告警管理中進行配置。
另外,如果需要查看詳細的數據也可以在報表詳情中進行查看。

總結

本文主要講述了如何利用騰訊雲的自定義監控服務來監控GPU服務器的GPU使用率,為大家在實際應用中監控服務器的非標數據提供了解決思路,如果需要監控GPU的其他參數如GPU內存使用率,GPU功耗等也可以基於此做適當修改來實現。另外,如果大家需要監控GPU之外一些非標數據,也可以參考本文提供的方案自行編寫上傳模塊來實現。

相關閱讀


此文已由作者授權雲加社區發布,轉載請注明文章出處


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM