3. 常用监控工具:nvidia-smi、gpustat、nvtop 的安装与使用
排查显存问题,你第一件事得知道“谁吃掉了我的显存”。
没有监控工具,就像修车不看仪表盘。我见过太多人,代码跑崩了只会拍大腿,其实看一眼工具就能找到元凶。
这一章,我们聊三个最趁手的工具。
它们分别是:nvidia-smi(官方标配)、gpustat(轻量增强版)、nvtop(交互式大杀器)。
我个人习惯这三样都装上——日常诊断用 gpustat,深挖细节上 nvtop,出问题时 nvidia-smi 兜底。
3.1 nvidia-smi:官方标配,必须掌握
nvidia-smi 是 NVIDIA 驱动自带的命令行工具。
但凡装了 NVIDIA 驱动,它就在那里。不用额外装。
基础用法
直接打命令:
nvidia-smi
你会看到一张表格:GPU 型号、温度、利用率、显存总量、已用、剩余、进程列表。
嗯,信息很全,但乍一看有点密。我来拆开说。
关键字段解读
| 字段 | 含义 | 常见异常值 |
|---|---|---|
| Volatile GPU-Util | GPU 计算核心利用率(%) | 一直接近 0%,可能是 CPU 瓶颈或没在跑 |
| Memory-Usage | 显存使用量 / 总容量 | 接近 100% 且报 OOM,大概率显存泄漏 |
| Processes | 占用 GPU 的进程 ID、类型、显存用量 | PID 显示 No running processes found 但显存占用很高——这是僵尸进程 |
常用参数
我个人最常用这几个组合:
# 每1秒刷新一次,持续监控
nvidia-smi -l 1
# 只输出简洁的GPU摘要,不显示进程
nvidia-smi --query-gpu=index,name,memory.used,memory.total --format=csv
# 显示所有GPU的详细进程信息(包括显存用量)
nvidia-smi pmon -s p -d 1
# 杀掉占用显存但已经无响应的进程(谨慎使用!)
# 先查PID,再用 kill -9
# 例如:kill -9 12345
我踩过的坑
我曾经有一次排查显存泄漏,盯了半天 nvidia-smi 发现显存一直在涨,但进程列表里啥都没有。
后来才意识到——程序异常退出后,显存没被释放。你想想看,这不是代码问题,是资源没清理。
从此我养成了一个习惯:每次跑实验前,先跑一遍 nvidia-smi 确认没有残留僵尸进程。
3.2 gpustat:更快、更友好
gpustat 本质上是对 nvidia-smi 的封装。
它把输出格式整理得更清爽,还加上了进程排序、颜色高亮。
说白了,就是让你一眼看到重点。
安装
pip install gpustat
使用
# 查看当前所有GPU状态
gpustat
# 持续监控,每2秒刷新一次(我最常用的姿势)
gpustat --watch --color
和 nvidia-smi 的区别
| 对比维度 | nvidia-smi | gpustat |
|---|---|---|
| 安装 | 随驱动自带 | 需 pip 安装,依赖 nvidia-smi |
| 输出格式 | 表格、全量信息 | 精简、带颜色、可排序 |
| 更新频率 | 通过 -l 参数 |
通过 --watch 参数 |
| 进程排序 | 默认按 PID 排序 | 按显存用量排序(高亮大用户) |
| 适用场景 | 手边没有 Python 环境时 | 日常快速诊断 |
避坑指南
我曾经在服务器上用 gpustat 发现有一个进程占着 8GB 显存,但记不清是谁启动的了。
gpustat 直接显示了 PID 和用户,我顺藤摸瓜找到了那个人的实验脚本——他的 batch size 设成 512 了。
嗯,这种“小偷”一抓一个准。
alias gpuw='gpustat --watch --color'
以后打 gpuw 就能实时监控,省时间。
3.3 nvtop:交互式,像 top 一样用
nvtop 是 GPU 版的 htop/top。
它让你看到实时变化的曲线、进程列表、显存和计算核心的利用率。
说实话,我第一次用它时,感觉像从黑白电视换成了彩电。
安装
nvtop 不像前两个那么省心。有些发行版需要编译安装:
# Ubuntu / Debian
sudo apt install nvtop
# 从源码编译(推荐,版本最新)
git clone https://github.com/Syllo/nvtop.git
mkdir -p nvtop/build && cd nvtop/build
cmake ..
make
sudo make install
使用
直接运行:
nvtop
界面打开后,你会看到:
上半部分是折线图——显存用量、GPU 利用率、温度、功耗的实时曲线。
下半部分是进程列表——每个进程的 PID、用户、显存占用、GPU 利用率。
常用快捷键
| 键位 | 功能 |
|---|---|
q |
退出 |
h |
帮助 |
k |
杀死选中的进程(慎用!) |
↑/↓ |
切换进程 |
F5 |
刷新 |
m |
按显存用量排序(最常用!) |
我推荐的使用场景
当你怀疑显存泄漏,用 nvidia-smi 要看很久才能发现趋势时,nvtop 的曲线图能让你立刻看到显存是不是在“匀速上涨”。
我记得有一次排查训练过程中的显存分配——每隔几步显存就涨 200MB,曲线斜率很稳。一眼就知道代码里有显存泄漏。
如果是间断性 OOM,也能从曲线上的“尖峰”看出是哪个操作导致的。
3.4 知识结构图谱
下面这张图概括了三个工具的关系和使用逻辑:
3.5 三选一?还是全都要?
我的建议是:都装上。
它们不冲突,场景互补。
- 日常检查:gpustat —watch,看一眼就够
- 深入分析:nvtop,打开实时曲线,盯几分钟
- 应急兜底:nvidia-smi,任何机器都能用,不依赖 Python
你想想看,当你被 OOM 搞得焦头烂额时,一个命令就能看到是哪个进程吃了显存——这种感觉,就像是溺水时抓住了救生圈。
好了,工具装好、会用,下一步才谈得上排查。
记住:不要上来就改代码,先看看监控。