欢迎大家前往云 + 社区, 获取更多腾讯海量技术实践干货哦~
作者: 李想
随着人工智能以及比特币的火热, 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 也提供了 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 脚本来实现, 脚本主要需要完成下面几个任务
初始化 NVML 并调用 nvmlDeviceGetCount()读取 GPU 个数
计算 Signature 作为 API 接口校验和鉴权参数需要注意数据上报接口跟一般腾讯云 API 接口不同, 并且签名算法也有所不同, 具体可参考官方文档
调用 NVML 接口 nvmlDeviceGetUtilizationRates()读取 GPU 使用率
将读取的数据进行封装并上传 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 之外一些非标数据, 也可以参考本文提供的方案自行编写上传模块来实现
来源: https://www.cnblogs.com/qcloud1001/p/8473725.html