显存占用必须用 nvidia-smi 查看,free 和 top 无效;nvidia-smi 默认每秒刷新,Memory-Usage 显示真实显存使用量;GPU-Util 是计算利用率,与显存无关;脚本采集需用 --format=csv,noheader,nounits 并清理空格。

显存占用看 nvidia-smi,不是 free 或 top
Linux 下查 GPU 显存,free 和 top 完全没用——它们只管 CPU 内存。NVIDIA 显卡的显存(VRAM)由驱动单独管理,必须用 NVIDIA 提供的工具。
最直接、最常用的就是 nvidia-smi。它默认每秒刷新一次,第一块 GPU 的显存使用情况就在顶部几行里,关键字段是 Memory-Usage(比如 1234MiB / 24576MiB)。
-
nvidia-smi不需要 root 权限,普通用户可直接运行(前提是已装好驱动且设备节点可读,通常是/dev/nvidia0) - 如果报错
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver,说明驱动没装、没加载,或当前用户没权限访问/dev/nvidiactl - 输出中
GPU-Util是计算单元利用率,和显存占用无关;别把这两个数字混着看
查详细显卡型号和驱动版本用 nvidia-smi -L 和 nvidia-smi -q
nvidia-smi -L 一行一个 GPU,只显示型号和 UUID,适合脚本快速识别硬件,比如:GPU 0: NVIDIA A100-SXM4-40GB (UUID: GPU-abc123...)。
要查驱动版本、显存带宽、温度、PCIe 链路宽度等完整信息,用 nvidia-smi -q。它输出很长,但关键段落清晰:
-
Driver Version在开头部分,确认是否匹配你安装的nvidia-driver包版本 -
FB Memory Usage下的Total/Used/Free才是真实显存用量(单位 MiB) -
PCIe Link Width/Speed如果显示1x或2.5 GT/s,说明插槽或 BIOS 设置限制了带宽,可能影响多卡训练吞吐
写脚本监控显存时别依赖 nvidia-smi --query-gpu=memory.used 的默认格式
很多人想自动化采集显存,直接用 nvidia-smi --query-gpu=memory.used --format=csv,noheader,nounits,结果发现输出带空格或换行,awk 一截就错。
根本原因是 nvidia-smi 默认对齐列宽,字段间用多个空格分隔,不是严格 CSV。安全做法是加 -i 0 锁定单卡,并强制用逗号分隔:
nvidia-smi -i 0 --query-gpu=memory.used --format=csv,noheader,nounits
更稳妥的脚本写法:
- 先用
nvidia-smi -L | wc -l确认 GPU 数量,避免-i越界 - 显存值是字符串(如
1234后带空格),用tr -d ' '或awk '{$1=$1};1'清理再转数字 - 不要用
nvidia-smi做高频轮询(如
非 NVIDIA 卡(AMD/Intel)不能用 nvidia-smi
如果你用的是 AMD GPU(如 MI210)或 Intel Arc,nvidia-smi 直接报错或找不到命令。对应工具分别是:
- AMD:用
rocm-smi(需装rocm-smi-lib),查显存用rocm-smi --showmeminfo vram - Intel:用
intel_gpu_top(intel-gpu-tools包提供),但它的显存统计粒度较粗,主要面向集成显卡;独立显卡(如 Arc A770)建议用oneapi-cli或clinfo辅助验证 - 通用但弱功能的方法是读
/sys/class/drm/card*/device/mem_info_vram_used(仅部分驱动暴露),但值单位不统一,且不一定存在
混合 GPU 环境下,先跑 lspci | grep -i vga 看清硬件类型,再选工具,别硬套 nvidia-smi。

















