脚本能监控GPU温度吗?

wen 实用脚本 2

本文目录导读:

脚本能监控GPU温度吗?

  1. 使用命令行工具(最常用、最直接)
  2. 使用编程语言库
  3. 监控脚本示例(带报警功能)
  4. 跨平台方案
  5. 注意事项

是的,脚本完全可以监控GPU温度,这主要取决于你的操作系统和使用的脚本语言。

以下是几种常见的方法:

使用命令行工具(最常用、最直接)

几乎所有的GPU监控工具都提供命令行接口,非常适合在脚本中调用。

Windows (使用 nvidia-smi)

NVIDIA显卡必备工具,通常随驱动安装。

:: 查看所有GPU的温度(只提取温度值)
nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader
:: 查看更详细的信息
nvidia-smi --query-gpu=index,name,temperature.gpu,utilization.gpu,memory.used --format=csv

脚本示例 (PowerShell/Batch):

$temp = nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader
Write-Host "当前GPU温度: $temp °C"

Linux (使用 nvidia-smisensors)

  • NVIDIA显卡:
    nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader
  • AMD显卡:
    # 使用amdgpu驱动
    cat /sys/class/drm/card0/device/hwmon/hwmon*/temp1_input
    # 或使用rocm-smi
    rocm-smi --showtemp
  • 通用工具 (sensors):
    sensors | grep -i "gpu\|amdgpu\|nvme"

macOS (使用 istatspowermetrics)

# 如果安装了istats (需要先安装: brew install istats)
istats cpu temp --value-only
# 使用 powermetrics (需要root权限)
sudo powermetrics --samplers smc -n 1 -i 1000 | grep -i "GPU die temperature"

使用编程语言库

这种方式更灵活,可以直接在脚本中处理数据。

Python (推荐)

Python有多个库可以直接读取GPU信息。

安装依赖:

pip install pynvml  # 针对NVIDIA
pip install pyamdgpuinfo  # 针对AMD (Linux)

脚本示例 (Python):

import pynvml
# 初始化
pynvml.nvmlInit()
handle = pynvml.nvmlDeviceGetHandleByIndex(0)  # 第一个GPU
# 获取温度
temp = pynvml.nvmlDeviceGetTemperature(handle, pynvml.NVML_TEMPERATURE_GPU)
print(f"GPU温度: {temp}°C")
# 获取更多信息
name = pynvml.nvmlDeviceGetName(handle).decode('utf-8')
util = pynvml.nvmlDeviceGetUtilizationRates(handle)
print(f"GPU: {name}, 利用率: {util.gpu}%, 显存: {util.memory}%")
pynvml.nvmlShutdown()

Node.js

npm install systeminformation

脚本示例 (Node.js):

const si = require('systeminformation');
si.graphics().then(data => {
    data.controllers.forEach(gpu => {
        console.log(`GPU: ${gpu.model}, 温度: ${gpu.temperatureGpu}°C`);
    });
});

监控脚本示例(带报警功能)

Python 脚本 - 持续监控并在温度过高时报警:

#!/usr/bin/env python3
import pynvml
import time
import os
import sys
# 配置
THRESHOLD = 80  # 报警阈值 (°C)
CHECK_INTERVAL = 5  # 检查间隔(秒)
ALERT_COMMAND = "os.system('say 温度过高')"  # macOS语音提醒,其他系统可替换
def get_gpu_temp():
    pynvml.nvmlInit()
    handle = pynvml.nvmlDeviceGetHandleByIndex(0)
    temp = pynvml.nvmlDeviceGetTemperature(handle, pynvml.NVML_TEMPERATURE_GPU)
    pynvml.nvmlShutdown()
    return temp
def log_temp(temp):
    timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
    print(f"[{timestamp}] GPU温度: {temp}°C")
    with open("gpu_temp.log", "a") as f:
        f.write(f"[{timestamp}] {temp}°C\n")
# 主循环
try:
    while True:
        temp = get_gpu_temp()
        log_temp(temp)
        if temp > THRESHOLD:
            print(f"⚠️ 警告: GPU温度 {temp}°C 超过阈值 {THRESHOLD}°C!")
            # 执行报警动作(如发送邮件、触发蜂鸣器等)
            # os.system(ALERT_COMMAND)
        time.sleep(CHECK_INTERVAL)
except KeyboardInterrupt:
    print("\n监控已停止")
    sys.exit(0)

跨平台方案

如果需要在多处运行,可以考虑:

  • Python + psutil + GPUtil:
    import GPUtil
    gpus = GPUtil.getGPUs()
    for gpu in gpus:
        print(f"{gpu.name}: {gpu.temperature}°C")

    安装: pip install gputil

注意事项

  1. 权限问题: 某些系统或命令(如macOS的powermetrics)需要root权限。
  2. 驱动要求: NVIDIA需要安装官方驱动;AMD在Linux上可能需要amdgpu驱动。
  3. 多GPU: 如果有多个GPU,需要遍历索引(0,1,2...)或通过UUID区分。
  4. 集成显卡: 集成在CPU中的显卡通常没有独立的温度传感器,可能需要通过CPU温度间接监控。

脚本监控GPU温度非常可行且简单,最推荐的方法是Python + pynvml(或GPUtil),或者直接在bash中调用nvidia-smi,你可以将监控脚本集成到自动化任务、报警系统或性能调优工具中。

抱歉,评论功能暂时关闭!