本页介绍如何从命令行安装 NVIDIA 驱动:可以使用推荐的 ubuntu-drivers 工具,也可以使用 APT。
NVIDIA 驱动版本
Ubuntu 打包提供两类 NVIDIA 驱动:
- 统一驱动架构(UDA)驱动:推荐用于普通桌面,也可在 NVIDIA 网站找到。
- 企业就绪驱动(ERD):推荐用于服务器和计算任务,软件包名称带有
-server后缀。更多介绍见 NVIDIA 文档。
Ubuntu 还提供 NVIDIA Fabric Manager 和 NVIDIA Switch Configuration and Query(NSCQ)库。只有使用 NVSwitch 硬件时才需要它们;二者仅随 ERD,也就是 -server 驱动版本提供。
检查驱动版本
查看当前运行的驱动版本:
cat /proc/driver/nvidia/version
推荐方式:ubuntu-drivers 工具
ubuntu-drivers 与图形界面的“附加驱动”工具使用相同逻辑,同时为桌面和服务器提供更灵活的操作方式。
如果计算机启用了 Secure Boot,推荐使用此工具:默认情况下,它只安装已知可以配合安全启动工作的、预先构建并签名的驱动。如果有必须使用 DKMS 驱动的特殊需求,请参阅下文“使用 NVIDIA DKMS 软件包自行构建内核模块”。
如果系统已安装的 NVIDIA 驱动与 ubuntu-drivers 将要安装的版本冲突,工具会先卸载原有驱动,再安装新驱动。
确保系统和内核为最新状态
sudo apt update && sudo apt upgrade
更新完成后,重新启动系统。
检查硬件可用的驱动
桌面系统:
sudo ubuntu-drivers list
服务器:
sudo ubuntu-drivers list --gpgpu
示例列表:
nvidia-driver-470 nvidia-driver-470-server nvidia-driver-535 nvidia-driver-535-open nvidia-driver-535-server nvidia-driver-535-server-open nvidia-driver-550 nvidia-driver-550-open nvidia-driver-550-server nvidia-driver-550-server-open
为通用用途安装驱动,例如桌面和游戏
可以依靠自动检测,安装工具认为最适合当前硬件的驱动:
sudo ubuntu-drivers install
也可以指定希望安装的驱动。此时应使用 ubuntu-drivers list 列出的版本号,例如 535。假设要安装 535 驱动:
sudo ubuntu-drivers install nvidia:535
为服务器或计算用途安装驱动
可以自动检测并安装最匹配的驱动:
sudo ubuntu-drivers install --gpgpu
也可以指定 ubuntu-drivers list --gpgpu 列出的版本号及 -server 后缀。例如安装列表中的 nvidia-driver-535-server:
sudo ubuntu-drivers install --gpgpu nvidia:535-server
还应安装以下附加组件:
sudo apt install nvidia-utils-535-server
可选步骤:NVSwitch 组件
如果系统配有 NVSwitch 硬件,还应安装 Fabric Manager 和 NVSwitch Configuration and Query 库:
sudo apt install nvidia-fabricmanager-535 libnvidia-nscq-535
使用 APT 手动安装驱动
手动安装时,必须先安装正确的内核模块,再安装对应驱动系列的元软件包。
安装内核模块
如果系统使用 Secure Boot——多数现代 x86 系统都是如此——内核要求模块经过签名。有两种互斥的实现方式。
为当前内核安装预编译的 NVIDIA 模块
根据内核类型(例如 generic、lowlatency)、驱动分支(例如 535),以及需要计算驱动还是普通显示驱动(是否带 -server),安装相应元软件包:
sudo apt install linux-modules-nvidia-${DRIVER_BRANCH}${SERVER}-${LINUX_FLAVOUR}
例如 linux-modules-nvidia-535-generic。
检查元软件包是否已为具体内核/ABI 安装模块:
sudo apt-cache policy linux-modules-nvidia-${DRIVER_BRANCH}${SERVER}-$(uname -r)
例如 sudo apt-cache policy linux-modules-nvidia-535-$(uname -r)。
如果当前运行的内核还没有对应模块,可以升级到最新内核,或明确指定当前内核版本来安装:
sudo apt install linux-modules-nvidia-${DRIVER_BRANCH}${SERVER}-$(uname -r)
例如 sudo apt install linux-modules-nvidia-535-$(uname -r)。
使用 NVIDIA DKMS 软件包自行构建内核模块
安装相应 NVIDIA DKMS 软件包与 linux-headers 来构建模块,并注册自己的密钥,为模块签名。
首先安装与内核类型(例如 generic、lowlatency)相符的头文件元软件包:
sudo apt install linux-headers-${LINUX_FLAVOUR}
检查元软件包是否已安装具体内核所需的头文件:
sudo apt-cache policy linux-headers-$(uname -r)
如果当前内核缺少头文件,明确指定运行中的内核版本安装:
sudo apt install linux-headers-$(uname -r)
最后安装目标驱动系列的 NVIDIA DKMS 软件包。这个过程可能自动引导你创建并注册新的安全启动密钥:
sudo apt install nvidia-dkms-${DRIVER_BRANCH}${SERVER}
也可以让 ubuntu-drivers 自动选择合适的 DKMS 驱动分支:
sudo ubuntu-drivers install --include-dkms
安装用户空间驱动和驱动库
安装正确的内核模块后,安装相应的驱动元软件包:
sudo apt install nvidia-driver-${DRIVER_BRANCH}${SERVER}
可选:安装 Fabric Manager 和 NSCQ 库
如果有 NVSwitch 硬件,运行以下命令安装 Fabric Manager 和 NVSwitch Configuration and Query 库:
sudo apt install nvidia-fabricmanager-${DRIVER_BRANCH} libnvidia-nscq-${DRIVER_BRANCH}
在预编译模块与 DKMS 模块之间切换
- 按照下一节卸载 NVIDIA 驱动。
- 按照上文使用 APT 手动安装驱动。
卸载 NVIDIA 驱动
从系统中删除 NVIDIA 软件包:
sudo apt --purge remove '*nvidia*${DRIVER_BRANCH}*'
如果不确定要删除哪个 ${DRIVER_BRANCH},可以先查看系统已安装的 NVIDIA 软件包及其驱动分支号。由于 autoremove 会处理间接依赖,只需使用 apt-mark 列出直接安装的软件包:
apt-mark showmanual | grep nvidia`.
移除因依赖关系安装、却未被前一条命令清除的其他软件包,例如 amd64 系统上的 i386 库:
sudo apt autoremove
迁移到新驱动分支的过渡软件包
当 NVIDIA 停止支持某个驱动分支后,如果你尝试安装该分支,Canonical 会自动将其迁移到下一个受支持的分支。当前支持情况请参阅 NVIDIA 文档中的支持矩阵。
故障排查
驱动与库版本不匹配
如果运行 nvidia-smi 时出现以下错误:
Failed to initialize NVML: Driver/library version mismatch
通常意味着用户空间驱动软件包已升级,而内核模块仍是旧版本:例如客户端与内核报告的驱动版本不同。系统升级后常见这种情况。查看内核日志来确认:
sudo dmesg
寻找类似的错误:
NVRM: API mismatch: the client has the version 570.172.08, but NVRM: this kernel module has the version 570.158.01. Please NVRM: make sure that this kernel module and all NVIDIA driver NVRM: components have the same version.
解决方法:重新启动系统,加载更新后的内核模块,使版本重新一致。
未找到设备
如果运行 nvidia-smi 时出现:
No devices were found
可能是开源 NVIDIA 内核驱动 nouveau 已预装并加载,与专有 NVIDIA 驱动冲突。检查模块是否已加载:
lsmod | grep nouveau
解决方法:如果已加载,将它加入禁止加载列表,并重建 initramfs:
echo "blacklist nouveau" | sudo tee /etc/modprobe.d/disable-nouveau.conf
> echo "options nouveau modeset=0" | sudo tee -a /etc/modprobe.d/disable-nouveau.conf
> sudo rmmod nouveau || true
> sudo update-initramfs -u
命令块中的 > 是原文显示的续行提示符,逐行执行时不要将它作为命令的一部分。随后重新启动系统,使更改生效。











暂无评论内容