保姆级教程:用nvidia-smi命令行打造你的GPU资源监控看板(含自动记录与告警思路)

张开发
2026/4/21 16:29:33 15 分钟阅读

分享文章

保姆级教程:用nvidia-smi命令行打造你的GPU资源监控看板(含自动记录与告警思路)
保姆级教程用nvidia-smi命令行打造你的GPU资源监控看板含自动记录与告警思路在深度学习训练、科学计算或图形渲染场景中GPU资源的高效监控直接影响任务稳定性和排错效率。本文将手把手教你如何将零散的nvidia-smi命令组合成自动化监控方案实现从基础状态查看到智能告警的全流程覆盖。1. 核心监控指标与基础命令理解GPU监控首先要明确关键性能指标。通过nvidia-smi的--query-gpu参数我们可以获取以下核心数据维度计算负载utilization.gpu显示GPU核心利用率超过80%可能预示计算瓶颈显存管理memory.used与memory.total的比值反映显存压力持续高于90%需警惕泄露温度与功耗temperature.gpu和power.draw直接影响硬件寿命建议设置阈值告警进程级视图结合pmon命令可定位具体进程的资源占用情况基础监控命令组合示例# 实时刷新监控每秒1次 watch -n 1 nvidia-smi # 获取精简版关键指标 nvidia-smi --query-gpuindex,name,utilization.gpu,memory.used,memory.total,temperature.gpu --formatcsv2. 自动化数据记录方案长期监控需要将瞬时数据转化为时间序列记录。以下方案可实现分钟级数据归档2.1 CSV日志记录nvidia-smi -l 60 --formatcsv --filenamegpu_metrics.csv \ --query-gputimestamp,name,utilization.gpu,memory.used,memory.total,temperature.gpu,power.draw参数说明-l 60每60秒记录一次--formatcsv输出为CSV格式--filename指定存储路径--query-gpu自定义采集字段2.2 日志轮转策略为避免单个文件过大可通过crontab定时任务分割日志# 每天0点新建日志文件 0 0 * * * mv /var/log/gpu_metrics.csv /var/log/gpu_metrics_$(date \%Y\%m\%d).csv3. 异常检测与告警机制3.1 温度异常检测脚本#!/bin/bash THRESHOLD85 TEMP$(nvidia-smi --query-gputemperature.gpu --formatcsv,noheader,nounits) if [ $TEMP -gt $THRESHOLD ]; then echo [CRITICAL] GPU temperature $TEMP°C exceeds threshold | mail -s GPU过热告警 adminexample.com fi3.2 显存泄漏检测# 持续监控显存使用增长率 nvidia-smi -l 10 --query-gpumemory.used --formatcsv,noheader,nounits | awk { if(NR1 $1-prev 500) system(echo \显存异常增长\ /var/log/gpu_alert.log) prev$1 }4. 高级监控方案集成4.1 Prometheus监控集成通过nvidia_gpu_exporter将数据接入Prometheus# 启动exporter docker run -d --runtimenvidia -p 9835:9835 nvidia/gpu-monitoring-tools # Prometheus配置示例 scrape_configs: - job_name: nvidia_gpu static_configs: - targets: [exporter-host:9835]4.2 Grafana看板配置推荐使用以下面板指标计算负载nvidia_smi_utilization_gpu显存压力nvidia_smi_memory_used / nvidia_smi_memory_total * 100温度趋势nvidia_smi_temperature_gpu实际部署中发现当GPU利用率持续高于95%且温度超过80°C时建议检查散热系统或降低batch size5. 进程级精细监控pmon命令提供进程维度监控适合多用户环境# 监控进程级资源占用每秒刷新 nvidia-smi pmon -s um -d 1 -o DT输出字段说明GPU使用的GPU编号PID进程IDType进程类型C计算G图形SM流处理器利用率Mem显存使用量(MB)FB帧缓冲内存使用结合ps命令可定位具体应用nvidia-smi pmon -s um -d 5 | awk $2 ! - {print $2} | xargs -I {} ps -p {} -o user,cmd6. 实战案例自动隔离故障GPU当检测到持续异常时可通过驱动接口隔离问题设备#!/bin/bash FAILED_GPU$(nvidia-smi --query-gpuindex,compute_mode --formatcsv | awk -F, $2 ~ /PROHIBITED/ {print $1}) if [ -n $FAILED_GPU ]; then echo 0 /sys/class/drm/card$FAILED_GPU/device/enable echo 已隔离GPU $FAILED_GPU /var/log/gpu_maintenance.log fi对于需要7×24小时稳定的训练任务建议在代码中加入自动恢复机制import subprocess import time def check_gpu_health(): try: output subprocess.check_output([nvidia-smi, -L]) return len(output.decode().splitlines()) except: return 0 while True: if check_gpu_health() expected_gpu_count: send_alert(GPU数量异常) time.sleep(300) # 等待5分钟后再检查

更多文章