博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用腾讯云“自定义监控”监控GPU使用率
阅读量:5828 次
发布时间:2019-06-18

本文共 2506 字,大约阅读时间需要 8 分钟。

欢迎大家前往 ,获取更多腾讯海量技术实践干货哦~
作者:李想
随着人工智能以及比特币的火热,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之外一些非标数据,也可以参考本文提供的方案自行编写上传模块来实现。

相关阅读

此文已由作者授权云加社区发布,转载请注明

你可能感兴趣的文章
maven+SpringMVC搭建RESTful后端服务框架
查看>>
一本书的摘录
查看>>
重排序(转载)
查看>>
python+selenium之字符串切割操作
查看>>
串结构练习——字符串匹配
查看>>
linux下输入密码不回显
查看>>
《构建之法》读书笔记
查看>>
拿下阿里、头条、滴滴的offer后谈谈面试经验---动身前看一看
查看>>
android开发(49) android 使用 CollapsingToolbarLayout ,可折叠的顶部导航栏
查看>>
【ERP】如何在多行数据块中实现仅能勾选唯一的主联系人
查看>>
Oracle 数据库优化的R方法(Method R)
查看>>
CentOS最小化安装系统开启网卡
查看>>
互联网+升级到智能+ 开启万物智联新时代
查看>>
Linux文本编辑器之Nano
查看>>
【原】IOS中KVO模式的解析与应用
查看>>
理解 QEMU/KVM 和 Ceph(3):存储卷挂接和设备名称
查看>>
[MFC] CList
查看>>
[Android Pro] 完美Android Cursor使用例子(Android数据库操作)
查看>>
c++中sizeof的分析
查看>>
线程间操作无效: 从不是创建控件的线程访问它的解决方法
查看>>