Skip to content

nvitop:比 nvidia-smi 更顺手的 GPU 实时监控与进程管理 ​

摘要 ​

nvitop 是一个交互式 NVIDIA GPU 进程查看器(interactive NVIDIA-GPU process viewer),官方定位为 GPU 进程管理的一站式解决方案(one-stop solution for GPU process management)。它直接通过 NVML(NVIDIA Management Library)的 Python 绑定查询设备状态,用 curses 绘制彩色终端界面,功能上可看作 nvidia-smi 的现代化增强替代:实时刷新、历史曲线、进程排序与过滤、按键管理进程、进程树视图、环境变量视图一应俱全。


一、为什么需要 nvitop ​

nvidia-smi 每次只打印一次快照,想观察 GPU 利用率、显存、温度的变化趋势,只能反复敲命令或自己写循环脚本;在多人共用 GPU 的 AI/HPC 集群上,还需要快速回答三个问题:

  1. 卡在哪——每张卡的利用率、显存、温度、功率现在是多少;
  2. 谁占的——每张卡上的进程属于哪个用户、哪个任务;
  3. 怎么处理——找到异常进程后,能否快速结束它。

nvidia-smi 对第 2、3 个问题支持有限。nvitop 把这些能力整合进一个类似 top 的交互界面:

  • 信息丰富且美观:比 nvidia-smi 展示更多信息,彩色方框绘制,一目了然;
  • 监控模式:像 top 一样持续刷新,而不是只打印一次;
  • 历史曲线与条形图:直观看到利用率、显存、温度、功率的走势;
  • 进程排序与过滤:按利用率、显存、CPU、用户等维度排序,快速定位;
  • 按键管理进程:直接在界面上向进程发送信号(如结束异常进程);
  • 进程树视图:展示 GPU 进程及其父进程的层级关系;
  • 环境变量视图与帮助屏:随时查看进程环境与操作说明;
  • 鼠标支持:终端内可直接点击操作。

二、安装 ​

nvitop 依赖 NVML(通过 nvidia-ml-py / pynvml)与跨平台系统信息库 psutil,要求 Python 3.7 及以上,且本机已安装 NVIDIA 驱动(nvidia-smi 可用)。

bash
# pip 安装(推荐)
pip install nvitop

# 升级到最新版
pip install --upgrade nvitop

# 也可用 conda 安装
conda install -c conda-forge nvitop

安装后直接运行:

bash
nvitop

如果命令不在 PATH 中(例如用 pip3 install --user 安装),可用模块方式启动:

bash
python3 -m nvitop

提示:无 GPU 的环境也能启动,此时仅展示 CPU 与内存信息。


三、基本用法 ​

1. 交互式监控(默认) ​

直接运行 nvitop 进入类似 top 的交互界面,持续刷新所有 GPU 与进程信息。上下移动光标、按列排序、展开查看进程细节均可操作。

2. 一次性输出(类似 nvidia-smi) ​

bash
# 只打印一次所有设备状态(更快、资源占用更低)
nvitop -1

# 只显示 GPU 0 和 GPU 1
nvitop -1 -o 0 1

# 只显示 CUDA_VISIBLE_DEVICES 指定的设备
nvitop -1 -ov

# 只显示有计算上下文(compute context)的 GPU 进程
nvitop -1 -c

3. 远程服务器监控(SSH) ​

bash
ssh user@host -t nvitop

用 -t 强制分配伪终端,直接进入交互界面;也可在 SSH 会话内直接运行。


四、常用快捷键 ​

在交互界面内支持以下按键(完整列表按 h 查看帮助屏):

按键作用
q退出并返回终端
h进入帮助屏
a / f / c切换显示模式:auto / full / compact
r强制刷新窗口
/在进程信息中搜索

此外还支持进程排序(按 GPU 利用率、显存、CPU、用户等维度)、过滤、向进程发送信号、进程树视图与环境变量视图等操作。


五、实际场景 ​

场景一:定位"谁占了我的卡" ​

bash
nvitop

在界面中按显存或利用率排序,直接看到每张卡上的进程、所属用户与启动命令,避免逐台机器 nvidia-smi 来回比对。

场景二:集群巡检与告警 ​

监控模式下,温度、功率、利用率随刷新实时变化,配合历史曲线可判断任务是否异常(如长时间满温、利用率抖动)。超过阈值的信息在界面中高亮显示,适合作为日常巡检的第一入口。

场景三:快速处置异常进程 ​

找到异常进程后,无需另开终端 kill,直接在界面中向进程发送信号完成处置,适合多人共用 GPU 时快速释放资源。


六、进阶:Python API 与配套工具 ​

nvitop 同时提供易用的 Python API,可嵌入自定义监控脚本:

python
from nvitop import Device

devices = Device.all()  # 或 Device.cuda.all() 使用 CUDA 编号
for device in devices:
    print(device)
    print(f'  - 风扇转速: {device.fan_speed()}%')
    print(f'  - 温度: {device.temperature()}C')
    print(f'  - GPU 利用率: {device.gpu_utilization()}%')
    print(f'  - 显存: {device.memory_used_human()} / {device.memory_total_human()}')
    print(f'  - 进程数: {len(device.processes())}')

配套的 take_snapshots() 可一次性取回所有设备与进程快照,适合写入巡检脚本或对接告警系统。

随包还附带 nvisel 工具,用于交互式选择并设置 CUDA_VISIBLE_DEVICES,对需要在多卡环境按需分配可见 GPU 的团队很实用。


参考 ​

AI-HPC 智算超算专家 · Contact: openaihpc@gmail.com