摘要: 本文將介紹如何利用阿裡云云監控服務提供的自訂監控實現GPU雲伺服器的GPU監控和報警的視覺化, 從而達到對GPU使用情況即時掌握的目的。
NVIDIA提供了nvidia-smi命令工具用於查詢和監控GPU的相關資料, 但是對於使用者來說, 每次手動查看很不方便, 無法做到即時監控, 而且也無法視覺化, 不直觀。
本文將會介紹如何利用阿裡云云監控服務提供的自訂監控功能來實現GPU雲伺服器的GPU監控和報警的視覺化。
2 自訂監控和報警
阿裡云云監控服務提供了自訂監控功能, 用戶可以利用它實現自訂的資料監控和報警。
我們利用自訂監控提供的API或者SDK, 可以將GPU雲主機內採集的GPU資料上報, 在雲監控控制台上添加相應的GPU監控項, 就可以實現對指定GPU實例內指定GPU的相應資料進行監控, 對相應監控項設置相應資料的報警規則, 就能實現監控資料的自動報警。
比如可以對GPU利用率、顯存利用率、顯存佔用、功率、溫度等關鍵資訊進行監控和報警。
詳見:創建自訂監控項和報警規則
3 監控資料上報自訂監控提供的SDK支援Python和bash, 通過編寫腳本調用SDK的介面, 可以實現相應監控資料的上報。
通過定時調度腳本, 按創建監控項時定義的上報週期上報資料。 Linux環境可以使用Crontab, Windows環境可以使用quartz.net。
詳見:監控資料上報
4 GPU資料獲取NVDIA驅動安裝時提供了NVIDIA Management Library (NVML), 該庫提供了採集GPU資料的介面, 並基於NVML提供了nvidia-smi命令用於採集GPU相關資料。 NVML提供了Perl 和Python語言的官方支援, 考慮到自訂監控上報SDK支持Python, 我們可以下載NVML的Python bindings, 編寫Python腳本採集GPU資料。
NVML的Python bindings可以從以下連結下載:https://pypi.python.org/pypi/nvidia-ml-py/
5 示例5.1 創建自訂監控項
在雲監控控制台創建自訂監控項, 如下圖:
5.2 查看監控項資料
在雲監控控制台查看監控項, 如下圖:
某實例GPU 0的GPU利用率(單位:Persent):
某實例GPU 0的顯存利用率(單位:Persent):
某實例GPU 0的記憶體占用量(單位:Megabytes):
某實例GPU 1的功率(單位:Watt):
某實例GPU 1 的溫度(單位:攝氏度):
5.3 設置報警規則
在溫度監控項上點擊報警管理:
設置溫度報警規則:
設置通知物件:
完成設置:
6 參考代碼
資料獲取:
def get_gpu_information(): nvmlInit() deviceCount = nvmlDeviceGetCount() util_list = [] for i in range(0, deviceCount): handle = nvmlDeviceGetHandleByIndex(i) util_list.append(nvmlDeviceGetUtilizationRates(handle)) nvmlShutdown() return deviceCount, util_list資訊上報:
for i in range(0, GPU_Count): gpuid = i cms_post.post(userid,"GPUUtilization",util_list[i].gpu,"Percent",s.format(ecsid=ecsid, gpuid=gpuid))5.3 設置報警規則
在溫度監控項上點擊報警管理:
設置溫度報警規則:
設置通知物件:
完成設置:
6 參考代碼
資料獲取:
def get_gpu_information(): nvmlInit() deviceCount = nvmlDeviceGetCount() util_list = [] for i in range(0, deviceCount): handle = nvmlDeviceGetHandleByIndex(i) util_list.append(nvmlDeviceGetUtilizationRates(handle)) nvmlShutdown() return deviceCount, util_list資訊上報:
for i in range(0, GPU_Count): gpuid = i cms_post.post(userid,"GPUUtilization",util_list[i].gpu,"Percent",s.format(ecsid=ecsid, gpuid=gpuid))