Shell GPU 监控 的完整指南

在这里插入图片描述


以下是 Shell GPU 监控 的完整指南,涵盖显存、性能、温度及功耗监控,适用于 NVIDIA/AMD 显卡及高性能计算场景!



一、GPU 监控核心指标

监控项工具/命令典型阈值
显存使用率nvidia-smi(NVIDIA)>80%(报警)
GPU 利用率nvidia-smi>90%(持续高负载)
核心温度nvidia-smi>85℃(危险)
功耗nvidia-smi>250W(高性能卡阈值)
运行进程ps + nvidia-smi未知进程占用 GPU

二、监控工具与命令

1. NVIDIA 显卡监控

基本命令

# 查看 GPU 详细信息(显存、温度、功耗)
nvidia-smi --query-gpu=memory.total,utilization.gpu,temperature.gpu,power.draw --format=csv,noheader,nounits

# 实时监控(每秒刷新)
watch -n 1 nvidia-smi

示例输出

memory.total,utilization.gpu,temperature.gpu,power.draw
11242560, 98%, 72℃, 220W

2. AMD 显卡监控

工具安装

sudo apt install mesa-utils  # 提供 glxinfo
sudo apt install rocm-smi      # ROCm 工具包

基本命令

# 查看 AMD GPU 信息
glxinfo | grep "OpenGL renderer"  # 显示显卡型号
rocm-smi --csv              # 类似 nvidia-smi 的输出

三、Shell 监控脚本示例

1. 实时 GPU 状态监控

#!/bin/bash
while true; do
  # NVIDIA 监控(兼容 AMD 的 fallback)
  if command -v nvidia-smi &> /dev/null; then
    gpu_info=$(nvidia-smi --query-gpu=memory.total,utilization.gpu,temperature.gpu,power.draw --format=csv,noheader,nounits | awk 'NR==1 {print $1" MB / "$2"% / "$3"℃ / "$4"W}')
  else
    # AMD 监控(示例)
    mem=$(rocm-smi --mem | awk '/Total:/ {print $2}')
    util=$(rocm-smi --gpu | awk '/% Used:/ {print $3}')
    temp=$(rocm-smi --temp | awk '/GPU:/ {print $2}')
    power=$(rocm-smi --power | awk '/Draw:/ {print $2}')
    gpu_info="${mem} MB / ${util}% / ${temp}℃ / ${power}W"
  fi

  echo "[$(date +%T)] GPU: $gpu_info"
  sleep 5
done

2. 显存泄漏检测脚本

#!/bin/bash
# 监控显存使用趋势(保存为 CSV)
gpu_mem.csv=""
while true; do
  mem=$(nvidia-smi --query-gpu=memory.used --format=csv,noheader,nounits | awk 'NR==1 {print $1}')
  timestamp=$(date +%s)
  if [ -n "$gpu_mem.csv" ]; then
    echo "$timestamp,$mem" >> gpu_mem.csv
  else
    echo "$timestamp,$mem" > gpu_mem.csv
  fi
  sleep 60  # 每分钟采样一次
done

四、高级监控与可视化

1. GPU 温度预警脚本

#!/bin/bash
while true; do
  temp=$(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits | awk 'NR==1 {print $1}')
  if [ $(echo "$temp > 85" | bc -l) -eq 1 ]; then
    echo "$(date): GPU 温度过高!${temp}℃" | mail -s "GPU Overheat Alert" admin@example.com
  fi
  sleep 30
done

2. 使用 Gnuplot 可视化显存使用

#!/bin/bash
# 生成显存使用图表(需提前安装 gnuplot)
gpu_mem.csv=""
while true; do
  mem=$(nvidia-smi --query-gpu=memory.used --format=csv,noheader,nounits | awk 'NR==1 {print $1}')
  timestamp=$(date +%s)
  echo "$timestamp,$mem" >> gpu_mem.csv
  sleep 60
done

# 绘制图表(后台运行)
gnuplot -persist -e "set terminal png; set output 'gpu_mem.png'; plot 'gpu_mem.csv' using 1:2 with lines title 'GPU Memory Usage'"

五、云原生与容器化监控

1. Kubernetes GPU 资源监控

# 获取 Pod 的 GPU 资源使用
kubectl top pods --namespace=default --resource=gpu

# 监控特定 Pod(GPU 利用率 >90%)
while true; do
  metrics=$(kubectl top pod my-gpu-pod --namespace=default --output=json)
  gpu_util=$(echo $metrics | jq '.items[0].metrics.gpu.usage')
  if [ $(echo "$gpu_util > 90" | bc -l) -eq 1 ]; then
    echo "Pod GPU Utilization Alert!" | mail -s "K8s GPU Alert" admin@example.com
  fi
  sleep 5
done

2. Docker 容器 GPU 监控

# 查看容器 GPU 显存
docker stats --no-stream | grep "gpu-memory"

# 监控容器 GPU 温度
while true; do
  temp=$(docker inspect my-gpu-container | grep "temperature" | awk '{print $2}')
  if [ $(echo "$temp > 85" | bc -l) -eq 1 ]; then
    echo "Container GPU Overheat!" | mail -s "Docker GPU Alert" admin@example.com
  fi
  sleep 30
done

六、安全与权限

1. 限制 GPU 访问权限

# 仅允许特定用户组访问 GPU(NVIDIA)
sudo chmod 660 /dev/nvidia*
sudo chgrp video /dev/nvidia*

2. 防止未授权监控

# 在脚本中添加权限验证
if [ "$(id -u)" != "root" ]; then
  echo "Error: Must run as root" >&2
  exit 1
fi

七、常见问题与解决方案

1. nvidia-smi 未找到

• 解决:安装 NVIDIA 驱动并确保内核支持(dkms 安装)。
• AMD 替代:使用 rocm-smiglxinfo

2. 温度监控不准确

• 校准:检查 BIOS 中的 GPU 温度传感器设置。
• 物理散热:清理机箱风扇灰尘,确保散热良好。

3. 脚本被杀死(OOM)

• 优化:减少采样频率(如 sleep 60 改为 sleep 300)。
• 轻量级工具:使用 vcgencmd(AMD)替代 nvidia-smi


八、工具链推荐

  1. 实时监控:nvidia-smi(NVIDIA)、rocm-smi(AMD)、glxinfo
  2. 长期存储:InfluxDB(时序数据库) + Grafana(可视化)。
  3. 报警:AlertManager(Prometheus 生态) + Slack/Email Webhook。
  4. 容器化监控:Kubernetes Metrics Server + Prometheus。

通过以上指南,你可以用 Shell 脚本实现 GPU 的全面监控,确保高性能计算任务的稳定性与效率!如果有具体需求(如 GPU 负载预测),欢迎进一步讨论。 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

独隅

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

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

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

打赏作者

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

抵扣说明:

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

余额充值