在深度学习和高性能计算领域,NVIDIA GPU 已成为不可或缺的硬件加速器。然而,如何实时监控 GPU 的状态,了解每个进程的资源占用情况,常常让开发者感到困扰。虽然 nvidia-smi 功能强大,但其输出信息略显单调,缺乏直观性。今天,我要向大家介绍一款开源神器——nvitop,它将彻底改变你监控 NVIDIA GPU 的方式。
一、项目介绍:不止是监控,更是管理
nvitop 是一个交互式的 NVIDIA GPU 进程查看器,它不仅是一个简单的监控工具,更是一个 GPU 进程管理的一站式解决方案。它拥有丰富多彩且信息量十足的界面,可以实时更新设备和进程的状态。作为资源监控器,nvitop 提供了树状视图、环境变量查看、进程过滤、进程指标监控等多种功能。此外,它还提供了一个 CUDA 设备选择工具 nvisel,以及方便的 API,允许开发者构建自己的监控工具。
nvitop 的监控模式。
(TERM: GNOME Terminal / OS: Ubuntu 16.04 LTS (over SSH) / Locale: en_US.UTF-8)
nvitop 的目标是提供比 nvidia-smi 更丰富、更直观的 GPU 监控体验。它不仅显示了 GPU 的基本信息,还提供了进程级别的详细资源占用情况,让开发者可以更清晰地了解 GPU 的运行状态。
二、基本功能:强大且易用
nvitop 的功能非常丰富,主要可以分为以下几个方面:
1. 设备和进程状态查询
nvitop 可以像 nvidia-smi 一样查询 GPU 设备和进程的状态,但输出信息更加丰富和美观。你可以通过简单的命令查看所有 GPU 的状态,或者指定查询特定的 GPU。
# 查询所有设备的状态
$ nvitop -1
# 指定查询设备 (按整数索引)
$ nvitop -1 -o 0 1
# 仅显示 `CUDA_VISIBLE_DEVICES` 中的设备
$ nvitop -1 -ov
# 仅显示具有计算上下文的 GPU 进程
$ nvitop -1 -c
当 -1 开关打开时,结果将只显示一次,这可以提高查询速度并降低资源消耗。
2. 资源监控器
nvitop 可以作为资源监控器运行,实时显示 GPU 的状态。它提供了多种显示模式,包括 auto、full 和 compact,你可以根据自己的需求选择合适的模式。
# 监控模式
$ nvitop
# 根据终端大小自动配置显示模式
$ nvitop -m auto
# 任意显示为 `full` 模式
$ nvitop -m full
# 任意显示为 `compact` 模式
$ nvitop -m compact
# 仅使用 ASCII 字符
$ nvitop -U
# 对于浅色终端
$ nvitop --light
# 对于类似光谱的条形图
$ nvitop --colorful
在监控模式下,你可以使用快捷键与 nvitop 进行交互,例如:
- Ctrl-c / T / K:中断/终止/杀死进程。
- Enter / Return:进入进程指标屏幕,查看进程的实时图表。
- h:显示帮助信息。
- q:退出监控模式。
进程过滤和更丰富多彩的界面。
与 nvidia-smi 的比较。
3. 其他功能
除了基本的监控功能,nvitop 还提供了以下特性:
- 信息丰富且美观的输出:比 nvidia-smi 显示更多信息,并使用彩色美观的框图。
- 交互式:在监控模式下响应用户输入。
- 高效:直接使用 NVML Python 绑定查询设备状态,而不是解析 nvidia-smi 的输出。
- 可移植:可在 Linux 和 Windows 上运行。
- 可集成:易于集成到其他应用程序中。
nvitop 支持 Windows!
(SHELL: PowerShell / TERM: Windows Terminal / OS: Windows 10 / Locale: en-US)
三、部署方式:简单快捷
nvitop 的安装非常简单,你可以通过 pip 或 conda 进行安装。
1. 使用 pip 安装
pip3 install --upgrade nvitop
2. 使用 conda 安装
conda install -c conda-forge nvitop
3. 从 GitHub 安装最新版本
pip3 install --upgrade pip setuptools
pip3 install git+https://github.com/XuehaiPan/nvitop.git#egg=nvitop
4. Docker 用户
如果你使用 Docker,可以使用以下命令构建和运行 Docker 镜像:
git clone --depth=1 https://github.com/XuehaiPan/nvitop.git && cd nvitop
docker build --tag nvitop:latest .
docker run -it --rm --runtime=nvidia --gpus=all --pid=host nvitop:latest
四、使用方式:灵活多样
nvitop 的使用方式非常灵活,你可以根据自己的需求选择合适的命令和选项。
1. 命令行选项
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 进程查看器。
options:
--help, -h 显示此帮助信息并退出。
--version, -V 显示 nvitop 的版本号并退出。
--once, -1 仅报告一次查询数据。
--monitor [{auto,full,compact}], -m [{auto,full,compact}]
作为资源监控器运行。持续报告查询数据并处理用户输入。
如果省略参数,将使用 `NVITOP_MONITOR_MODE` 中的值。
(默认回退模式:auto)
--interval SEC 进程状态更新间隔,以秒为单位。(默认:2)
--ascii, --no-unicode, -U
仅使用 ASCII 字符,这对于不支持 Unicode 的终端很有用。
coloring:
--colorful 使用渐变颜色以获得类似光谱的条形图。此选项仅在终端支持 256 色时可用。您可能需要设置环境变量 `TERM="xterm-256color"`。请注意,终端多路复用器 (例如 `tmux`) 可能会覆盖 `TREM` 变量。
--force-color 即使 `stdout` 不是 TTY 终端也强制着色。
--light 在监控模式下调整浅色主题终端的视觉效果。
为方便起见,在浅色终端上设置变量 `NVITOP_MONITOR_MODE="light"`。
--gpu-util-thresh th1 th2
GPU 利用率的阈值,用于确定负载强度。
着色规则:light < th1 % <= moderate < th2 % <= heavy。
( 1 <= th1 < th2 <= 99,默认值:10 75 )
--mem-util-thresh th1 th2
GPU 内存百分比的阈值,用于确定负载强度。
着色规则:light < th1 % <= moderate < th2 % <= heavy。
( 1 <= th1 < th2 <= 99,默认值:10 80 )
device filtering:
--only INDEX [INDEX ...], -o INDEX [INDEX ...]
仅显示指定的设备,抑制选项 `--only-visible`。
--only-visible, -ov 仅显示 `CUDA_VISIBLE_DEVICES` 环境变量中的设备。
process filtering:
--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 的进程。
2. 环境变量
nvitop 可以接受以下环境变量进行监控模式:
名称 | 描述 | 有效值 | 默认值 |
NVITOP_MONITOR_MODE | 默认显示模式 (逗号分隔的字符串) | auto / full / compact | 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 |
LOGLEVEL | 日志消息的日志级别 | DEBUG , INFO, WARNING, ... | WARNING |
3. 快捷键
在监控模式下,你可以使用以下快捷键与 nvitop 进行交互:
Key | Binding |
q | 退出并返回终端。 |
h / ? | 转到帮助屏幕。 |
a / f / c | 将显示模式更改为 *auto* / *full* / *compact*。 |
r / | 强制刷新窗口。 |
选择并突出显示进程。 | |
滚动进程的主机信息。 | |
选择第一个进程。 | |
选择最后一个进程。 | |
| 向左滚动到进程条目的开头 (即行首)。 |
| 向右滚动到进程条目的末尾 (即行尾)。 |
| 滚动整个屏幕 (对于大量进程)。 |
标记/取消标记当前进程。 | |
清除进程选择。 | |
| 向所选进程发送 signal.SIGINT (中断)。 |
T | 向所选进程发送 signal.SIGTERM (终止)。 |
K | 向所选进程发送 signal.SIGKILL (杀死)。 |
e | 显示进程环境。 |
t | 切换树视图屏幕。 |
查看特定进程的指标 (快捷键:Enter / Return)。
nvitop 附带一个帮助屏幕 (快捷键:h)。
五、总结
nvitop 是一款功能强大、易于使用、美观大方的 NVIDIA GPU 监控工具。它不仅可以替代 nvidia-smi,还提供了更多的功能和更友好的用户体验。如果你正在寻找一款优秀的 GPU 监控工具,那么 nvitop 绝对值得你尝试。快来安装 nvitop,告别“黑盒子”,让你的 GPU 运行状态一目了然吧!
MIG 设备支持。