监控gpu使用率python代码

在服务器上面跑代码时,怕代码跑完了,云平台服务器还一直开着收费,特别是晚上离开实验室回去睡觉

这时候就需要有一个脚本实时监控云端服务器代码是否还在一直跑,如果中途退出训练,那么让服务器自动关机。

以下为python代码实现:

import subprocess
import re
import time
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import os
import pycuda.driver as cuda
import pycuda.autoinit

# 连续低占用率计数器
low_utilization_count = 0


def get_gpu_utilization():
    try:
        output = subprocess.check_output(['nvidia-smi', '--query-gpu=utilization.gpu', '--format=csv,noheader,nounits'])
        gpu_utilization = [int(x) for x in output.decode('utf-8').strip().split('\n')]
        return gpu_utilization
    except subprocess.CalledProcessError:
        return None


def get_gpu_info():
    num_devices = cuda.Device.count()
    gpu_info_list = []

    for i in range(num_devices):
        device = cuda.Device(i)

        gpu_info = {
            "Device ID": i,
            "Name": device.name(),
            "Total Memory": device.total_memo
<think>好的,我现在需要帮助用户找到使用Python实时监控Jetson设备GPU使用率的方法,并提供示例代码。首先,我得回顾一下用户提供的引用内容,看看是否有相关线索。 引用[1]提到gpuGraphTX这个项目,它可以在Jetson设备上可视化GPU利用率,并需要安装matplotlib库。这说明可能有现成的工具或脚本可以参考。用户的问题是关于实时监控,可能需要读取GPU数据并持续显示或记录。 接下来,用户需要Python脚本的示例代码。根据引用[3]和[4],用户可能已经熟悉在Jetson上使用Python和命令行工具,比如通过vim编辑脚本。此外,Jetson设备通常有tegrastats工具,可以监控GPU、CPU等状态,这个工具的输出可能包含GPU利用率的信息。 所以,可能的解决方案是编写一个Python脚本,定期调用tegrastats获取GPU使用率,并解析输出。例如,tegrastats的输出可能包含“GR3D_FREQ”这样的字段,表示GPU使用率。通过subprocess模块运行tegrastats并捕获输出,然后用正则表达式提取相关数值。 另外,引用[1]中的gpuGraphTX可能已经实现了类似的功能,用户可以参考其代码结构。不过用户需要的是实时监控,可能需要循环读取数据并更新显示,可能用到matplotlib的实时绘图功能,或者简单的打印输出。 需要确保代码能够在Jetson设备上运行,可能需要安装必要的库,如matplotlib,这已经在引用[1]中提到安装方法。同时,权限问题可能需要使用sudo运行脚本,或者配置用户权限以访问GPU数据。 最后,示例代码需要包括如何间隔读取数据、解析数据,并实时显示。可能还需要处理异常和退出条件,比如用户按下Ctrl+C停止监控。 总结步骤:1.使用subprocess调用tegrastats;2.解析输出中的GPU使用率;3.循环执行并实时显示;4.提供简单的可视化或文本输出。</think>以下是使用Python实时监控Jetson设备GPU使用率的实现方法及示例代码: ### 实现原理 Jetson系列设备可通过系统工具`tegrastats`获取GPU利用率数据。该工具输出包含$GR3D_FREQ$字段,其百分比值即实时GPU利用率[^1]。 ### 步骤说明 1. **安装依赖库** ```bash $ sudo apt-get install python3-matplotlib ``` 2. **Python脚本实现** ```python import subprocess import re import time import matplotlib.pyplot as plt def get_gpu_usage(): tegrastats = subprocess.Popen(['tegrastats'], stdout=subprocess.PIPE) output = tegrastats.stdout.readline().decode() match = re.search(r'GR3D_FREQ (\d+)%', output) return int(match.group(1)) if match else 0 # 文本模式实时监控 def monitor_console(interval=1): try: while True: usage = get_gpu_usage() print(f"\rGPU Usage: {usage}%", end='', flush=True) time.sleep(interval) except KeyboardInterrupt: print("\nMonitoring stopped") # 图形化模式(可选) def monitor_graph(sample_count=60): plt.ion() x, y = [], [] for _ in range(sample_count): y.append(get_gpu_usage()) x.append(len(y)) plt.clf() plt.plot(x, y, 'r-') plt.title("GPU Usage Monitor") plt.xlabel("Time(s)") plt.ylabel("Usage(%)") plt.pause(1) plt.ioff() if __name__ == "__main__": monitor_console() # 文本模式 # monitor_graph() # 图形模式 ``` ### 代码说明 1. `get_gpu_usage()`函数通过子进程调用`tegrastats`命令,使用正则表达式`r'GR3D_FREQ (\d+)%'`提取GPU利用率数值 2. 提供两种监控模式: - 文本模式:每秒刷新控制台输出 - 图形模式:使用Matplotlib生成动态折线图[^3] 3. 可通过`KeyboardInterrupt`(Ctrl+C)终止监控
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jack_pirate

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值