主题
📊 GPU 监控与排故
GPU 不是装上就完事了——持续监控才能提前发现隐患
基础监控:nvidia-smi
bash
# 实时刷新
watch -n 1 nvidia-smi
# 只看关键信息
nvidia-smi --query-gpu=index,name,temperature.gpu,utilization.gpu,memory.used,memory.total,power.draw --format=csv关键指标:
| 指标 | 正常范围 | 警告阈值 |
|---|---|---|
| 温度 | 30-75°C | >85°C 降频,>90°C 危险 |
| GPU 利用率 | 0-100% | 推理时应在 80-100% |
| 显存占用 | — | >95% 快 OOM 了 |
| 功耗 | 闲置 15-30W | 满载不应超 TDP 10% |
| 风扇转速 | 30-60% | >80% 说明散热不行 |
持续监控:nvtop
比 nvidia-smi 直观,类似 htop 的 GPU 版本:
bash
# 安装
sudo apt install nvtop
# 运行
nvtop实时显示:每张卡的利用率、显存、温度、功耗、进程列表。
Prometheus + Grafana(生产级监控)
d Monitoring,Go+NVIDIA管理GPU → prometheus 采集 → Grafana 出图。
bash
# 安装 DCGM
sudo apt install datacenter-gpu-manager
# 启动 nvidia-dcgm-exporter(Docker)
docker run -d --gpus all --rm -p 9400:9400 \
nvcr.io/nvidia/k8s/dcgm-exporter:latest然后在 Prometheus 加 scrape target localhost:9400,Grafana 导入 NVIDIA 官方 Dashboard。
显存泄漏排查
显存只涨不跌,最终 OOM——这是最常见的 GPU 问题。
排查步骤
bash
# 1. 看谁在吃显存
nvidia-smi
# 找到 PID 和显存占用
# 2. 看这个进程的详细显存
nvidia-smi --query-compute-apps=pid,used_memory --format=csv
# 3. Python 代码里检查
import torch
print(f"已分配: {torch.cuda.memory_allocated()/1024**3:.1f}GB")
print(f"缓存: {torch.cuda.memory_reserved()/1024**3:.1f}GB")常见原因
- 模型没卸载:多轮推理后旧模型还在显存里,加
del model; torch.cuda.empty_cache() - 梯度没释放:训练时
loss.backward()后忘记optimizer.zero_grad() - batch_size 太大:逐步减小找到不 OOM 的值
- torch 缓存不释放:
torch.cuda.empty_cache()只清缓存不清已分配显存
温度异常排查
显卡温度 >85°C
- 清灰——显卡风扇和散热鳍片积灰是头号元凶
- 检查机箱风道——前进后出,显卡区有没有冷风到达
- 换硅脂——过保的卡硅脂干了导热变差
- 降功耗——
nvidia-smi -pl 300把功耗墙降到 300W
热点温度 vs GPU 温度
热点温度(Hot Spot)比 GPU 核心温度高 10-15°C 是正常的。如果差值 >25°C,说明硅脂不行了或散热器贴合不良。
常见报错速查
| 报错 | 原因 | 解法 |
|---|---|---|
| CUDA out of memory | 显存不足 | 减 batch_size / 量化 / 换大显存卡 |
| CUDA driver version insufficient | 驱动太老 | 升级到 535+ |
| device-side assert triggered | 索引越界或数据类型错 | 检查模型输入 shape 和 dtype |
| illegal memory access | 显存地址错误 | 大概率驱动或 CUDA 版本不匹配 |
| NCCL timeout | 多卡通信超时 | 检查 NVLink/PCIe/网络 |
🎯 本章要点
nvidia-smi是基本监控,nvtop更直观,生产环境用 Prometheus + Grafana- 核心四指标:温度(<85°C)、利用率(>80%)、显存(<95%)、功耗(不超TDP)
- 显存只涨不跌先查进程→再查代码里
empty_cache和zero_grad - 高温先清灰→查风道→降功耗,热点温度超 GPU 温度 25°C 该换硅脂
加载练习题中...