news 2026/4/24 10:02:22

手把手教你写个Shell脚本:自动监控GPU使用率并生成日报(附赠防进程残留技巧)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手教你写个Shell脚本:自动监控GPU使用率并生成日报(附赠防进程残留技巧)

智能GPU监控系统:从实时数据采集到自动化日报生成实战指南

在深度学习模型训练和推理任务中,GPU资源的高效利用直接关系到项目成本和实验效率。许多开发者都曾经历过这样的场景:当你在服务器上启动一个耗时数天的训练任务后,不得不频繁登录服务器手动执行nvidia-smi命令来检查GPU使用情况,或者为了获取连续监控数据而让终端长时间开着,最终却因为网络波动导致SSH断开,监控进程成为"僵尸"残留在系统中。更麻烦的是,这些分散的监控数据难以系统分析,无法形成有效的资源利用率报告。

1. 监控系统架构设计

一个完整的GPU监控系统需要包含四个核心模块:数据采集层负责获取原始GPU指标;数据处理层实现数据清洗和格式转换;存储层管理监控数据的持久化;可视化层生成直观的资源报告。我们将使用Shell脚本作为粘合剂,串联起这些功能模块。

关键指标采集策略需要平衡数据精度和系统开销:

  • 基础指标:GPU利用率、显存占用、温度、功耗
  • 进程级指标:各任务显存分配、计算类型(C/G进程)
  • 采样频率:训练任务建议1-5秒,推理任务可放宽至10-30秒
#!/bin/bash # 基础监控命令模板 nvidia-smi \ --query-gpu=timestamp,name,index,utilization.gpu,memory.total,memory.used,power.draw \ --format=csv,noheader,nounits \ -l 1

2. 健壮性监控脚本开发

原始的手动监控方式存在三个主要痛点:进程管理不可靠(监控进程可能残留)、数据分散难分析(多个CSV文件)、缺乏自动化报警(异常无法及时发现)。下面的脚本解决了这些问题:

#!/bin/bash # gpu_monitor.sh - 带自动清理功能的监控脚本 MONITOR_PID="" DATA_FILE="gpu_metrics_$(date +%Y%m%d_%H%M%S).csv" DURATION=3600 # 默认监控1小时 cleanup() { echo "[$(date)] 清理监控进程..." kill -9 "$MONITOR_PID" 2>/dev/null rm -f "$DATA_FILE.tmp" exit 0 } trap cleanup EXIT TERM INT nvidia-smi \ --query-gpu=timestamp,name,index,utilization.gpu,memory.total,memory.used,power.draw \ --format=csv \ -l 1 > "$DATA_FILE.tmp" & MONITOR_PID=$! echo "监控进程PID: $MONITOR_PID" echo "数据将保存到: $DATA_FILE" sleep "$DURATION" mv "$DATA_FILE.tmp" "$DATA_FILE"

关键改进点

  1. 使用trap命令注册信号处理函数,确保脚本退出时清理监控进程
  2. 临时文件处理机制,避免数据不完整
  3. 支持通过参数自定义监控时长和输出路径

3. 数据可视化与日报生成

原始CSV数据需要经过处理才能转化为直观见解。Python的pandas+matplotlib组合非常适合这个任务:

# analyze_gpu.py import pandas as pd import matplotlib.pyplot as plt def generate_report(csv_file): df = pd.read_csv(csv_file, parse_dates=['timestamp']) # 数据清洗 df = df.dropna() df['gpu_util'] = df['utilization.gpu [%]'].astype(float) df['mem_util'] = df['memory.used [MiB]'] / df['memory.total [MiB]'] * 100 # 生成图表 fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8)) df.plot(x='timestamp', y='gpu_util', ax=ax1, title='GPU利用率') df.plot(x='timestamp', y='mem_util', ax=ax2, title='显存占用率') plt.tight_layout() plt.savefig('gpu_report.png')

日报内容建议包含

  • 资源利用率时序曲线
  • 峰值/均值/低谷统计表
  • 异常时间点标记
  • 各GPU负载均衡情况
指标最大值平均值最小值达标率
GPU利用率98%65%12%82%
显存占用24GB18GB2GB100%
温度76°C68°C42°C安全

4. 高级功能扩展

基础监控满足后,可进一步实现这些增强功能:

异常检测与报警

# 在监控循环中添加异常检测 while read -r line; do temp=$(echo "$line" | awk '{print $4}') if (( temp > 85 )); then send_alert "GPU温度过高: ${temp}°C" fi done < <(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits -l 1)

多节点集中监控架构

  1. 每个节点运行本地采集服务
  2. 通过rsync定期同步数据到中心服务器
  3. 中心节点统一生成聚合报告

资源使用优化建议

  • 当GPU利用率持续低于40%时,考虑减小batch size
  • 显存占用超过90%时,检查是否有内存泄漏
  • 频繁出现温度告警则需要改善散热条件

5. 生产环境部署方案

对于长期运行的监控系统,建议采用以下架构:

组件清单

  • systemd服务单元:管理监控进程生命周期
  • logrotate配置:自动轮转日志文件
  • 监控数据归档策略:
    • 原始数据保留7天
    • 日报数据保留30天
    • 月汇总报告永久保存

部署示例

# /etc/systemd/system/gpu-monitor.service [Unit] Description=GPU Monitoring Service [Service] ExecStart=/opt/gpu-monitor/start_monitor.sh ExecStop=/opt/gpu-monitor/stop_monitor.sh Restart=always [Install] WantedBy=multi-user.target

实际部署后发现,配合Prometheus+Grafana的方案可以获得更好的实时监控体验,但Shell脚本方案在资源受限的环境中仍然具有不可替代的优势——它只需要最基本的系统组件就能运行,且维护成本极低。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 9:57:56

Proteus仿真入门:从74LS00/20门电路测试到逻辑功能验证

1. Proteus仿真入门&#xff1a;为什么选择74LS系列门电路&#xff1f; 第一次打开Proteus软件时&#xff0c;面对琳琅满目的元件库&#xff0c;很多新手都会感到无从下手。我当年学习数字电路时&#xff0c;导师坚持让我们从最基础的74LS00和74LS20芯片开始练习&#xff0c;现…

作者头像 李华
网站建设 2026/4/24 9:56:28

从零到一:构建流域地理概况图的ArcGIS全流程解析

1. 数据准备&#xff1a;构建流域地图的基石 制作一张专业的流域地理概况图&#xff0c;就像盖房子需要打好地基一样&#xff0c;数据准备是整个流程中最关键的起步环节。我刚开始接触流域制图时&#xff0c;经常因为数据源选择不当导致后续步骤反复返工。这里分享我多年总结的…

作者头像 李华
网站建设 2026/4/24 9:55:27

别再覆盖我的ert_main.c了!Simulink代码生成与外部集成的几个关键配置避坑

Simulink代码生成与外部集成的工程化实践指南 从文件覆盖问题看工程配置的重要性 上周三凌晨两点&#xff0c;我又一次在实验室抓狂了——精心调试的硬件接口代码随着Simulink模型更新再次被覆盖。相信每个使用Simulink Coder进行产品开发的工程师都经历过这种绝望时刻&#xf…

作者头像 李华
网站建设 2026/4/24 9:53:43

别再死磕寄存器了!用官方固件库快速上手CY7C68013A与FPGA的USB通信

告别寄存器噩梦&#xff1a;用官方固件库三小时搞定CY7C68013A与FPGA的USB通信 当开发板上的CY7C68013A芯片静静躺在你的工作台上&#xff0c;你是否已经预见到接下来要面对的数百页寄存器手册&#xff1f;这种场景对嵌入式开发者来说再熟悉不过——我们总在底层配置和实际功能…

作者头像 李华
网站建设 2026/4/24 9:53:25

城通网盘解析器:3分钟实现高速下载的专业实战指南

城通网盘解析器&#xff1a;3分钟实现高速下载的专业实战指南 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 城通网盘解析器是一款高效获取城通网盘直连地址的开源工具&#xff0c;专为技术爱好者和进…

作者头像 李华
网站建设 2026/4/24 9:53:24

基于Lora的园区消防监测及上位机设计(有完整资料)

资料查找方式&#xff1a;特纳斯电子&#xff08;电子校园网&#xff09;&#xff1a;搜索下面编号即可编号&#xff1a;T1912310M设计简介&#xff1a;本设计是基于Lora的园区消防监测及上位机设计&#xff0c;主要实现以下功能&#xff1a;从机通过温度传感器检测温度 从机通…

作者头像 李华