nvitop完全指南:一站式GPU资源监控与管理
nvitop是一款功能强大的交互式NVIDIA GPU进程查看器,为GPU进程管理提供了一站式解决方案。它不仅能够实时监控GPU设备状态,还提供了丰富的进程管理功能,让GPU资源管理变得更加高效便捷。
核心特性
nvitop拥有多项卓越特性,使其在众多GPU监控工具中脱颖而出:
- 信息丰富且美观的输出:相比
nvidia-smi显示更多信息,并使用彩色精美框线绘制 - 监控模式:可作为资源监控器持续运行,而非仅一次性打印结果
- 条形图和历史图表
- 进程排序功能
- 进程过滤机制
- 一键向进程发送信号
- GPU进程及其父进程的树状视图
- 环境变量查看界面
- 帮助屏幕
- 鼠标支持
- 交互式体验:在监控模式下对用户输入(键盘和/或鼠标)做出响应
- 高效性能:
- 直接使用NVML Python绑定查询设备状态,而非解析
nvidia-smi输出 - 支持稀疏查询并使用TTLCache缓存结果
- 使用
curses库而非带ANSI转义码的print来显示信息 - 使用多线程异步收集信息,更快响应用户输入
- 直接使用NVML Python绑定查询设备状态,而非解析
- 跨平台支持:在Linux和Windows系统上均可运行
- 易于集成:可轻松集成到其他应用中,功能远超监控范畴
系统要求
使用nvitop需要满足以下基本要求:
- Python 3.8+
- NVIDIA Management Library (NVML)
- nvidia-ml-py
- psutil
- curses(附带
libncursesw)
安装方法
快速安装方式
推荐在隔离的虚拟环境中安装nvitop,可通过以下方式快速安装并运行:
uvx nvitop
# 或
pipx run nvitop
您还可以将此命令设置为shell启动文件中的别名:
# Bash用户
echo 'alias nvitop="uvx nvitop"' >> ~/.bashrc
# Zsh用户
echo 'alias nvitop="uvx nvitop"' >> ~/.zshrc
# Fish用户
mkdir -p ~/.config/fish
echo 'alias nvitop="uvx nvitop"' >> ~/.config/fish/config.fish
# PowerShell用户
New-Item -Path (Split-Path -Parent -Path $PROFILE.CurrentUserAllHosts) -ItemType Directory -Force
'Function nvitop { uvx nvitop @Args }' >> $PROFILE.CurrentUserAllHosts
标准安装方式
从PyPI安装:
pip3 install --upgrade nvitop
从conda-forge安装:
conda install -c conda-forge nvitop
安装最新开发版本:
```bash
pip3 install --upgrade pip setuptools
pip3 install git+https://gitcode.com/gh_mirrors/nv/nvitop.git#egg=nvitop
或者克隆仓库并手动安装:
git clone --depth=1 https://gitcode.com/gh_mirrors/nv/nvitop.git
cd nvitop
pip3 install .
使用指南
设备与进程状态查询
查询设备与进程状态,输出类似于nvidia-smi,但信息更丰富且彩色显示:
# 查询所有设备状态
nvitop -1
# 指定查询设备(通过整数索引)
nvitop -1 -o 0 1 # 仅显示<GPU 0>和<GPU 1>
# 仅显示`CUDA_VISIBLE_DEVICES`中的设备
nvitop -1 -ov
# 仅显示具有计算上下文的GPU进程
nvitop -1 -c
当使用-1开关时,结果将仅显示一次,这种方式速度更快且资源占用更低。
资源监控模式
作为资源监控器运行:
# 监控模式(省略显示模式时,将使用`NVITOP_MONITOR_MODE`)
nvitop
# 根据终端尺寸自动配置显示模式
nvitop -m auto
# 强制显示为`full`模式
nvitop -m full
# 强制显示为`compact`模式
nvitop -m compact
# 仅使用ASCII字符
nvitop -U
# 浅色终端适配
nvitop --light
# 彩色频谱式条形图
nvitop --colorful
命令行选项详解
nvitop支持丰富的命令行选项,通过nvitop --help可查看完整选项列表:
usage: nvitop [--help] [--version] [--once | --monitor [{auto,full,compact}]]
[--interval SEC] [--ascii] [--colorful] [--force-color] [--light]
[--gpu-util-thresh th1 th2] [--mem-util-thresh th1 th2]
[--only INDEX [INDEX ...]] [--only-visible]
[--compute] [--only-compute] [--graphics] [--only-graphics]
[--user [USERNAME ...]] [--pid PID [PID ...]]
交互式NVIDIA GPU进程查看器。
选项:
--help, -h 显示此帮助信息并退出。
--version, -V 显示nvitop版本号并退出。
--once, -1 仅报告一次查询数据。
--monitor [{auto,full,compact}], -m [{auto,full,compact}]
作为资源监控器运行。持续报告查询数据并处理用户输入。
如果省略参数,将使用`NVITOP_MONITOR_MODE`的值。
--interval SEC 进程状态更新间隔(秒)。(默认:2)
--ascii, --no-unicode, -U
仅使用ASCII字符,适用于不支持Unicode的终端。
配色选项:
--colorful 使用渐变颜色获得频谱式条形图。此选项仅在终端支持256色时可用。
--force-color 即使`stdout`不是TTY终端也强制着色。
--light 在监控模式下为浅色主题终端调整视觉效果。
--gpu-util-thresh th1 th2
GPU利用率的阈值,用于确定负载强度。
着色规则:轻载 < th1 % <= 中等 < th2 % <= 重载。
--mem-util-thresh th1 th2
GPU内存百分比的阈值,用于确定负载强度。
着色规则:轻载 < th1 % <= 中等 < th2 % <= 重载。
设备过滤:
--only INDEX [INDEX ...], -o INDEX [INDEX ...]
仅显示指定设备,抑制选项`--only-visible`。
--only-visible, -ov 仅显示`CUDA_VISIBLE_DEVICES`环境变量中的设备。
进程过滤:
--compute, -c 仅显示具有计算上下文的GPU进程。(类型:'C'或'C+G')
--only-compute, -C 仅显示完全具有计算上下文的GPU进程。(类型:仅'C')
--graphics, -g 仅显示具有图形上下文的GPU进程。(类型:'G'或'C+G')
--only-graphics, -G 仅显示完全具有图形上下文的GPU进程。(类型:仅'G')
--user [USERNAME ...], -u [USERNAME ...]
仅显示指定用户的进程(无参数时使用`$USER`)。
--pid PID [PID ...], -p PID [PID ...]
仅显示指定PID的进程。
环境变量配置
nvitop支持通过以下环境变量来配置监控模式:
| 环境变量名称 | 描述 | 有效值 | 默认值 |
|---|---|---|---|
NVITOP_MONITOR_MODE | 默认显示模式 | auto / full / compactplain / colorfuldark / light | auto,plain,dark |
NVITOP_GPU_UTILIZATION_THRESHOLDS | GPU利用率阈值 | 10,75 , 1,99等 | 10,75 |
NVITOP_MEMORY_UTILIZATION_THRESHOLDS | GPU内存百分比阈值 | 10,80 , 1,99等 | 10,80 |
使用示例:
# 设置完整监控模式配合浅色终端调整
export NVITOP_MONITOR_MODE="full,light"
nvitop
监控模式快捷键
在监控模式下,nvitop提供了丰富的键盘快捷键:
| 快捷键 | 功能 |
|---|---|
q | 退出并返回终端 |
h / ? | 转到帮助屏幕 |
a / f / c | 将显示模式更改为auto / full / compact |
r / <C-r> / <F5> | 强制刷新窗口 |
<Up> / <Down> | 选择并高亮显示进程 |
<Left> / <Right> | 滚动进程的主机信息 |
<Home> | 选择第一个进程 |
<End> | 选择最后一个进程 |
<Space> | 标记/取消标记当前进程 |
<Esc> | 清除进程选择 |
<C-c> | 向选定进程发送signal.SIGINT(中断) |
T | 向选定进程发送signal.SIGTERM(终止) |
K | 向选定进程发送signal.SIGKILL(杀死) |
e | 显示进程环境 |
t | 切换树状视图屏幕 |
<Enter> | 显示进程指标 |
, / . | 选择排序列 |
/ | 反转排序顺序 |
特殊使用场景
Docker用户
构建并运行带有nvidia-container-toolkit的Docker镜像:
docker run -it --rm --runtime=nvidia --gpus=all --pid=host ghcr.io/xuehaipan/nvitop:latest
SSH用户
在SSH会话中直接运行nvitop:
ssh user@host -t nvitop
ssh user@host -t '~/.local/bin/nvitop'
项目结构
nvitop项目采用模块化设计,主要包含以下核心模块:
- nvitop/api:提供设备管理、进程监控、主机信息等底层API接口
- nvitop/tui:终端用户界面实现,包含屏幕管理、库函数等
- nvitop/callbacks:为机器学习框架提供的回调函数(已弃用)
总结
nvitop作为一款功能全面的GPU资源监控工具,不仅提供了实时设备状态监控,还具备强大的进程管理能力。通过丰富的命令行选项和环境变量配置,用户可以根据自己的需求灵活调整监控行为。无论是开发人员还是系统管理员,都能从nvitop的高效监控和便捷操作中受益。
掌握nvitop的使用方法,将显著提升GPU资源管理的效率,为深度学习训练、科学计算等GPU密集型任务提供有力支持。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



