使用騰訊雲「自定義監控」監控GPU使用率

歡迎你們前往雲+社區,獲取更多騰訊海量技術實踐乾貨哦~php

做者:李想

隨着人工智能以及比特幣的火熱,GPU雲服務的使用場景是愈來愈廣,在不少場景下咱們也須要獲取GPU服務器的性能參數來優化程序的執行。目前騰訊雲提供的GPU雲服務器並未提供GPU方面的監控數據,本文旨在經過使用騰訊雲的「自定義監控」服務來自行實現對GPU服務器的GPU使用率的監控。python

1.GPU雲服務建立

騰訊雲GPU雲服務器的建立能夠參考下面官網的文檔,採用雲市場提供的GPU服務器專用鏡像能夠免於自行安裝GPU驅動程序。
https://cloud.tencent.com/doc...
使用雲市場的鏡像建立的服務器,默認已經包含了NVML 管理庫(Nvidia Management Library)和 基於NVML的命令行工具nvidia-smi (NVIDIA System Management Interface)。
在服務器上執行nvidia-smi能夠獲取當前服務器的GPU使用率。git

除了nvidia-smi 命令行工具,Nvidia也提供了NVML的Python SDK供開發者使用,本文就基於NVML的python SDK用於讀取GPU使用率,並將數據上傳到騰訊雲自定義監控對應接口進行監控。
https://pypi.python.org/pypi/...
同時須要執行以下命令安裝NVML的Python庫:github

pip install nvidia-ml-py

2.自定義監控配置

首先建立監控配置,命名空間是該監控的名字,維度用於定義每個監控數據,因爲一個服務器可能有多個GPU,因此咱們這裏定義兩個維度,server_name用於記錄GPU服務器名字,gpu_id用於記錄GPU序列號。若是還需監控GPU其餘指標能夠在監控指標裏進行添加。算法

配置建立完畢須要建立指標統計方式,這裏配置統計週期爲5分鐘,並按照平均值進行統計。
json

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連接:
https://github.com/xianl/GPUM...less

4.監控數據查看

登陸到自定義監控管理界面,能夠查看採集到的數據。若是須要配置告警策略,能夠在告警管理中進行配置。dom

另外,若是須要查看詳細的數據也能夠在報表詳情中進行查看。

總結

本文主要講述瞭如何利用騰訊雲的自定義監控服務來監控GPU服務器的GPU使用率,爲你們在實際應用中監控服務器的非標數據提供瞭解決思路,若是須要監控GPU的其餘參數如GPU內存使用率,GPU功耗等也能夠基於此作適當修改來實現。另外,若是你們須要監控GPU以外一些非標數據,也能夠參考本文提供的方案自行編寫上傳模塊來實現。

相關閱讀

【雲端架構】騰訊雲CDN連接鑑權算法PHP代碼模板
騰訊雲微計算實踐:從Serverless提及,談談邊緣計算的將來
如何在Python中從零開始實現隨機森林


此文已由做者受權雲加社區發佈,轉載請註明文章出處

相關文章
相關標籤/搜索