You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python结合Cron定时远程监控多台机器GPU状态?

完全可行,以下是具体实现方案:

实现步骤

1. 前置准备

  • 本地与所有远程GPU机器配置SSH免密登录:生成本地SSH密钥对,将公钥上传至每台远程机器的~/.ssh/authorized_keys文件,避免脚本执行时需手动输入密码。
  • 远程机器需安装NVIDIA驱动(确保nvidia-smi命令可正常执行)。
  • 本地机器安装Python3及依赖:pip install paramiko(用于SSH远程执行命令)。

2. Python监控脚本实现

脚本核心逻辑:遍历远程机器列表,通过SSH连接执行格式化的nvidia-smi命令,解析输出并写入日志。

示例代码:

import paramiko
import datetime

# 远程机器配置列表,格式为(IP, SSH端口, 用户名)
REMOTE_MACHINES = [
    ("192.168.1.10", 22, "user1"),
    ("192.168.1.11", 22, "user2"),
    # 按需添加更多机器
]

# 日志文件存储路径
LOG_FILE = "/var/log/gpu_monitor.log"

def fetch_gpu_status(host, port, username):
    try:
        # 建立SSH连接
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(host, port=port, username=username)
        
        # 执行格式化nvidia-smi命令,提取关键指标
        cmd = "nvidia-smi --query-gpu=timestamp,name,utilization.gpu,memory.used,memory.total --format=csv,noheader,nounits"
        _, stdout, stderr = ssh.exec_command(cmd)
        output = stdout.read().decode().strip()
        error = stderr.read().decode().strip()
        
        ssh.close()
        
        if error:
            return f"[{host}] 获取GPU状态失败: {error}"
        else:
            # 解析单台机器的多GPU数据
            gpu_records = output.split("\n")
            formatted_records = [f"[{host}] {record}" for record in gpu_records if record]
            return "\n".join(formatted_records)
    except Exception as e:
        return f"[{host}] 连接失败: {str(e)}"

def main():
    # 生成监控时间标记
    current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    log_content = f"\n=== 监控快照: {current_time} ===\n"
    
    # 遍历所有远程机器获取状态
    for host, port, username in REMOTE_MACHINES:
        log_content += fetch_gpu_status(host, port, username) + "\n"
    
    # 追加写入日志
    with open(LOG_FILE, "a", encoding="utf-8") as f:
        f.write(log_content)

if __name__ == "__main__":
    main()

3. 配置Cron定时任务

在本地机器配置Cron,实现每小时自动执行脚本:

  1. 打开Cron编辑界面:crontab -e
  2. 添加以下配置(替换脚本路径为实际路径):
0 * * * * /usr/bin/python3 /path/to/your/gpu_monitor.py >> /var/log/gpu_monitor_cron.log 2>&1
  • 0 * * * * 表示每小时整点执行
  • /usr/bin/python3 为Python3的绝对路径(可用which python3查询)
  • 末尾的日志重定向用于记录Cron执行脚本的状态(可选,用于排查执行问题)

4. 优化建议

  • 日志轮转:配置logrotate对日志文件进行自动切割,避免文件过大。
  • 异常告警:添加邮件/企业微信通知逻辑,当GPU利用率过高或显存不足时触发告警。
  • 结构化数据采集:若需更精准的指标,可在远程机器安装pynvml库,直接通过Python调用NVIDIA管理接口获取数据,无需解析命令输出。

内容的提问来源于stack exchange,提问作者Nagabhushan S N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 20:37:11