查驱动版本必须用 nvidia-smi -q,其输出首部含 Driver Version;CUDA Version 是驱动支持的最高 CUDA 版本,非当前 nvcc 版本;若为 N/A 则驱动过旧或 NVML 未加载。

查驱动版本必须加 -q,默认输出里没有
直接运行 nvidia-smi 只显示简略状态表,Driver Version 不在其中。它藏在详细模式里:nvidia-smi -q 才会输出完整字段,开头几行就有 Driver Version。注意别和 CUDA Version 搞混——后者是驱动支持的最高 CUDA Toolkit 版本,不是你当前 nvcc -v 装的那个。
如果 nvidia-smi -q 输出中 CUDA Version 是 N/A,说明驱动太旧(比如 418.xx 以前),或者 NVML 没加载成功。此时即使 nvidia-smi 能跑,信息也不全。
-
nvidia-smi -q -d SYSTEM可缩小范围,只看系统级字段(驱动、CUDA、NVML 版本),避免滚动翻页 - 验证驱动是否真加载:检查
lsmod | grep nvidia应有nvidia、nvidia_uvm等模块;再看cat /proc/driver/nvidia/version是否有内容 - 若报错
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver,不是命令打错,而是驱动根本没起来或权限不够
Memory-Usage 是唯一靠谱的显存占用指标
free 和 top 完全看不到 GPU 显存——它们只管 CPU 内存。NVIDIA 显存由驱动独立管理,必须用 nvidia-smi 查。
默认输出里那行 Memory-Usage: 2145 MiB / 24576 MiB 就是真实显存用量,单位固定为 MiB,不是百分比。别误读成“用了 8.7%”,那是你自己算的,nvidia-smi 不提供百分比字段。
- 脚本采集时别信默认对齐格式:
nvidia-smi --query-gpu=memory.used --format=csv,noheader,nounits才能拿到干净数字(如2145),否则带空格和换行,awk一截就错 - 多卡环境加
-i 0锁定某张卡,避免-i越界导致命令静默失败 - 显存值是字符串,后续转数字前先用
tr -d ' '或awk '{$1=$1};1'清理空白
别把 GPU-Util 当成“GPU 占用率”
GPU-Util 是流式多处理器(SM)的活跃周期占比,只反映 CUDA 核心忙闲,和显存无关。0% 不代表没任务——可能正卡在显存拷贝、PCIe 传输或 I/O 等待上。
真正容易出问题的是 Memory-Usage 接近总量,或 Temperature 持续 >85°C。这两项比 GPU-Util 更值得盯紧。
- 进程级显存占用看表格底部的
Processes区域,PID 和 Process Name 是调用 CUDA 的实际进程(如python、tensorboard),不是 CPU 进程名 -
GPU-Util高但Memory-Usage很低?可能是小模型高频 infer,显存没压满但计算单元跑满了 -
GPU-Util低但Memory-Usage高?大概率是数据预处理占着显存不动,或 PyTorch 的cache没清
权限和设备节点常被忽略,但决定命令能否跑通
nvidia-smi 不需要 root,但普通用户得有权限读 /dev/nvidiactl 和 /dev/nvidia0 等设备节点。常见报错其实是权限问题,不是驱动没装。
检查方式:ls -l /dev/nvidia*,确认属组是 video 或 render,且当前用户在该组里(groups 命令可查)。不在的话,加进组并重登终端。
- 容器里跑
nvidia-smi失败?大概率是没挂载/dev/nvidiactl,或没加--gpus参数 -
nvidia-smi -L报错或无输出?不是驱动坏了,而是nvidia-uvm或nvidia-drm内核模块没加载 - 看到
Persistence-M是Off却无法用nvidia-smi -m 1开启?基本是权限不足,或运行在受限容器里
nvidia-smi -q | grep "Driver Version\|FB Memory Usage" 看驱动和显存总量/已用,再扫一眼默认输出里的 Memory-Usage 行。其余字段全是干扰项,除非你真在调优 PCIe 带宽或风扇策略。



















