nvidia-smi -l 1 是最轻量可靠的运行期持续监控方案,因其原生支持流式刷新、输出稳定、可实时过滤,且避免 watch 在 vscode 终端中因 ansi 控制失效导致的乱码、重叠与卡顿问题。

直接在 VSCode 集成终端里运行 nvidia-smi 就能看 GPU 显存压力,但想“运行期持续监控”,必须配合轮询或流式输出——nvidia-smi -l 1 是最轻量、最可靠的选择,无需额外安装工具,也不依赖 Python 或 Web UI。
为什么不用 watch nvidia-smi?
watch 在 VSCode 终端中默认不支持 ANSI 清屏控制,容易出现乱码、重叠、刷新卡顿;而 nvidia-smi -l 1 是 NVIDIA 官方内置的轮询模式,原生支持终端流式刷新,输出稳定,且能直接捕获到显存峰值跳变(比如模型 forward 瞬间冲高的 200MB 波动)。
-
nvidia-smi -l 1每秒刷新一次,输出格式规整,可被grep或awk实时过滤(例如只看Used列:nvidia-smi -l 1 --query-gpu=memory.used --format=csv,noheader,nounits) -
watch -n 1 nvidia-smi在 VSCode 终端中常因 TERM 类型识别问题导致界面错位,尤其在 Windows + WSL 或 macOS + Remote-SSH 场景下更明显 - 如果终端意外断开,
nvidia-smi -l会自动终止;watch可能残留僵尸进程,需手动kill
如何让监控结果不干扰开发流程?
别把 nvidia-smi -l 1 塞进主工作终端——它会抢占焦点、阻塞 Ctrl+C、影响调试器中断。正确做法是开一个独立终端标签页专用于监控,并设置为“静默模式”:
- 在 VSCode 中按
Ctrl+Shift+`新建终端 → 执行nvidia-smi -l 1 - 右键该终端标签页 → “Rename Terminal” → 改成
gpu-monitor,方便快速定位 - 如需最小化干扰,可在终端顶部右键 → “Hide Terminal”(仅隐藏,进程仍在运行)
- 若要后台持续运行且不占前台,改用
nvidia-smi -l 1 > /tmp/gpu.log 2>&1 &,再用tail -f /tmp/gpu.log查看(适合长时间跑训练时挂起)
Remote-SSH 连接后看不到 GPU 设备?
常见于远程服务器未正确加载 NVIDIA 驱动,或用户不在 video / docker 用户组,也可能是容器环境未透传设备。先快速验证:
- 执行
nvidia-smi,若报错NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver→ 驱动未就绪,联系运维检查lsmod | grep nvidia - 若命令返回空表或
No devices were found→ 当前用户无权限,运行sudo usermod -aG video,docker $USER并重新登录 SSH - 若在 Docker 容器内开发,确认启动时加了
--gpus all或--device /dev/nvidia0:/dev/nvidia0,否则nvidia-smi在容器内不可见 - 某些云厂商(如阿里云、腾讯云)默认禁用 GPU 设备节点,需在控制台开启“GPU 设备透传”开关
真正容易被忽略的是:VSCode Remote-SSH 默认不会继承服务器的 LD_LIBRARY_PATH 和 PATH 环境变量,有时 nvidia-smi 能运行但找不到对应 CUDA 库路径,导致显示显存为 0MB——此时在 ~/.bashrc 里显式补全路径比临时 export 更可靠。











