重磅!!!监控分布式NVIDIA-GPU状态

简介:Uptime Kuma是一个易于使用的自托管监控工具,它的界面干净简洁,部署和使用都非常方便,用来监控GPU是否在占用,非常美观。

历史攻略:

docker应用:搭建uptime-kuma监控站点

win下持续观察nvidia-smi

Python:查看windows下GPU的使用情况、利用率

使用Supervisor部署Sanic应用

操作步骤:

1、容器搭建Uptime Kuma。详见 - 历史攻略链接1

2、安装nvidia-smi。详见 - 历史攻略链接2

3、搭建sanic服务端:主要是写访问nvidia-smi的一个接口。

4、配置Uptime Kuma。

安装依赖:

复制代码
pip install paramiko
pip install sanic

案例源码:

复制代码
# -*- coding: utf-8 -*-
# time: 2024/4/23 20:15
# file: server.py
# 公众号: 玩转测试开发

import re
import paramiko
import datetime
from sanic import Sanic
from sanic.response import json


class ParamikoTool(object):
    def __init__(self, user, password, host, port=22, timeout=60):
        self.user = user
        self.password = password
        self.host = host
        self.port = port
        self.timeout = timeout

    def send_command(self, command):
        print(f"send command:{command}")
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(self.host, self.port, self.user, self.password)
        stdin, stdout, stderr = ssh.exec_command(command)
        out = stdout.readlines()
        err = stderr.readlines()
        ssh.close()
        out_result = "".join(out)
        err_result = "".join(err)

        result = out_result + err_result
        print(result)

        return result


app = Sanic("MyHelloWorldApp")


@app.post("/")
async def hello_world(request):
    data = request.json
    print(f"data:{data}")

    get_command = dict()

    get_command["user"] = data["user"]
    get_command["password"] = data["password"]
    get_command["host"] = data["host"]

    if data.get("port") is None:
        get_command["port"] = 22

    else:
        get_command["port"] = data["port"]

    if data.get("timeout") is None:
        get_command["timeout"] = 60

    else:
        get_command["timeout"] = data["timeout"]

    user = get_command["user"]
    password = get_command["password"]
    host = get_command["host"]

    pt = ParamikoTool(user=user, password=password, host=host)
    smi_data = pt.send_command("nvidia-smi")
    utilization_rate = float(re.findall("MiB \|(.*?)%", smi_data)[0])
    card_used = True if utilization_rate > 0 else False

    if card_used:
        # 如果已经使用则,返回异常。否则正常返回
        return BaseException
    else:
        server_data = {
            "card_used": card_used,
            "date": str(datetime.datetime.now())[:19],
        }
        del pt

        return json(server_data)


if __name__ == '__main__':
    app.run(host="0.0.0.0", port=8009, auto_reload=True)

运行接口服务端:python server.py 或者参考详见 - 历史攻略链接4

Uptime Kuma配置监控项:多个机器的卡就发起多个监控项,填入对应账号密码即可。

主界面效果:

服务器接口响应情况:

小结:同理可以监控各类服务,进程,端口,占用。本质是:通过启动一个接口服务,将Uptime Kuma监控平台的接口请求,先指向这个服务接口,接口通过paramiko的方式,在对应的服务器执行对应的命令,解析这个命令,然后返回给Uptime Kuma平台。

相关推荐
麦嘟学编程2 分钟前
快速上手配置Zookeeper
linux·分布式·zookeeper
回家路上绕了弯3 分钟前
跨境数据延迟高?5 大技术方向 + 实战案例帮你解决
分布式·后端
深圳市青牛科技实业有限公司 小芋圆7 分钟前
30V N 沟道 MOSFET SP30N06NK 全面解析:参数、特性与应用场景
人工智能·单片机·嵌入式硬件·无人机·高频dc-dc谐振变换器·笔记本电脑开合检测
leafff12313 分钟前
AI数据库研究:RAG 架构运行算力需求?
数据库·人工智能·语言模型·自然语言处理·架构
喝养乐多长不高18 分钟前
深入探讨redis:分布式锁
数据库·redis·分布式
hzk的学习笔记19 分钟前
Redis分布式锁的最佳实践:基于Redisson的实现方案
数据库·redis·分布式·缓存
陈辛chenxin22 分钟前
【大数据技术01】数据科学的基础理论
大数据·人工智能·python·深度学习·机器学习·数据挖掘·数据分析
爱吃烤鸡翅的酸菜鱼25 分钟前
Java【缓存设计】定时任务+分布式锁实战:Redis vs Redisson实现状态自动扭转以及全量刷新预热机制
java·redis·分布式·缓存·rabbitmq
失散1330 分钟前
分布式专题——48 ElasticSearch聚合操作详解
分布式·elasticsearch
极客BIM工作室30 分钟前
扩散模型核心机制解析:U-Net调用逻辑、反向传播时机与步骤对称性
人工智能·深度学习·机器学习