zoukankan      html  css  js  c++  java
  • 使用腾讯云“自定义监控”监控GPU使用率

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

    相关阅读


    此文已由作者授权云加社区发布,转载请注明文章出处
  • 相关阅读:
    hdu 2019 数列有序!
    hdu 2023 求平均成绩
    HDU 5805 NanoApe Loves Sequence (思维题) BestCoder Round #86 1002
    51nod 1264 线段相交
    Gym 100801A Alex Origami Squares (求正方形边长)
    HDU 5512 Pagodas (gcd)
    HDU 5510 Bazinga (字符串匹配)
    UVALive 7269 Snake Carpet (构造)
    UVALive 7270 Osu! Master (阅读理解题)
    UVALive 7267 Mysterious Antiques in Sackler Museum (判断长方形)
  • 原文地址:https://www.cnblogs.com/qcloud1001/p/8473725.html
Copyright © 2011-2022 走看看