服务器——交互式 NVIDIA GPU 监控工具

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 4090NVIDIA 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'"
相关推荐
Elastic 中国社区官方博客1 小时前
Elasticsearch 下采样方法:最后值采样 vs. 聚合采样
大数据·运维·elasticsearch·搜索引擎·全文检索
大明者省1 小时前
Ubuntu22.04 宝塔面板与 XFCE 远程桌面端口兼容性分析
运维·服务器·数据库·笔记
s_w.h1 小时前
【 linux 】认识make和makefile
linux·运维·bash
代码熬夜敲Q1 小时前
Docker基础
运维·docker·容器
Harm灬小海2 小时前
【云计算学习之路】学习Centos7系统-Linux软件包管理
linux·运维·服务器·学习·云计算·yum·rpm
189228048612 小时前
NY379固态MT29F32T08GSLBHL8-36QA:B
大数据·服务器·人工智能·科技·缓存
谪星·阿凯2 小时前
Linux提权全攻略博客
linux·运维·服务器·网络安全
带带弟弟学爬虫__2 小时前
dyAPP数据采集-个人主页、发布、搜索、评论
服务器·python·算法·flutter·java-ee·django
Donk_672 小时前
什么是虚拟化
linux·运维