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 的现代化增强替代:实时刷新、历史曲线、进程排序与过滤、按键管理进程、进程树视图、环境变量视图一应俱全。
- 项目主页:https://github.com/XuehaiPan/nvitop(Apache-2.0 开源)
- 文档:https://nvitop.readthedocs.io
- PyPI 最新版本:1.6.1
一、为什么需要 nvitop
nvidia-smi 每次只打印一次快照,想观察 GPU 利用率、显存、温度的变化趋势,只能反复敲命令或自己写循环脚本;在多人共用 GPU 的 AI/HPC 集群上,还需要快速回答三个问题:
- 卡在哪——每张卡的利用率、显存、温度、功率现在是多少;
- 谁占的——每张卡上的进程属于哪个用户、哪个任务;
- 怎么处理——找到异常进程后,能否快速结束它。
nvidia-smi 对第 2、3 个问题支持有限。nvitop 把这些能力整合进一个类似 top 的交互界面:
- 信息丰富且美观:比
nvidia-smi展示更多信息,彩色方框绘制,一目了然; - 监控模式:像
top一样持续刷新,而不是只打印一次; - 历史曲线与条形图:直观看到利用率、显存、温度、功率的走势;
- 进程排序与过滤:按利用率、显存、CPU、用户等维度排序,快速定位;
- 按键管理进程:直接在界面上向进程发送信号(如结束异常进程);
- 进程树视图:展示 GPU 进程及其父进程的层级关系;
- 环境变量视图与帮助屏:随时查看进程环境与操作说明;
- 鼠标支持:终端内可直接点击操作。
二、安装
nvitop 依赖 NVML(通过 nvidia-ml-py / pynvml)与跨平台系统信息库 psutil,要求 Python 3.7 及以上,且本机已安装 NVIDIA 驱动(nvidia-smi 可用)。
# pip 安装(推荐)
pip install nvitop
# 升级到最新版
pip install --upgrade nvitop
# 也可用 conda 安装
conda install -c conda-forge nvitop安装后直接运行:
nvitop如果命令不在 PATH 中(例如用 pip3 install --user 安装),可用模块方式启动:
python3 -m nvitop提示:无 GPU 的环境也能启动,此时仅展示 CPU 与内存信息。
三、基本用法
1. 交互式监控(默认)
直接运行 nvitop 进入类似 top 的交互界面,持续刷新所有 GPU 与进程信息。上下移动光标、按列排序、展开查看进程细节均可操作。
2. 一次性输出(类似 nvidia-smi)
# 只打印一次所有设备状态(更快、资源占用更低)
nvitop -1
# 只显示 GPU 0 和 GPU 1
nvitop -1 -o 0 1
# 只显示 CUDA_VISIBLE_DEVICES 指定的设备
nvitop -1 -ov
# 只显示有计算上下文(compute context)的 GPU 进程
nvitop -1 -c3. 远程服务器监控(SSH)
ssh user@host -t nvitop用 -t 强制分配伪终端,直接进入交互界面;也可在 SSH 会话内直接运行。
四、常用快捷键
在交互界面内支持以下按键(完整列表按 h 查看帮助屏):
| 按键 | 作用 |
|---|---|
q | 退出并返回终端 |
h | 进入帮助屏 |
a / f / c | 切换显示模式:auto / full / compact |
r | 强制刷新窗口 |
/ | 在进程信息中搜索 |
此外还支持进程排序(按 GPU 利用率、显存、CPU、用户等维度)、过滤、向进程发送信号、进程树视图与环境变量视图等操作。
五、实际场景
场景一:定位"谁占了我的卡"
nvitop在界面中按显存或利用率排序,直接看到每张卡上的进程、所属用户与启动命令,避免逐台机器 nvidia-smi 来回比对。
场景二:集群巡检与告警
监控模式下,温度、功率、利用率随刷新实时变化,配合历史曲线可判断任务是否异常(如长时间满温、利用率抖动)。超过阈值的信息在界面中高亮显示,适合作为日常巡检的第一入口。
场景三:快速处置异常进程
找到异常进程后,无需另开终端 kill,直接在界面中向进程发送信号完成处置,适合多人共用 GPU 时快速释放资源。
六、进阶:Python API 与配套工具
nvitop 同时提供易用的 Python API,可嵌入自定义监控脚本:
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 的团队很实用。