一、使用 nvidia-smi 查看 NVIDIA 驱动版本
如果 Ubuntu 已经正确安装并加载 NVIDIA 驱动,最直接的方法就是使用 nvidia-smi 命令。
打开终端执行:
Bashnvidia-smi
正常情况下可以看到类似以下信息:
+-----------------------------------------------------------------------------------------+ | NVIDIA-SMI 550.120 Driver Version: 550.120 CUDA Version: 12.4 | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | +-----------------------------------------+------------------------+----------------------+
其中:
Driver Version: 550.120
就是当前正在运行的 NVIDIA 驱动版本。
需要注意,CUDA Version 和 Driver Version 并不是同一个概念。前者表示当前驱动所支持的最高 CUDA Runtime 版本信息,后者才是 NVIDIA 驱动本身的版本。
如果执行:
Bashnvidia-smi
提示:
Command 'nvidia-smi' not found
通常说明 NVIDIA 工具没有安装,或者相关驱动安装不完整。
如果出现:
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.
则通常需要进一步检查驱动模块是否正常加载。
二、使用 nvidia-settings 查看驱动版本
Ubuntu 桌面环境中还可以通过 NVIDIA Settings 图形工具查看驱动信息。
执行:
Bashnvidia-settings
打开 NVIDIA Settings 后,可以在图形界面中查看显卡、驱动以及相关配置。
如果系统提示找不到该命令,可以安装对应软件包:
Bashsudo apt update sudo apt install nvidia-settings
安装完成后重新执行:
Bashnvidia-settings
这种方式比较适合不熟悉 Linux 命令行的用户,但对于服务器或者没有桌面环境的 Ubuntu 系统,还是推荐使用 nvidia-smi。
三、使用 ubuntu-drivers 查看推荐驱动
Ubuntu 自带的 ubuntu-drivers 工具可以识别硬件,并列出系统推荐的 NVIDIA 驱动。
执行:
Bashubuntu-drivers devices
可能看到类似:
== /sys/devices/pci0000:00/0000:00:01.0 == modalias : pci:v000010DEd00002820sv... vendor : NVIDIA Corporation driver : nvidia-driver-550 - third-party non-free recommended driver : nvidia-driver-535 - third-party non-free
其中:
nvidia-driver-550
表示可安装的驱动分支,而:
recommended
表示 Ubuntu 当前认为比较适合该硬件的驱动版本。
需要区分一个容易混淆的问题:ubuntu-drivers devices 显示的是可用或推荐安装的驱动包,不一定等于当前正在运行的驱动版本。
因此,如果目标只是确认当前 NVIDIA 驱动到底是多少,优先执行:
Bashnvidia-smi
四、使用 apt 查询已安装的 NVIDIA 驱动包
Ubuntu 的 NVIDIA 驱动通常通过 APT 软件包管理器安装,因此可以通过 dpkg 或 apt 查询已经安装的驱动包。
执行:
Bashdpkg -l | grep -i nvidia
例如:
ii nvidia-driver-550 550.120-0ubuntu0.24.04.1 ii nvidia-utils-550 550.120-0ubuntu0.24.04.1 ii nvidia-dkms-550 550.120-0ubuntu0.24.04.1
从这些信息可以判断系统安装了哪个 NVIDIA 驱动分支。
也可以使用:
Bashapt list --installed 2>/dev/null | grep -i nvidia
如果只想查看 NVIDIA 驱动主版本,可以进一步筛选:
Bashdpkg -l | grep 'nvidia-driver'
例如:
ii nvidia-driver-550 550.120-0ubuntu0.24.04.1
这里的 550 是驱动分支,完整的软件包版本则是 550.120-0ubuntu0.24.04.1。
五、使用 modinfo 查看 NVIDIA 内核模块版本
如果需要从 Linux 内核模块层面确认 NVIDIA 驱动版本,可以使用 modinfo。
执行:
Bashmodinfo nvidia
输出中通常包含:
filename: /lib/modules/6.8.0-xx-generic/updates/dkms/nvidia.ko version: 550.120 license: Dual MIT/GPL firmware: nvidia/550.120/...
重点关注:
version: 550.120
这代表 NVIDIA 内核模块的版本。
还可以直接使用:
Bashmodinfo nvidia | grep '^version'
得到类似:
version: 550.120
这种方法非常适合排查驱动加载问题,因为它查看的是系统中的 NVIDIA 内核模块,而不仅仅是用户空间工具。
不过,如果 NVIDIA 模块尚未安装,可能出现:
modinfo: ERROR: Module nvidia not found.
此时需要检查驱动安装情况。
六、通过 /proc/driver/nvidia/version 查看版本
NVIDIA 驱动加载成功后,Linux 系统通常会提供:
/proc/driver/nvidia/version
可以直接执行:
Bashcat /proc/driver/nvidia/version
例如:
NVRM version: NVIDIA UNIX x86_64 Kernel Module 550.120 ... GCC version: gcc version 13.2.0 ...
这里的:
NVIDIA UNIX x86_64 Kernel Module 550.120
就是当前加载的 NVIDIA 内核驱动版本。
这种方法的特点是简单直接,不需要额外安装其他查询工具。
如果执行:
Bashcat /proc/driver/nvidia/version
出现:
No such file or directory
通常意味着 NVIDIA 内核模块没有正常加载,或者当前系统没有安装 NVIDIA 驱动。
七、使用 lsmod 检查 NVIDIA 驱动是否加载
查看驱动版本的过程中,如果发现多个命令结果异常,可以先确认 NVIDIA 内核模块是否已经加载。
执行:
Bashlsmod | grep nvidia
正常情况下可能看到:
nvidia_drm nvidia_modeset nvidia_uvm nvidia
这说明 NVIDIA 相关内核模块已经进入运行状态。
还可以执行:
Bashlsmod | grep -E 'nvidia|nouveau'
如果主要看到 nvidia 相关模块,通常说明 NVIDIA 官方驱动正在使用。
如果发现:
nouveau
而没有正常的 NVIDIA 模块,则可能是开源 Nouveau 驱动正在工作。
需要注意,lsmod 本身不能直接告诉你完整的 NVIDIA 驱动版本,它主要用于判断驱动模块是否已经加载。结合 modinfo nvidia 使用更加合适。
八、查看当前 NVIDIA 驱动对应的内核模块
如果系统中安装了多个 NVIDIA 驱动版本,单纯查看软件包可能容易产生误判。例如系统中可能同时存在不同版本的驱动文件,但当前内核实际加载的只有其中一个版本。
可以先执行:
Bashmodinfo nvidia | grep -E 'filename|version'
例如:
filename: /lib/modules/6.8.0-xx-generic/updates/dkms/nvidia.ko version: 550.120
然后再执行:
Bashnvidia-smi
比较两个结果。
如果两者都是:
550.120
通常说明用户空间工具与当前加载的内核模块版本一致。
如果出现明显不同的版本,就需要检查系统是否存在旧驱动残留、驱动升级后尚未重启,或者 NVIDIA 相关组件版本不一致等问题。
九、查看显卡和驱动的 PCI 信息
如果 nvidia-smi 无法正常运行,还可以先使用 lspci 确认 Ubuntu 是否识别到了 NVIDIA 显卡。
执行:
Bashlspci | grep -i nvidia
例如:
01:00.0 VGA compatible controller: NVIDIA Corporation ... 01:00.1 Audio device: NVIDIA Corporation ...
这说明 PCI 总线层面已经检测到了 NVIDIA 硬件。
进一步可以使用:
Bashlspci -k | grep -A 3 -i nvidia
可能得到:
01:00.0 VGA compatible controller: NVIDIA Corporation ... Kernel driver in use: nvidia Kernel modules: nvidia
其中:
Kernel driver in use: nvidia
表示当前正在使用 NVIDIA 内核驱动。
如果显示:
Kernel driver in use: nouveau
则说明当前使用的是 Nouveau,而不是 NVIDIA 官方闭源驱动。
十、查看 NVIDIA 驱动安装历史
如果想了解 NVIDIA 驱动是什么时候安装或升级的,可以查看 APT 日志。
例如:
Bashgrep -i nvidia /var/log/apt/history.log
也可以查看:
Bashgrep -i nvidia /var/log/dpkg.log
这些日志对于排查“升级驱动之后突然无法使用 GPU”之类的问题比较有帮助。
例如日志中可能出现:
Install: nvidia-driver-550 Upgrade: nvidia-utils-550
结合安装时间,可以判断驱动是否刚刚发生过变更。
十一、不同查看方法的区别
实际使用时,不同命令关注的对象并不完全相同。
| 方法 | 主要用途 | 是否适合确认当前驱动 |
|---|---|---|
nvidia-smi | 查看 NVIDIA 运行状态 | 最推荐 |
nvidia-settings | 图形界面查看信息 | 推荐桌面用户使用 |
ubuntu-drivers devices | 查看推荐和可用驱动 | 不作为最终依据 |
dpkg -l | grep nvidia | 查看已安装软件包 | 适合确认安装情况 |
modinfo nvidia | 查看内核模块信息 | 非常适合排查驱动 |
cat /proc/driver/nvidia/version | 查看已加载 NVIDIA 模块版本 | 推荐 |
lsmod | grep nvidia | 判断模块是否加载 | 辅助排查 |
lspci -k | 查看硬件及实际使用的内核驱动 | 辅助排查 |
如果只是想快速知道“Ubuntu 当前 NVIDIA 驱动版本是多少”,执行:
Bashnvidia-smi
通常已经足够。
如果 nvidia-smi 无法使用,则可以按照:
lspci ↓ lsmod ↓ modinfo ↓ dpkg ↓ APT日志
这样的顺序逐层排查。
十二、nvidia-smi 显示的驱动版本与 CUDA 版本如何理解
很多用户第一次查看 NVIDIA 信息时,会把下面两项混为一谈:
Driver Version: 550.120 CUDA Version: 12.4
实际上两者含义不同。
Driver Version 是 NVIDIA 驱动版本,例如:
550.120
而 CUDA Version 表示该驱动支持的 CUDA 版本能力,并不意味着系统一定安装了对应版本的 CUDA Toolkit。
例如执行:
Bashnvidia-smi
看到:
Driver Version: 550.120 CUDA Version: 12.4
并不能直接证明:
Bashnvcc --version
也会得到 CUDA 12.4。
如果要查看 CUDA Toolkit 版本,应单独执行:
Bashnvcc --version
或者:
Bashnvcc -V
因此,排查 GPU 环境时最好分别确认 NVIDIA 驱动、CUDA Toolkit 以及实际运行环境。
十三、常见问题排查
1. nvidia-smi 找不到命令
执行:
Bashnvidia-smi
如果提示:
Command 'nvidia-smi' not found
可以先检查 NVIDIA 软件包:
Bashdpkg -l | grep nvidia
然后检查 Ubuntu 推荐的驱动:
Bashubuntu-drivers devices
如果确认尚未安装驱动,可以根据系统推荐版本进行安装。
2. nvidia-smi 无法连接 NVIDIA 驱动
如果出现:
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.
可以依次执行:
Bashlsmod | grep nvidia
以及:
Bashlspci -k | grep -A 3 -i nvidia
然后检查:
Bashdmesg | grep -i nvidia
如果使用 DKMS 管理驱动,还可以查看:
Bashdkms status
这些信息能够帮助判断是内核模块没有加载、DKMS 编译失败,还是驱动与当前 Linux 内核不兼容。
3. 驱动安装后版本没有变化
如果刚刚升级 NVIDIA 驱动,但:
Bashnvidia-smi
仍然显示旧版本,可以先检查已安装的软件包:
Bashdpkg -l | grep nvidia-driver
再检查当前加载的模块:
Bashmodinfo nvidia | grep '^version'
如果软件包已经是新版本,但内核模块仍是旧版本,通常需要重新启动系统:
Bashsudo reboot
重启后再次执行:
Bashnvidia-smi
4. Ubuntu 同时存在多个 NVIDIA 驱动版本
可以执行:
Bashdpkg -l | grep -E 'nvidia-driver-[0-9]+'
查看已安装的驱动分支。
然后使用:
Bashubuntu-drivers devices
确认系统推荐版本。
不要仅仅根据 /usr/lib 或 /lib/modules 下存在的文件判断当前驱动版本,真正运行的版本应优先以:
Bashnvidia-smi
和:
Bashmodinfo nvidia
的结果为准。
十四、推荐的查看方式
对于日常使用,最简单的命令是:
Bashnvidia-smi
如果只想输出驱动版本,而不希望显示完整的 GPU 状态,可以使用:
Bashnvidia-smi --query-gpu=driver_version --format=csv,noheader
输出可能是:
550.120
如果需要通过脚本自动获取 NVIDIA 驱动版本,这种方式尤其方便。
也可以使用:
Bashnvidia-smi --query-gpu=name,driver_version --format=csv
得到:
name, driver_version NVIDIA GeForce RTX 4090, 550.120
对于服务器监控、Shell 自动化脚本以及 GPU 环境检查,这种结构化输出比解析完整的 nvidia-smi 表格更加可靠。
综合来看,Ubuntu 系统下查看 NVIDIA 驱动版本并不只有一种方法。日常确认版本优先使用 nvidia-smi;排查驱动模块问题时使用 modinfo、/proc/driver/nvidia/version 和 lsmod;确认软件包安装情况则使用 dpkg 和 apt。如果驱动升级后版本异常,再结合 lspci、dkms status 和系统日志进行定位,通常可以较快判断问题究竟出在驱动安装、内核模块还是当前运行环境。