nvitop是一款专为 NVIDIA GPU 打造的交互式监控与管理工具 ,被称为nvidia-smi的「现代化平替」,也是深度学习/高性能计算场景下的神器。它底层调用 NVIDIA 官方的 NVML 库,数据来源和nvidia-smi完全一致,但在界面交互、信息丰富度和易用性上实现了全面升级,尤其适合你这种多卡训练的服务器场景。
一、为什么选 nvitop?(核心优势)
和传统的 nvidia-smi 比,它的提升是全方位的:
| 维度 | nvitop |
nvidia-smi |
|---|---|---|
| 界面体验 | 类 htop 的交互式终端界面,彩色显示、动态刷新、支持排序/筛选 |
静态文本输出,每次都要手动敲命令刷新 |
| 信息丰富度 | 包含进程级 CPU/内存占用、%SM/%GMBW 等关键性能指标,还能显示系统整体负载 |
仅显示基础 GPU 利用率、显存和进程 ID |
| 多卡支持 | 清晰区分多 GPU 进程,高亮不同用户任务,一键切换查看指定 GPU | 多卡信息挤在一起,进程归属不够直观 |
| 实用性 | 内置进程树视图、一键杀进程、任务筛选,还能直接判断模型是否「真的在跑」 | 功能单一,无法直接管理进程,需配合 kill 命令 |
其中最核心的优势,就是它新增的两个关键指标,能帮你精准判断任务状态:
%SM(Streaming Multiprocessor 利用率) :GPU 计算核心的繁忙程度,这个指标比单纯的「GPU 利用率」更精准------显存占满但%SM长期为 0,说明任务大概率卡住了(比如数据加载死锁、进程挂起)。%GMBW(显存带宽利用率) :GPU 显存的读写繁忙程度,能判断模型是不是被「数据 I/O 瓶颈」卡住了(比如%SM低但%GMBW很高,说明数据加载跟不上计算速度)。
二、安装方法
nvitop 基于 Python 开发,支持 Linux/Windows/macOS,安装非常简单:
2.1. 推荐:pip 安装(通用)
bash
# 基础安装(Python 3.7+)
pip install nvitop
# 升级到最新版
pip install --upgrade nvitop
2.2. conda 安装(如果你习惯用 conda 环境)
bash
conda install -c conda-forge nvitop
2.3. 验证安装
安装完成后,直接在终端输入:
bash
nvitop
如果能进入交互式界面,说明安装成功。如果提示 command not found,可以用 python -m nvitop 代替运行。
注意:
nvitop依赖 NVIDIA 驱动,只要你的服务器上nvidia-smi能正常运行,nvitop就可以用。
三、nvitop 界面通用解读
nvitop 的界面采用「全局概览 → GPU硬件状态 → 进程详情」三层结构,所有信息按模块划分,即使是第一次用也能快速看懂。下面按从上到下的顺序,拆解每个部分的含义:
3.1. 顶部:系统全局概览区(System Overview)
这部分位于界面最上方,和GPU无关,是服务器整体的健康状态,帮你快速判断系统有没有整体压力:
| 字段 | 含义说明 |
|---|---|
| CPU | 服务器整体CPU使用率(带彩色进度条),显示当前百分比,反映所有进程对CPU的总负载 |
| MEM | 服务器物理内存(RAM)的使用率,通常会显示「已用内存/总内存」+ 百分比,比如 32GiB / 128GiB |
| SWP | 交换分区(Swap)的使用率,当物理内存不足时系统会使用Swap;如果这里持续很高,说明内存压力过大 |
| UPTIME | 系统从开机到现在的运行时间,比如 15 days,能判断服务器是否长时间未重启 |
| Load Average | 系统1/5/15分钟的平均负载,反映CPU队列的繁忙程度;一般负载值不超过CPU核心数为健康状态 |
3.2. 中部:GPU硬件监控区(GPU Cards)
这部分是每个NVIDIA GPU的实时硬件状态面板,默认每个GPU一行,所有字段都是该GPU的整体指标:
| 字段 | 含义说明 |
|---|---|
| GPU | GPU的物理编号(0,1,2...),对应PCIe设备的物理顺序,不同颜色会区分状态(绿色=正常,红色=高负载/高温) |
| Name | GPU的具体型号,比如 NVIDIA GeForce RTX 4090、NVIDIA A100 80GB |
| Persistence-M | 持久模式(Persistence Mode),On/Off;开启后驱动会常驻内存,减少任务启动延迟 |
| Fan | 风扇转速百分比(0-100%);无风扇的服务器GPU(如A100)会显示N/A |
| Temp | GPU核心温度(℃),比如 65℃;消费卡安全阈值一般在85℃以下,专业卡可到90℃ |
| Perf | 性能状态(Performance State),从P0(最高性能)到P12(最低功耗);负载高时会停留在P0-P2 |
| Pwr:Usage/Cap | 当前功耗/最大设计功耗(单位W),比如 280W / 450W;如果长期接近最大值,说明任务被功耗墙限制 |
| Memory-Usage | 显存使用情况,格式为「已用显存/总显存」(单位MiB/GiB),比如 70GiB / 80GiB,能快速判断显存是否被占满 |
| GPU-Util | GPU整体核心利用率(%),是该GPU所有进程的计算负载总和(比进程级指标更粗略) |
| Compute M. | 计算模式(Compute Mode),默认是Default;还有Exclusive(独占模式)、Prohibited(禁止计算)等,影响多进程访问权限 |
| MIG M. | MIG(多实例GPU)模式状态,专业卡(如A100)支持;显示Enabled/Disabled,表示是否开启了虚拟GPU划分 |
3.3. 下部:GPU进程列表区(GPU Processes)
这是nvitop最核心的部分,列出了所有正在占用GPU资源的进程详情,每个进程一行,字段含义如下:
| 字段 | 含义说明 |
|---|---|
| GPU | 该进程占用的GPU编号,和中部的GPU编号一一对应 |
| PID | 进程ID(Process ID),Linux系统中进程的唯一标识;用来kill进程或调试任务 |
| 标记(G/C) | PID前的字母标记: G=Graphics进程(图形服务,如Xorg,占显存极少,几乎不影响计算) C=Compute进程(计算任务,如模型训练/推理,是你需要关注的进程) |
| USER | 进程所属的系统用户名,比如root、你的用户名,用来区分是谁跑的任务 |
| GPU-MEM | 该进程占用的显存大小(单位MiB/GiB),比如 10GiB;能直观看到哪个进程占了多少显存 |
| %SM | Streaming Multiprocessor利用率 ,即GPU计算核心的实际繁忙程度(%)。 ✅ 关键判断指标: • 70%-100%:任务在正常计算 • 0%-30%:可能在数据加载/初始化,或任务卡住(如死锁、数据管道阻塞) |
| %GMBW | GPU显存带宽利用率 (%),反映显存的读写繁忙程度: • 高%SM + 高%GMBW:正常的计算密集型任务(如模型训练) • 低%SM + 高%GMBW:数据瓶颈(CPU预处理太慢,GPU在等数据) • 低%SM + 低%GMBW:任务大概率卡住,显存被占但未干活 |
| %CPU | 该进程占用的服务器CPU核心数百分比,比如100%表示占了1个核心,200%表示占了2个核心 |
| %MEM | 该进程占用的服务器物理内存(RAM)百分比,反映任务对系统内存的消耗 |
| TIME | 进程累计运行时间,格式为「时:分:秒」或「X days Xh」,能快速了解任务已运行时长 |
| COMMAND | 进程的启动命令,比如python train.py,能直接定位是哪个任务/脚本在占用GPU |
四、常用快捷键与操作
nvitop 支持类 htop 的快捷键操作,上手非常快,常用操作如下:
| 快捷键 | 功能 |
|---|---|
q |
退出 nvitop |
↑/↓ 或 鼠标 |
滚动进程列表 |
1-9 |
只显示对应编号的 GPU 进程(比如按 2 只看 GPU2) |
t |
切换「进程列表/进程树」视图(看进程的父子关系,方便定位任务) |
k |
杀死选中的进程(需要对应权限,比如你自己的进程直接就能杀) |
/ |
搜索进程(比如输入 python 过滤所有 Python 进程) |
F5 |
强制刷新界面 |
h |
显示帮助菜单 |
s |
切换排序方式(比如按显存、%SM 排序) |
五、实用命令行参数
除了直接运行 nvitop,还可以用参数自定义监控模式,比如:
bash
# 1. 自定义刷新间隔(默认 1 秒,服务器上建议设为 2 秒,减少资源占用)
nvitop -i 2
# 2. 只监控指定 GPU(比如只看 1、2 号卡)
nvitop -g 1,2
# 3. 非交互式模式(适合写脚本或批量监控,不进入交互界面)
nvitop -s
# 4. 显示帮助
nvitop -h
六、高级用法与实用技巧
1. 如何判断任务是否「有效运行」?
- ✅ 正常训练:
%SM持续在 70%-100%,%GMBW有一定负载,显存缓慢增长或稳定。 - ❌ 任务卡住:显存占满但
%SM长期为 0,%GMBW也很低,说明进程挂起了,可以直接用k键杀掉重启。
2. 多卡训练负载均衡检查
多卡训练时,看每张卡的 %SM、%GMBW 是否接近,就能判断负载是否均衡:
- 均衡:各卡的
%SM/%GMBW差值在 10% 以内,显存占用也差不多。 - 不均衡:某张卡
%SM很低但显存很高,说明数据分配有问题,或者分布式训练配置错了。
3. 脚本集成(监控任务状态)
如果需要写脚本监控 GPU 状态,可以用非交互式模式输出信息,比如:
bash
# 每 5 秒输出一次 GPU 利用率和显存占用
watch -n 5 "nvitop -s | grep -E 'GPU|python'"