歡迎你們前往雲+社區,獲取更多騰訊海量技術實踐乾貨哦~php
做者:李想
隨着人工智能以及比特幣的火熱,GPU雲服務的使用場景是愈來愈廣,在不少場景下咱們也須要獲取GPU服務器的性能參數來優化程序的執行。目前騰訊雲提供的GPU雲服務器並未提供GPU方面的監控數據,本文旨在經過使用騰訊雲的「自定義監控」服務來自行實現對GPU服務器的GPU使用率的監控。python
騰訊雲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
首先建立監控配置,命名空間是該監控的名字,維度用於定義每個監控數據,因爲一個服務器可能有多個GPU,因此咱們這裏定義兩個維度,server_name用於記錄GPU服務器名字,gpu_id用於記錄GPU序列號。若是還需監控GPU其餘指標能夠在監控指標裏進行添加。算法
配置建立完畢須要建立指標統計方式,這裏配置統計週期爲5分鐘,並按照平均值進行統計。
json
數據上報經過一個Python腳原本實現,腳本主要須要完成下面幾個任務。服務器
核心部分的代碼以下:架構
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
登陸到自定義監控管理界面,能夠查看採集到的數據。若是須要配置告警策略,能夠在告警管理中進行配置。dom
另外,若是須要查看詳細的數據也能夠在報表詳情中進行查看。
本文主要講述瞭如何利用騰訊雲的自定義監控服務來監控GPU服務器的GPU使用率,爲你們在實際應用中監控服務器的非標數據提供瞭解決思路,若是須要監控GPU的其餘參數如GPU內存使用率,GPU功耗等也能夠基於此作適當修改來實現。另外,若是你們須要監控GPU以外一些非標數據,也能夠參考本文提供的方案自行編寫上傳模塊來實現。
【雲端架構】騰訊雲CDN連接鑑權算法PHP代碼模板
騰訊雲微計算實踐:從Serverless提及,談談邊緣計算的將來
如何在Python中從零開始實現隨機森林
此文已由做者受權雲加社區發佈,轉載請註明文章出處