Ubuntu系统下查看NVIDIA驱动版本的多种方法

9 次阅读

一、使用 nvidia-smi 查看 NVIDIA 驱动版本

如果 Ubuntu 已经正确安装并加载 NVIDIA 驱动,最直接的方法就是使用 nvidia-smi 命令。

打开终端执行:

Bash
nvidia-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 驱动本身的版本。

如果执行:

Bash
nvidia-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 图形工具查看驱动信息。

执行:

Bash
nvidia-settings

打开 NVIDIA Settings 后,可以在图形界面中查看显卡、驱动以及相关配置。

如果系统提示找不到该命令,可以安装对应软件包:

Bash
sudo apt update
sudo apt install nvidia-settings

安装完成后重新执行:

Bash
nvidia-settings

这种方式比较适合不熟悉 Linux 命令行的用户,但对于服务器或者没有桌面环境的 Ubuntu 系统,还是推荐使用 nvidia-smi。

三、使用 ubuntu-drivers 查看推荐驱动

Ubuntu 自带的 ubuntu-drivers 工具可以识别硬件,并列出系统推荐的 NVIDIA 驱动。

执行:

Bash
ubuntu-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 驱动到底是多少,优先执行:

Bash
nvidia-smi

四、使用 apt 查询已安装的 NVIDIA 驱动包

Ubuntu 的 NVIDIA 驱动通常通过 APT 软件包管理器安装,因此可以通过 dpkg 或 apt 查询已经安装的驱动包。

执行:

Bash
dpkg -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 驱动分支。

也可以使用:

Bash
apt list --installed 2>/dev/null | grep -i nvidia

如果只想查看 NVIDIA 驱动主版本,可以进一步筛选:

Bash
dpkg -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。

执行:

Bash
modinfo 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 内核模块的版本。

还可以直接使用:

Bash
modinfo nvidia | grep '^version'

得到类似:

version:        550.120

这种方法非常适合排查驱动加载问题,因为它查看的是系统中的 NVIDIA 内核模块,而不仅仅是用户空间工具。

不过,如果 NVIDIA 模块尚未安装,可能出现:

modinfo: ERROR: Module nvidia not found.

此时需要检查驱动安装情况。

六、通过 /proc/driver/nvidia/version 查看版本

NVIDIA 驱动加载成功后,Linux 系统通常会提供:

/proc/driver/nvidia/version

可以直接执行:

Bash
cat /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 内核驱动版本。

这种方法的特点是简单直接,不需要额外安装其他查询工具。

如果执行:

Bash
cat /proc/driver/nvidia/version

出现:

No such file or directory

通常意味着 NVIDIA 内核模块没有正常加载,或者当前系统没有安装 NVIDIA 驱动。

七、使用 lsmod 检查 NVIDIA 驱动是否加载

查看驱动版本的过程中,如果发现多个命令结果异常,可以先确认 NVIDIA 内核模块是否已经加载。

执行:

Bash
lsmod | grep nvidia

正常情况下可能看到:

nvidia_drm
nvidia_modeset
nvidia_uvm
nvidia

这说明 NVIDIA 相关内核模块已经进入运行状态。

还可以执行:

Bash
lsmod | grep -E 'nvidia|nouveau'

如果主要看到 nvidia 相关模块,通常说明 NVIDIA 官方驱动正在使用。

如果发现:

nouveau

而没有正常的 NVIDIA 模块,则可能是开源 Nouveau 驱动正在工作。

需要注意,lsmod 本身不能直接告诉你完整的 NVIDIA 驱动版本,它主要用于判断驱动模块是否已经加载。结合 modinfo nvidia 使用更加合适。

八、查看当前 NVIDIA 驱动对应的内核模块

如果系统中安装了多个 NVIDIA 驱动版本,单纯查看软件包可能容易产生误判。例如系统中可能同时存在不同版本的驱动文件,但当前内核实际加载的只有其中一个版本。

可以先执行:

Bash
modinfo nvidia | grep -E 'filename|version'

例如:

filename:       /lib/modules/6.8.0-xx-generic/updates/dkms/nvidia.ko
version:        550.120

然后再执行:

Bash
nvidia-smi

比较两个结果。

如果两者都是:

550.120

通常说明用户空间工具与当前加载的内核模块版本一致。

如果出现明显不同的版本,就需要检查系统是否存在旧驱动残留、驱动升级后尚未重启,或者 NVIDIA 相关组件版本不一致等问题。

九、查看显卡和驱动的 PCI 信息

如果 nvidia-smi 无法正常运行,还可以先使用 lspci 确认 Ubuntu 是否识别到了 NVIDIA 显卡。

执行:

Bash
lspci | grep -i nvidia

例如:

01:00.0 VGA compatible controller: NVIDIA Corporation ...
01:00.1 Audio device: NVIDIA Corporation ...

这说明 PCI 总线层面已经检测到了 NVIDIA 硬件。

进一步可以使用:

Bash
lspci -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 日志。

例如:

Bash
grep -i nvidia /var/log/apt/history.log

也可以查看:

Bash
grep -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 驱动版本是多少”,执行:

Bash
nvidia-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。

例如执行:

Bash
nvidia-smi

看到:

Driver Version: 550.120
CUDA Version: 12.4

并不能直接证明:

Bash
nvcc --version

也会得到 CUDA 12.4。

如果要查看 CUDA Toolkit 版本,应单独执行:

Bash
nvcc --version

或者:

Bash
nvcc -V

因此,排查 GPU 环境时最好分别确认 NVIDIA 驱动、CUDA Toolkit 以及实际运行环境。

十三、常见问题排查

1. nvidia-smi 找不到命令

执行:

Bash
nvidia-smi

如果提示:

Command 'nvidia-smi' not found

可以先检查 NVIDIA 软件包:

Bash
dpkg -l | grep nvidia

然后检查 Ubuntu 推荐的驱动:

Bash
ubuntu-drivers devices

如果确认尚未安装驱动,可以根据系统推荐版本进行安装。

2. nvidia-smi 无法连接 NVIDIA 驱动

如果出现:

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.

可以依次执行:

Bash
lsmod | grep nvidia

以及:

Bash
lspci -k | grep -A 3 -i nvidia

然后检查:

Bash
dmesg | grep -i nvidia

如果使用 DKMS 管理驱动,还可以查看:

Bash
dkms status

这些信息能够帮助判断是内核模块没有加载、DKMS 编译失败,还是驱动与当前 Linux 内核不兼容。

3. 驱动安装后版本没有变化

如果刚刚升级 NVIDIA 驱动,但:

Bash
nvidia-smi

仍然显示旧版本,可以先检查已安装的软件包:

Bash
dpkg -l | grep nvidia-driver

再检查当前加载的模块:

Bash
modinfo nvidia | grep '^version'

如果软件包已经是新版本,但内核模块仍是旧版本,通常需要重新启动系统:

Bash
sudo reboot

重启后再次执行:

Bash
nvidia-smi

4. Ubuntu 同时存在多个 NVIDIA 驱动版本

可以执行:

Bash
dpkg -l | grep -E 'nvidia-driver-[0-9]+'

查看已安装的驱动分支。

然后使用:

Bash
ubuntu-drivers devices

确认系统推荐版本。

不要仅仅根据 /usr/lib 或 /lib/modules 下存在的文件判断当前驱动版本,真正运行的版本应优先以:

Bash
nvidia-smi

和:

Bash
modinfo nvidia

的结果为准。

十四、推荐的查看方式

对于日常使用,最简单的命令是:

Bash
nvidia-smi

如果只想输出驱动版本,而不希望显示完整的 GPU 状态,可以使用:

Bash
nvidia-smi --query-gpu=driver_version --format=csv,noheader

输出可能是:

550.120

如果需要通过脚本自动获取 NVIDIA 驱动版本,这种方式尤其方便。

也可以使用:

Bash
nvidia-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 和系统日志进行定位,通常可以较快判断问题究竟出在驱动安装、内核模块还是当前运行环境。