使用腾讯云“自定义监控”监控 GPU 使用率

随着人工智能以及比特币的火热,GPU云服务的使用场景是越来越广,在很多场景下我们也需要获取GPU服务器的性能参数来优化程序的执行。目前腾讯云提供的GPU云服务器并未提供GPU方面的监控数据,本文旨在通过使用腾讯云的“自定义监控”服务来自行实现对GPU服务器的GPU使用率的监控。

1.GPU云服务创建

腾讯云GPU云服务器的创建可以参考下面官网的文档,采用云市场提供的GPU服务器专用镜像可以免于自行安装GPU驱动程序。

https://cloud.tencent.com/document/product/560/11377

使用云市场的镜像创建的服务器,默认已经包含了NVML 管理库(Nvidia Management Library)和 基于NVML的命令行工具nvidia-smi (NVIDIA System Management Interface)。

在服务器上执行nvidia-smi可以获取当前服务器的GPU使用率。

nvidia-smi

除了nvidia-smi 命令行工具,Nvidia也提供了NVML的Python SDK供开发者使用,本文就基于NVML的python SDK用于读取GPU使用率,并将数据上传到腾讯云自定义监控对应接口进行监控。

https://pypi.python.org/pypi/nvidia-ml-py

同时需要执行如下命令安装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链接:

https://github.com/xianl/GPUMonitor/blob/master/GPUMonitor.py

4.监控数据查看

登录到自定义监控管理界面,可以查看采集到的数据。如果需要配置告警策略,可以在告警管理中进行配置。

监控数据查看

另外,如果需要查看详细的数据也可以在报表详情中进行查看。

监控数据详情

总结


本文主要讲述了如何利用腾讯云的自定义监控服务来监控GPU服务器的GPU使用率,为大家在实际应用中监控服务器的非标数据提供了解决思路,如果需要监控GPU的其他参数如GPU内存使用率,GPU功耗等也可以基于此做适当修改来实现。另外,如果大家需要监控GPU之外一些非标数据,也可以参考本文提供的方案自行编写上传模块来实现。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

无人驾驶系列——深度学习笔记:Tensorflow的安装-windows系统

前言 近期由个人工作的需要,着手开始研究深度学习相关的内容。也是小白一枚,希望通过文字来记录自己学习过程中踩的坑,给看到的人一点帮助。 ? 目前深度学习框架中,...

2769
来自专栏Python小屋

Python+matplotlib绘制柱状图并设置坐标轴有效刻度

问题描述:在使用matplotlib绘图时,一般会自动设置坐标轴刻度。很多时候,这个自动设置并不合适,用户更希望绘制结果的坐标轴上只显示有效刻度,也就是只显示有...

1463
来自专栏Golang语言社区

【译】用Go实现一个静态博客生成器

静态站点生成器是一种工具,给一些输入(例如,markdown),使用HTML,CSS和JavaScript生成完全静态的网站。 为什么这很酷?一般来说,搭建一个...

6404
来自专栏小小挖掘机

windows下使用word2vec训练维基百科中文语料全攻略!(一)

训练一个聊天机器人的很重要的一步是词向量训练,无论是生成式聊天机器人还是检索式聊天机器人,都需要将文字转化为词向量,时下最火的词向量训练模型是word2vec,...

2856
来自专栏性能与架构

Nginx的I/O性能为什么比Apache更高效?

Nginx与Apache的I/O性能差距源于他们采用不同的I/O模型 Apache - select模型 Nginx - epoll模型 特点对比 se...

37610
来自专栏Small Code

【TensorFlow | 升级】TensorFlow 1.0 发布

NOW 首届 TensorFlow 开发者大会(TensorFlow Dev Summit)已于美国时间昨日召开,YouTube 还进行了直播。更重要的是,Te...

20610
来自专栏用户2442861的专栏

Tesseract:训练

http://www.zmonster.me/2015/05/05/tesseract-training.html

1231
来自专栏软件开发 -- 分享 互助 成长

用例图

用例图从用户的角度描述对软件产品的需求,并分析产品所需要的功能和动态行为。 用例图的组成元素: 1、参与者:代表系统的用户(可以是人、物、时间或者其他系统),用...

3295
来自专栏FreeBuf

爬虫采集去重优化浅谈

以前在做漏洞Fuzz爬虫时,曾做过URL去重相关的工作,当时是参考了seay法师的文章以及网上零碎的一些资料,感觉做的很简单。近来又遇到相关问题,于是乎有了再次...

3426
来自专栏我是攻城师

各种IO复用模式之select,poll,epoll,kqueue,iocp分析

上篇文章,我们介绍了Java IO框架的演变,其实编程语言的IO实现是依赖于底层的操作系统,如果OS内核不支持,那么语言层面也无能为力。任何一个跨平台的编程语言...

3251

扫码关注云+社区

领取腾讯云代金券