驱动程序安装指南

Linux 上 NVIDIA 驱动程序的安装说明。

1. 简介

1.1. 系统要求

要在您的系统上使用 NVIDIA 驱动程序,您需要安装以下组件

  • NVIDIA GPU

  • 受支持的 Linux 版本,带有 gcc 编译器和工具链

下表列出了受支持的 Linux 发行版。请查看与该表关联的脚注。

带有 $distro$arch$arch_ext 的列可用于替换本文档中相同变量的出现。

表 1 受支持的 Linux 发行版

发行版

$distro

$arch

$arch_ext

x86_64

红帽企业 Linux 9

rhel9

x86_64

x86_64

红帽企业 Linux 8

rhel8

x86_64

x86_64

OpenSUSE Leap 15

opensuse15

x86_64

x86_64

Rocky Linux 8

rhel8

x86_64

x86_64

Rocky Linux 9

rhel9

x86_64

x86_64

SUSE Linux 企业服务器 15

sles15

x86_64

x86_64

Ubuntu 24.04 LTS

ubuntu2404

x86_64

amd64

Ubuntu 22.04 LTS

ubuntu2204

x86_64

amd64

Ubuntu 20.04 LTS

ubuntu2004

x86_64

amd64

Debian 12

debian12

x86_64

amd64

Fedora 41

fedora41

x86_64

x86_64

麒麟OS V10 SP3 2403

kylin10

x86_64

x86_64

MSFT Azure Linux 2.0

cm2

x86_64

x86_64

Amazon Linux 2023

amzn2023

x86_64

x86_64

Oracle Linux 8

rhel8

x86_64

x86_64

Oracle Linux 9

rhel9

x86_64

x86_64

arm64-sbsa

红帽企业 Linux 9

rhel9

sbsa

aarch64

红帽企业 Linux 8

rhel8

sbsa

aarch64

SUSE Linux 企业服务器 15

sles15

sbsa

aarch64

麒麟 V10 SP3 2403

kylin10

sbsa

aarch64

Ubuntu 24.04 LTS

ubuntu2404

sbsa

arm64

Ubuntu 22.04 LTS

ubuntu2204

sbsa

arm64

Ubuntu 20.04 LTS

ubuntu2004

sbsa

arm64

以下注释适用于受支持的内核版本

1.2. 操作系统支持策略

对不同操作系统的支持将持续到为每个操作系统定义的标准 EOSS/EOL 日期。

请参考这些操作系统的支持生命周期,以了解其支持时间表,并计划相应地迁移到较新的版本。

1.3. 管理员权限

本文档旨在为熟悉 Linux 环境的读者提供信息。

  • 可以作为普通用户执行的命令将在行首以 $ 为前缀

  • 需要管理员权限 (root) 的命令将在行首以 # 为前缀

本文档中的许多命令可能需要超级用户权限。在大多数 Linux 发行版中,这将需要您以 root 身份登录。对于已启用 sudo 软件包的系统,请对所有必要命令使用 sudo 前缀或 sudo shell (sudo -i)。

2. 预安装操作

在 Linux 上安装 NVIDIA 驱动程序之前,必须执行一些操作

  • 验证系统正在运行受支持的 Linux 版本。

  • 验证系统是否安装了正确的内核头文件和开发软件包。

  • 处理冲突的安装方法。

2.1. 验证您是否拥有受支持的 Linux 发行版

NVIDIA 驱动程序包在某些特定的 Linux 发行版上受支持。这些发行版在 NVIDIA 驱动程序发行说明中列出。

要确定您正在运行哪个发行版和版本号,请在命令行中键入以下内容

$ uname -m && cat /etc/<os-release>

x86_64 行表示您正在 64 位系统上运行。其余部分提供有关您的发行版的信息。

2.2. 验证系统是否安装了正确的内核包

NVIDIA 驱动程序要求在驱动程序安装时以及每次重建驱动程序时,都必须安装正在运行的内核版本的内核头文件和开发软件包。例如,如果您的系统正在运行内核版本 3.17.4-301,则还必须安装 3.17.4-301 内核头文件和开发软件包。

如果当前未安装这些软件包的任何版本,则驱动程序的 rpmdeb 安装将尝试安装内核头文件和开发软件包。但是,它将安装这些软件包的最新版本,该版本可能与您的系统正在使用的内核版本匹配,也可能不匹配。

因此,最好在安装 NVIDIA 驱动程序之前手动确保安装了正确版本的内核头文件和开发软件包,以及在您更改内核版本时。

您可以通过运行以下命令找到您的系统正在运行的内核版本

$ uname -r

这是在安装 NVIDIA 驱动程序之前必须安装的内核头文件和开发软件包的版本。以下命令将多次使用,以指定要安装的软件包的版本。请注意,以下是内核使用的常见情况。更高级的情况(例如自定义内核分支)应确保其内核头文件和源与它们正在运行的内核版本匹配。

注意

如果您执行系统更新,更改了正在使用的 Linux 内核的版本,则软件包应自动重建内核模块,除非正在使用预编译模块。

3. 选择安装方法

NVIDIA 驱动程序可以使用特定于发行版的软件包(rpm 和 Debian 软件包)进行安装。

与发行版无关的软件包的优点是可以跨更广泛的 Linux 发行版工作,但不会随发行版的本机软件包管理系统更新。特定于发行版的软件包与发行版的本机软件包管理系统交互。建议尽可能使用特定于发行版的软件包。

当使用 rpm 或 Debian 本地仓库安装程序时,下载的软件包包含存储在本地文件系统 /var/ 中的仓库快照。此类软件包仅告知软件包管理器在哪里可以找到实际的安装软件包,但不会安装它们。

如果启用了在线网络仓库,则将在安装时使用软件包管理器自动下载 rpm 或 Debian 软件包:aptdnftdnfyumzypper

特定于发行版的说明详细介绍了如何安装 NVIDIA 驱动程序

最后,详细介绍了一些有用的软件包管理器功能。

注意

可选组件(如 nvidia-fslibnvidia_nscqfabricmanager)默认不安装,需要根据需要单独安装。

4. 最近更新

4.1. 纯计算和桌面安装

从 560 版本开始,驱动程序允许一种新的自定义安装方法,该方法仅包含驱动程序的一部分,以用于不同的用例。这允许更精细的安装,依赖性更少,尤其适用于纯计算系统,在这些系统中,桌面组件会引入许多额外的库,而这些库随后将不会使用。

根据操作系统,现在可以按以下配置安装驱动程序

  • 桌面 – 包含所有 X/Wayland 驱动程序和库,以允许在桌面系统(笔记本电脑、工作站等)上运行启用电源管理的 GPU,但不包含任何 CUDA 组件。

  • 纯计算,或“无头” – 包含在 GPU 系统上运行 CUDA 应用程序所需的一切,其中 GPU 不用于驱动显示器:计算集群、带有专用 NVIDIA GPU 的工作站等。

  • 桌面和计算 – 安装驱动程序的规范方式,包含所有可能的库和显示组件。这可能在跨功能组合中是必需的,例如 CUDA 加速视频编码/解码。

image15

此选项现在支持以下操作系统,未来版本将支持更多操作系统

  • 红帽企业 Linux 8 / Rocky Linux 8 / Oracle Linux 8

  • 红帽企业 Linux 9 / Rocky Linux 9 / Oracle Linux 9

  • 麒麟 10

  • Fedora 41

  • OpenSUSE Leap 15

  • SUSE Linux 企业服务器 15

  • Debian 12

  • Ubuntu 20.04

  • Ubuntu 22.04

  • Ubuntu 24.04

以下操作系统的驱动程序安装仅以纯计算/无头模式提供

  • Azure Linux (CBL Mariner 2)

  • Amazon Linux 2023

    • 将 Amazon Linux 2023 上的驱动程序升级到 560 或更高版本将删除所有未使用的桌面组件作为升级的一部分。

更多信息请参见相应章节。

4.2. 仅 Wayland 桌面安装

此选项现在支持以下操作系统,未来版本将支持更多操作系统

  • 红帽企业 Linux 8 / Rocky Linux 8 / Oracle Linux 8

  • 红帽企业 Linux 9 / Rocky Linux 9 / Oracle Linux 9

  • Fedora 41

要删除对 X.org 服务器、其桌面会话和所有相关的用户空间 X 驱动程序包的支持,只需删除 X.org 服务器包即可。驱动程序安装 X 组件时,对 X.org 软件包存在反向依赖,因此删除它会删除运行 X.org 会话不需要的所有内容。

# dnf remove xorg-x11-server-Xorg

4.3. 纯计算 HPC 节点

从 CUDA 12.8 开始,cuda 元软件包现在安装仅计算部分驱动程序。默认情况下,如果在命令行上未指定任何内容,则安装将首选开放 GPU 内核模块。

这是通过使 cuda-runtime-X-Y 最终依赖于 nvidia-driver-cuda/nvidia-compute-G06/libnvidia-compute 来实现的,具体取决于发行版。

4.4. 驱动程序助手脚本

一个新的脚本可用于检测和安装用户系统最佳的 NVIDIA 驱动程序包。此软件旨在帮助用户根据检测到的系统硬件决定安装哪个 NVIDIA 图形驱动程序。

要安装驱动程序助手脚本,请使用 apt/dnf/tdnf/zypper 安装 nvidia-driver-assistant 软件包。

下表解释了驱动程序助手脚本的不同标志

表 2 驱动程序助手脚本标志

使用的标志

描述

--install

安装推荐的驱动程序。

--branch [分支]

指定 NVIDIA 驱动程序分支。

--list-supported-distros

打印输出受支持的 Linux 发行版列表。

--supported-gpus [SUPPORTED_GPUS]

使用不同的 supported-gpus.json 文件。

--sys-path [SYS_PATH]

使用不同的 /sys 路径。对测试很有用。

--os-release-path [OS_RELEASE_PATH]

os-release 文件使用不同的路径。对测试很有用。

--distro [DISTRO]

使用 DISTRO:VERSIONDISTRO 模式指定 Linux 发行版。对测试很有用。

--module-flavor [MODULE_FLAVOR]

指定内核模块版本;接受 openclosed 值。对测试很有用。

--verbose

[可选] 详细输出。

以下是示例命令输出

表 3 命令输出

命令

示例输出

$ nvidia-driver-assistant

检测到的 GPU:

NVIDIA GeForce RTX 3070 - (pci_id 0x2484)

检测到的 系统:

Ubuntu 24.04

请复制并粘贴以下命令以安装开放内核模块版本:

sudo apt install -y nvidia-open

$ nvidia-driver-assistant --install

检测到的 GPU:

NVIDIA GeForce RTX 3070 - (pci_id 0x2484)

检测到的 系统:

Ubuntu 24.04

使用 NVIDIA 驱动程序意味着接受 NVIDIA 软件许可协议,该协议包含在 “/usr/share/nvidia-driver-assistant/driver_eula” 目录中的 “LICENSE” 文件中

正在为开放内核模块版本安装以下软件包:

sudo apt install -y nvidia-open

$ nvidia-driver-assistant --install --module-flavor closed

检测到的 GPU:

NVIDIA GeForce RTX 3070 - (pci_id 0x2484)

检测到的 系统:

Ubuntu 24.04

使用 NVIDIA 驱动程序意味着接受 NVIDIA 软件许可协议,该协议包含在 “/usr/share/nvidia-driver-assistant/driver_eula” 目录中的 “LICENSE” 文件中

正在为旧版内核模块版本安装以下软件包:

sudo apt install -y cuda-drivers

4.4.1. 自动硬件选择

从 560 版本开始,独立的 NVIDIA 驱动程序运行文件将使用硬件检测来根据检测到的 SKU 自动选择安装开放 GPU 或专有内核模块。

如果通过 ncurses 或 CLI 选择驱动程序(默认),则 CUDA 运行文件捆绑一个完整的 NVIDIA 驱动程序运行文件并传递 --silent 标志。

因此,默认情况下,用户将使用 CUDA 运行文件安装自动检测到的内核模块版本。此外,我们公开了覆盖以在 ncurses UI 高级选项中或通过 --kernel-module-type=open--kernel-module-type=proprietary 标志选择开放 GPU 或专有内核模块。

5. 内核模块

NVIDIA Linux GPU 驱动程序包含多个内核模块

  • nvidia.ko

  • nvidia-modeset.ko

  • nvidia-uvm.ko

  • nvidia-drm.ko

  • nvidia-peermem.ko

从 515 驱动程序发布系列开始,提供了这些内核模块的两种“版本”

  • 专有 - 这是 NVIDIA 历史上一直提供的版本。适用于 Maxwell、Pascal 或 Volta 架构的旧 GPU。开源 GPU 内核模块与您的平台不兼容,因此专有模块是您需要使用的。

  • 开源 - 已发布的内核模块,采用双重 MIT/GPLv2 许可。每次驱动程序发布时,开放内核模块的源代码都将发布在 https://github.com/NVIDIA/open-gpu-kernel-modules,tarball 将在 https://download.nvidia.com/XFree86/NVIDIA-kernel-module-source/ 提供。这些仅适用于 Turing 和更新的架构,如果您有其中一种架构,则应使用这些。

从 560 驱动程序发布系列开始,开放内核模块版本是默认安装。

开放 GPU 内核模块仅在 Turing 和更新的世代上受支持。要验证您的 NVIDIA GPU 至少是 Turing 或更新的

$ lspci | grep VGA

5.1. 开放 GPU 内核模块安装

为了简化,我们将软件包管理器建议浓缩为表格格式。驱动程序版本 570 之后的所有版本都将使用这些打包约定。

以下命令将安装完整驱动程序,其中将包括所有桌面组件以及用于计算工作负载的 CUDA 库和工具。

表 4 软件包管理器安装建议

发行版

安装最新版本

安装特定版本

红帽企业 Linux 8/9、Rocky Linux 8/9、麒麟OS 10、Amazon Linux 2023

# dnf module install nvidia-driver:open-dkms

# dnf module install nvidia-driver:570-open

Fedora 41

# dnf install nvidia-open

# dnf install nvidia-open

Azure Linux 2 (CBL Mariner 2.0)

# tdnf install nvidia-open

# tdnf install nvidia-open-570

openSUSE Leap 15

# zypper install nvidia-open

# zypper install nvidia-open-570

SUSE Linux 企业服务器 15 (x86_64)

# zypper install nvidia-open{-azure}

# zypper install nvidia-open{-azure}-570

SUSE Linux 企业服务器 15 (aarch64)

# zypper install nvidia-open{-64k}

# zypper install nvidia-open{-64k}-570

Debian 12

# apt install nvidia-open

# apt install nvidia-open-570

Ubuntu 20.04/22.04/24.04

# apt install nvidia-open

# apt install nvidia-open-570

5.2. 专有 GPU 内核模块安装

为了简化,我们将软件包管理器建议浓缩为表格格式。驱动程序版本 570 之后的所有版本都将使用这些打包约定。

以下命令将安装完整驱动程序,其中将包括所有桌面组件以及用于计算工作负载的 CUDA 库和工具。

表 5 专有 GPU 内核模块安装

发行版

安装最新版本

安装特定版本

红帽企业 Linux 8/9、Rocky Linux 8/9、麒麟OS 10、Amazon Linux 2023

# dnf module install nvidia-driver:latest-dkms

# dnf module install nvidia-driver:570-dkms

Fedora 41

# dnf install cuda-drivers

# dnf install cuda-drivers-570

Azure Linux 2 (CBL Mariner 2.0)

仅支持开放内核模块。

仅支持开放内核模块。

openSUSE Leap 15

# zypper install cuda-drivers

# zypper install cuda-drivers-570

SUSE Linux 企业服务器 15

# zypper install cuda-drivers

# zypper install cuda-drivers-570

Debian 12

# apt install cuda-drivers

# apt install cuda-drivers-570

Ubuntu 20.04/22.04/24.04

# apt install cuda-drivers

# apt install cuda-drivers-570

6. 红帽企业 Linux

本节介绍

  • 红帽企业 Linux 8

  • 红帽企业 Linux 9

  • Rocky Linux 8

  • Rocky Linux 9

  • Oracle Linux 8

  • Oracle Linux 9

6.1. 准备

  1. 执行预安装操作

  2. 预编译流需要内核头文件或 DKMS。如果不需要预编译内核模块,则可以使用以下命令安装当前运行内核的内核头文件和开发软件包:

    • 红帽企业 Linux 9、Rocky Linux 9、Oracle Linux 9

      # dnf install kernel-devel-matched kernel-headers
      
    • 红帽企业 Linux 8、Rocky Linux 8、Oracle Linux 8

      # dnf install kernel-devel-$(uname -r) kernel-headers
      

    注意

    在撰写本文时,Oracle UEK 内核在 Oracle Linux 上不受支持。包含所需内核头文件的软件包(应称为 kernel-uek-headers)缺失,因此 NVIDIA 模块无法为 Oracle UEK 内核变体构建。

  3. 满足第三方软件包依赖项

    NVIDIA 驱动程序 rpm 软件包依赖于其他外部软件包。这些软件包仅在第三方仓库(如 EPEL)中可用。在安装 NVIDIA 驱动程序 rpm 软件包之前,必须将任何此类第三方仓库添加到软件包管理器仓库数据库中,否则缺失的依赖项将阻止安装继续进行。

    • 红帽企业 Linux 9

      # subscription-manager repos --enable=rhel-9-for-$arch-appstream-rpms
      # subscription-manager repos --enable=rhel-9-for-$arch-baseos-rpms
      # subscription-manager repos --enable=codeready-builder-for-rhel-9-$arch-rpms
      # dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
      
    • 红帽企业 Linux 8

      # subscription-manager repos --enable=rhel-8-for-$arch-appstream-rpms
      # subscription-manager repos --enable=rhel-8-for-$arch-baseos-rpms
      # subscription-manager repos --enable=codeready-builder-for-rhel-8-$arch-rpms
      # dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
      
    • Rocky Linux 9

      # dnf config-manager --set-enabled crb
      # dnf install epel-release
      
    • Rocky Linux 8

      # dnf config-manager --set-enabled powertools
      # dnf install epel-release
      
    • Oracle Linux 9

      # dnf config-manager --set-enabled ol9_codeready_builder
      # dnf install oracle-epel-release-el9
      
    • Oracle Linux 8

      # dnf config-manager --set-enabled ol8_codeready_builder
      # dnf install oracle-epel-release-el8
      
  4. 选择安装方法:本地仓库安装网络仓库安装

6.2. 本地仓库安装

  1. 下载 NVIDIA 驱动程序

    $ wget https://developer.download.nvidia.com/compute/nvidia-driver/$version/local_installers/nvidia-driver-local-repo-$distro.$version.$arch_ext.rpm
    

    其中 $version 是 NVIDIA 驱动程序版本

  2. 在文件系统上安装本地仓库

    # rpm --install nvidia-driver-local-repo-$distro.$version*.$arch_ext.rpm
    

6.3. 网络仓库安装

  1. 启用网络仓库

    # dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/$distro/$arch/cuda-$distro.repo
    
  2. 清理 DNF 仓库缓存

    # dnf clean expire-cache
    

6.4. 驱动程序安装

这些说明适用于本地和网络安装。

模块流

# dnf module install nvidia-driver:<stream>/<profile>

开放内核模块

# dnf module install nvidia-driver:open-dkms

其中配置文件默认为 default,不需要指定。

  • DKMS 流示例:570-openopen-dkms

专有内核模块

# dnf module install nvidia-driver:latest-dkms

其中配置文件默认为 default,不需要指定。

  • DKMS 流示例:570-dkmslatest-dkms

  • 预编译流示例:570latest

6.5. 纯计算(无头)和仅桌面(无计算)安装

可以安装不包含所有桌面组件(GL、EGL、Vulkan、X 驱动程序等)的驱动程序,以限制系统上的占用空间和依赖项。 按照同样的逻辑,也可以安装不包含任何计算组件的桌面系统。

注意

在安装时排除的组件始终可以在以后阶段添加。 这将拉入所有需要的额外依赖项。

6.5.1. 仅计算系统

开放内核模块

# dnf install nvidia-driver-cuda kmod-nvidia-open-dkms

专有内核模块

# dnf install nvidia-driver-cuda kmod-nvidia-latest-dkms

6.5.2. 仅桌面系统

开放内核模块

# dnf install nvidia-driver kmod-nvidia-open-dkms

专有内核模块

# dnf install nvidia-driver kmod-nvidia-latest-dkms

6.6. 重启系统

# reboot

执行安装后操作

7. KylinOS

本节介绍

  • KylinOS 10

7.1. 准备工作

  1. 执行预安装操作

  2. 可以使用以下命令安装当前运行内核的内核头文件和开发包

    # dnf install kernel-devel-$(uname -r) kernel-headers
    
  3. 选择安装方法:本地仓库安装网络仓库安装

7.2. 本地仓库安装

  1. 下载 NVIDIA 驱动程序

    $ wget https://developer.download.nvidia.com/compute/nvidia-driver/$version/local_installers/nvidia-driver-local-repo-$distro.$version.$arch_ext.rpm
    

    其中 $version 是 NVIDIA 驱动程序版本

  2. 在文件系统上安装本地仓库

    # rpm --install nvidia-driver-local-repo-$distro.$version*.$arch_ext.rpm
    

7.3. 网络仓库安装

  1. 启用网络仓库

    # dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/$distro/$arch/cuda-$distro.repo
    
  2. 清理 DNF 仓库缓存

    # dnf clean expire-cache
    

7.4. 驱动程序安装

这些说明适用于本地和网络安装。

模块流

# dnf module install nvidia-driver:<stream>/<profile>

开放内核模块

# dnf module install nvidia-driver:open-dkms

其中配置文件默认为 default,不需要指定。

  • DKMS 流示例:570-openopen-dkms

专有内核模块

# dnf module install nvidia-driver:latest-dkms

其中配置文件默认为 default,不需要指定。

  • DKMS 流示例:570-dkmslatest-dkms

7.5. 仅计算(无头)和仅桌面(无计算)安装

可以安装不包含所有桌面组件(GL、EGL、Vulkan、X 驱动程序等)的驱动程序,以限制系统上的占用空间和依赖项。 按照同样的逻辑,也可以安装不包含任何计算组件的桌面系统。

注意

在安装时排除的组件始终可以在以后阶段添加。 这将拉入所有需要的额外依赖项。

7.5.1. 仅计算系统

开放内核模块

# dnf install nvidia-driver-cuda kmod-nvidia-open-dkms

专有内核模块

# dnf install nvidia-driver-cuda kmod-nvidia-latest-dkms

7.5.2. 仅桌面系统

开放内核模块

# dnf install nvidia-driver kmod-nvidia-open-dkms

专有内核模块

# dnf install nvidia-driver kmod-nvidia-latest-dkms

7.6. 重启系统

# reboot

执行安装后操作

8. Fedora

本节介绍

  • Fedora 41

8.1. 准备工作

  1. 执行预安装操作

  2. 可以使用以下命令安装当前运行内核的内核头文件和开发包

    # dnf install kernel-devel-matched kernel-headers
    
  3. 选择安装方法:本地仓库安装网络仓库安装

8.2. 本地仓库安装

  1. 下载 NVIDIA 驱动程序

    $ wget https://developer.download.nvidia.com/compute/nvidia-driver/$version/local_installers/nvidia-driver-local-repo-$distro.$version.$arch_ext.rpm
    

    其中 $version 是 NVIDIA 驱动程序版本

  2. 在文件系统上安装本地仓库

    # rpm --install nvidia-driver-local-repo-$distro.$version*.$arch_ext.rpm
    

8.3. 网络仓库安装

  1. 启用网络仓库

    # dnf config-manager addrepo --from-repofile=https://developer.download.nvidia.com/compute/cuda/repos/$distro/$arch/cuda-$distro.repo
    
  2. 清理 DNF 仓库缓存

    # dnf clean expire-cache
    

8.4. 驱动程序安装

这些说明适用于本地和网络安装。

分支粘性

请参考版本锁定章节的DNF 5段落。

开放内核模块

# dnf install nvidia-open

专有内核模块

# dnf install cuda-drivers

8.5. 仅计算(无头)和仅桌面(无计算)安装

可以安装不包含所有桌面组件(GL、EGL、Vulkan、X 驱动程序等)的驱动程序,以限制系统上的占用空间和依赖项。 按照同样的逻辑,也可以安装不包含任何计算组件的桌面系统。

注意

在安装时排除的组件始终可以在以后阶段添加。 这将拉入所有需要的额外依赖项。

8.5.1. 仅计算系统

开放内核模块

# dnf install nvidia-driver-cuda kmod-nvidia-open-dkms

专有内核模块

# dnf install nvidia-driver-cuda kmod-nvidia-latest-dkms

8.5.2. 仅桌面系统

开放内核模块

# dnf install nvidia-driver kmod-nvidia-open-dkms

专有内核模块

# dnf install nvidia-driver kmod-nvidia-latest-dkms

8.6. 重启系统

# reboot

执行安装后操作

9. SUSE

本节介绍

  • SUSE Linux Enterprise 15

  • OpenSUSE Leap 15

9.1. 准备工作

  1. 执行预安装操作

  2. 可以使用以下命令安装当前运行内核的内核开发包

    # zypper install -y kernel-<variant>-devel=<version>
    

    注意

    <variant> 可以是:default64k(对于 aarch64)或 defaultazure(对于 x86_64)。

    要运行上述命令,您需要当前运行内核的变体和版本。 使用 uname 命令的输出来确定当前运行内核的变体和版本

    $ uname -r
    3.16.6-2-default
    

    在上面的示例中,变体是 default,版本是 3.16.6-2

    可以使用以下命令安装默认内核变体的内核开发包

    # zypper install -y kernel-default-devel=$(uname -r | sed 's/\-default//')
    
  3. 可以使用以下命令安装当前运行内核的内核头文件和开发包

    # zypper install -y kernel-<variant>-devel=$(uname -r | sed 's/\-default//')
    
  4. 将用户添加到视频组

    # usermod -a -G video <username>
    
  5. 选择安装方法:本地仓库安装网络仓库安装

9.2. 本地仓库安装

  1. 下载 NVIDIA 驱动程序

    $ wget https://developer.download.nvidia.com/compute/nvidia-driver/$version/local_installers/nvidia-driver-local-repo-$distro.$version.$arch_ext.rpm
    

    其中 $version 是 NVIDIA 驱动程序版本

  2. 在文件系统上安装本地仓库

    # rpm --install nvidia-driver-local-repo-$distro.$version*.$arch_ext.rpm
    

9.3. 网络仓库安装

  1. 启用网络仓库

    # zypper addrepo https://developer.download.nvidia.com/compute/cuda/repos/$distro/$arch/cuda-$distro.repo
    
  2. 刷新 Zypper 仓库缓存

    # SUSEConnect --product PackageHub/15/<architecture>
    # zypper refresh
    

9.4. 驱动程序安装

这些说明适用于本地和网络安装。

开放内核模块

# zypper -v install nvidia-open

注意

默认内核风味是 default

在 SUSE Linux Enterprise Server 15 (x86_64) 上,可以使用 azure 内核风味

# zypper -v install nvidia-open-azure

注意

在 SBSA 上,默认内核风味是 64kb

在 SUSE Linux Enterprise Server 15 (aarch64) 上,可以使用 64kb 内核风味。 这仅 Grace-Hopper 需要。

# zypper -v install nvidia-open-64k

专有内核模块

# zypper -v install cuda-drivers

注意

默认内核风味是 “default”。

在 SUSE Linux Enterprise Server 15 (x86_64) 上,可以使用 azure 内核风味

# zypper -v install nvidia-driver-G06-kmp-azure
# zypper -v install cuda-drivers

注意

在 SBSA 上,默认内核风味是 64kb

在 SUSE Linux Enterprise Server 15 (aarch64) 上,可以使用 64kb 内核风味。 这仅 Grace-Hopper 需要。

# zypper -v install nvidia-driver-G06-kmp-64kb
# zypper -v install cuda-drivers

在 SUSE Linux Enterprise Server 15 (aarch64) 上,可以使用 default 内核风味。 这仅非 Grace-Hopper 需要。

# zypper -v install nvidia-driver-G06-kmp-default
# zypper -v install cuda-drivers

9.5. 仅计算(无头)和仅桌面(无计算)安装

可以安装不包含所有桌面组件(GL、EGL、Vulkan、X 驱动程序等)的驱动程序,以限制系统上的占用空间和依赖项。 按照同样的逻辑,也可以安装不包含任何计算组件的桌面系统。

注意

在安装时排除的组件始终可以在以后阶段添加。 这将拉入所有需要的额外依赖项。

9.5.1. 仅计算系统

开放内核模块

# zypper -v install nvidia-compute-G06 nvidia-open-driver-G06-kmp-default

专有内核模块

# zypper -v install nvidia-compute-G06 nvidia-driver-G06-kmp-default

9.5.2. 仅桌面系统

开放内核模块

# zypper -v install nvidia-video-G06 nvidia-open-driver-G06-kmp-default

专有内核模块

# zypper -v install nvidia-video-G06 nvidia-driver-G06-kmp-default

9.6. 重启系统

# reboot

执行安装后操作

10. Ubuntu

本节介绍

  • Ubuntu 20.04

  • Ubuntu 22.04

  • Ubuntu 24.04

10.1. 准备工作

  1. 执行预安装操作

  2. 可以使用以下命令安装当前运行内核的内核头文件和开发包

    # apt install linux-headers-$(uname -r)
    
  3. 选择安装方法:本地仓库安装网络仓库安装

10.2. 本地仓库安装

  1. 下载 NVIDIA 驱动程序

    $ wget https://developer.download.nvidia.com/compute/nvidia-driver/$version/local_installers/nvidia-driver-local-repo-$distro-$version_$arch_ext.deb
    

    其中 $version 是 NVIDIA 驱动程序版本

  2. 在文件系统上安装本地仓库

    # dpkg -i nvidia-driver-local-repo-$distro-$version_$arch_ext.deb
    # apt update
    
  3. 注册临时公钥

    # cp /var/nvidia-driver-local-repo-$distro-$version/nvidia-driver-*-keyring.gpg /usr/share/keyrings/
    

10.3. 网络仓库安装

安装新的 cuda-keyring 软件包

$ wget https://developer.download.nvidia.com/compute/cuda/repos/$distro/$arch/cuda-keyring_1.1-1_all.deb
# dpkg -i cuda-keyring_1.1-1_all.deb
# apt update

如果您无法安装 cuda-keyring 软件包,您可以按照这些说明操作

  1. 注册新的签名密钥

    $ wget https://developer.download.nvidia.com/compute/cuda/repos/$distro/$arch/cuda-archive-keyring.gpg
    # mv cuda-archive-keyring.gpg /usr/share/keyrings/cuda-archive-keyring.gpg
    
  2. 启用网络仓库

    # echo "deb [signed-by=/usr/share/keyrings/cuda-archive-keyring.gpg] https://developer.download.nvidia.com/compute/cuda/repos/$distro/$arch/ /" \
        | tee /etc/apt/sources.list.d/cuda-$distro-$arch.list
    

10.4. 驱动程序安装

这些说明适用于本地和网络安装。

开放内核模块

# apt install nvidia-open

专有内核模块

# apt install cuda-drivers

10.5. 重启系统

# reboot

执行安装后操作

11. Debian

本节介绍

  • Debian 12

11.1. 准备工作

  1. 执行预安装操作

  2. 可以使用以下命令安装当前运行内核的内核头文件和开发包

    # apt install linux-headers-$(uname -r)
    
  3. 启用 contrib 仓库

    # add-apt-repository contrib
    
  4. 选择安装方法:本地仓库安装网络仓库安装

11.2. 本地仓库安装

  1. 下载 NVIDIA 驱动程序

    $ wget https://developer.download.nvidia.com/compute/nvidia-driver/$version/local_installers/nvidia-driver-local-repo-$distro-$version_$arch_ext.deb
    

    其中 $version 是 NVIDIA 驱动程序版本

  2. 在文件系统上安装本地仓库

    # dpkg -i nvidia-driver-local-repo-$distro-$version*_$arch_ext.deb
    # apt update
    
  3. 注册临时公钥

    # cp /var/nvidia-driver-local-repo-$distro-$version/nvidia-driver-*-keyring.gpg /usr/share/keyrings/
    

11.3. 网络仓库安装

  1. 安装新的 cuda-keyring 软件包

    $ wget https://developer.download.nvidia.com/compute/cuda/repos/$distro/$arch/cuda-keyring_1.1-1_all.deb
    # dpkg -i cuda-keyring_1.1-1_all.deb
    # apt update
    

如果您无法安装 cuda-keyring 软件包,您可以按照这些说明操作

  1. 注册新的签名密钥

    $ wget https://developer.download.nvidia.com/compute/cuda/repos/$distro/$arch/cuda-archive-keyring.gpg
    # mv cuda-archive-keyring.gpg /usr/share/keyrings/cuda-archive-keyring.gpg
    
  2. 启用网络仓库

    # echo "deb [signed-by=/usr/share/keyrings/cuda-archive-keyring.gpg] https://developer.download.nvidia.com/compute/cuda/repos/$distro/$arch/ /" \
        | tee /etc/apt/sources.list.d/cuda-$distro-$arch.list
    

11.4. 驱动程序安装

这些说明适用于本地和网络安装。

开放内核模块

# apt -V install nvidia-open

专有内核模块

# apt -V install cuda-drivers

11.5. 仅计算(无头)和仅桌面(无计算)安装

可以安装不包含所有桌面组件(GL、EGL、Vulkan、X 驱动程序等)的驱动程序,以限制系统上的占用空间和依赖项。 按照同样的逻辑,也可以安装不包含任何计算组件的桌面系统。

注意

在安装时排除的组件始终可以在以后阶段添加。 这将拉入所有需要的额外依赖项。

11.5.1. 仅计算系统

开放内核模块

# apt -V install nvidia-driver-cuda nvidia-kernel-open-dkms

专有内核模块

# apt -V install nvidia-driver-cuda nvidia-kernel-dkms

11.5.2. 仅桌面系统

开放内核模块

# apt -V install nvidia-driver nvidia-kernel-open-dkms

专有内核模块

# apt -V install nvidia-driver nvidia-kernel-dkms

11.6. 重启系统

# reboot

执行安装后操作

12. Amazon Linux

本节介绍

  • Amazon Linux 2023

12.1. 准备工作

  1. 执行预安装操作

  2. 可以使用以下命令安装当前运行内核的内核头文件和开发包

    # dnf install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
    
  3. 选择安装方法:本地仓库安装网络仓库安装

12.2. 本地仓库安装

  1. 下载 NVIDIA 驱动程序

    $ wget https://developer.download.nvidia.com/compute/nvidia-driver/$version/local_installers/nvidia-driver-local-repo-$distro.$version.$arch_ext.rpm
    

    其中 $version 是 NVIDIA 驱动程序版本

  2. 在文件系统上安装本地仓库

    # rpm --install nvidia-driver-local-repo-$distro.$version*.$arch_ext.rpm
    

12.3. 网络仓库安装

  1. 启用网络仓库

    # dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/$distro/$arch/cuda-$distro.repo
    
  2. 清理 DNF 仓库缓存

    # dnf clean expire-cache
    

12.4. 驱动程序安装

这些说明适用于本地和网络安装。

模块流

# dnf module install nvidia-driver:<stream>/<profile>

开放内核模块

# dnf module install nvidia-driver:open-dkms

其中配置文件默认为 default,不需要指定。

  • DKMS 流示例:570-openopen-dkms

专有内核模块

# dnf module install nvidia-driver:latest-dkms

其中配置文件默认为 default,不需要指定。

  • DKMS 流示例:570-dkmslatest-dkms

12.5. 重启系统

# reboot

执行安装后操作

13. Azure Linux

本节介绍

  • Azure Linux 2 (CBL Mariner 2.0)

13.1. 准备工作

  1. 执行预安装操作

  2. 可以使用以下命令安装当前运行内核的内核头文件和开发包

    # tdnf install kernel-devel-$(uname -r) kernel-headers-$(uname -r) kernel-modules-extra-$(uname -r)
    
  3. 启用 Mariner extended 仓库

    # tdnf install mariner-repos-extended
    
  4. 选择安装方法:本地仓库安装网络仓库安装

13.2. 本地仓库安装

  1. 下载 NVIDIA 驱动程序

$ wget https://developer.download.nvidia.com/compute/nvidia-driver/$version/local_installers/nvidia-driver-local-repo-$distro.$version.$arch_ext.rpm

其中 $version 是 NVIDIA 驱动程序版本

  1. 在文件系统上安装本地仓库

    # rpm --install nvidia-driver-local-repo-$distro.$version*.$arch_ext.rpm
    

13.3. 网络仓库安装

  1. 启用网络仓库

    # tdnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/$distro/$arch/cuda-$distro.repo
    
  2. 清理 DNF 仓库缓存

    # tdnf clean expire-cache
    

13.4. 驱动程序安装

这些说明适用于本地和网络安装。

# tdnf install nvidia-open

13.5. 重启系统

# reboot

执行安装后操作

14. 高级选项

本节包含有关基本说明中未涵盖的一些高级设置场景的信息。

14.1. 在驱动程序模块风味之间切换

使用以下步骤在系统上的 NVIDIA 驱动程序专有模块风味和开源模块风味之间切换。

注意

XXX 替换为 NVIDIA 驱动程序分支号,例如 570。

Amazon Linux 2023、KylinOS 10、Red Hat Enterprise Linux 8/9、Rocky Linux 8/9、Oracle Linux 8/9

要在专有内核模块和开源内核模块之间切换

# dnf -y module switch-to nvidia-driver:<stream> --allowerasing

Fedora 41

要从专有切换到开源

# dnf install --allowerasing nvidia-open

要从开源切换到专有

# dnf install --allowerasing cuda-drivers

如果您已完成桌面或仅计算安装,则只需切换内核模块软件包即可。 例如,要从专有切换到开源

# dnf install --allowerasing kmod-nvidia-open-dkms

Azure Linux 2 (CBL Mariner 2.0)

仅支持开源内核模块,无法切换。

Ubuntu 20.04/22.04/24.04、Debian 12

要从专有切换到开源

# apt install --autoremove --purge nvidia-open

要从开源切换到专有

# apt install --autoremove --purge cuda-drivers

OpenSUSE Leap 15、SUSE Linux Enterprise Server 15

要从专有切换到开源

# zypper install --details --force-resolution nvidia-open-XXX

要从开源切换到专有

# zypper install --details --force-resolution cuda-drivers-XXX

14.2. 元软件包

元软件包是 rpm/deb 软件包,其中不包含(或包含少量)文件,但具有多个依赖项。 它们用于在您可能不知道所需软件包的详细信息时安装许多 CUDA 软件包。 下表列出了元软件包。 并非所有下列出的软件包都可在每个发行版上使用。 有时它们由其他软件包提供,有时不需要它们,因为发行版提供了其他机制来提供分支隔离(例如 DNF 模块)。

表 6 内核模块元软件包

元软件包

目的

nvidia-open

安装所有 NVIDIA 开源 GPU 内核模块驱动程序软件包。 处理升级到驱动程序软件包的下一个版本(发布时)。

nvidia-open-570

安装所有 NVIDIA 开源 GPU 内核模块驱动程序软件包。 不会升级到 570.xxx 分支驱动程序之外。

cuda-drivers

安装所有 NVIDIA 专有内核模块驱动程序软件包。 处理升级到驱动程序软件包的下一个版本(发布时)。

cuda-drivers-570

安装所有 NVIDIA 专有内核模块驱动程序软件包。 不会升级到 570.xx 分支驱动程序之外。

14.3. 软件包升级

当新版本可用时,特定于发行版的正常软件包更新命令应足以升级驱动程序。 当执行升级到不同分支时,发行版中的各种差异将处理过时和软件包切换。

以下部分显示了一些可以执行的命令示例。

14.3.1. Red Hat Enterprise Linux 8/9、Rocky Linux 8/9、Oracle Linux 8/9、KylinOS 10、Amazon Linux 2023

当将驱动程序升级到相同流时

# dnf update

当将驱动程序升级到不同流时

# dnf module reset nvidia-driver
# dnf module enable nvidia-driver:<stream>
# dnf update --allowerasing

或者当从专有模块切换到开源模块时

# dnf module reset nvidia-driver
# dnf module enable nvidia-driver:<stream>
# dnf install nvidia-open --allowerasing

14.3.2. Fedora 41

如果系统上配置了 DNF 锁定,请调整配置或完全删除锁定。 有关更多信息,请参考版本锁定章节的DNF 5段落。

当将驱动程序升级到同一分支或较新分支,且未配置任何 DNF 锁定时

# dnf update

当从专有模块切换到开源模块时

# dnf install nvidia-open --allowerasing

这将删除任何会删除依赖项的软件包。

14.3.3. Azure Linux 2 (CBL Mariner 2.0)

当将驱动程序升级到相同流时

# tdnf update

当将驱动程序升级到不同流时

# tdnf install --allowerasing nvidia-open-570

这将删除任何会删除依赖项的软件包。

14.3.4. SUSE Enterprise Linux Server 15、OpenSUSE Leap 15

当将驱动程序升级到相同流时

# zypper update --details

当将驱动程序升级到不同流时

# zypper install --details --force-resolution nvidia-open-570

这将删除任何会阻止您到达目标的软件包。

14.3.5. Debian 12、Ubuntu 20.04/22.04/24.04

当更新同一驱动程序分支或没有特定跟踪分支的软件包时

# apt update

或者更激进一点,以考虑在驱动程序版本之间可能已更改的保留软件包,例如从 nvidia-open-565 升级到 nvidia-open-570

# apt dist-upgrade --autoremove --purge

这将删除任何会删除依赖项的软件包。

14.4. Red Hat Enterprise Linux 8/9 预编译流

预编译流提供了一种简化安装过程的可选方法。 预编译流的优点

  • 由 Red Hat 签名:允许完全启用安全启动和内核签名验证

  • 预编译:驱动程序和/或内核更新后启动更快

  • 预测试:内核和驱动程序组合已验证

  • 删除编译器和关联的依赖项:不需要安装编译器

  • 删除 DKMS 依赖项:不需要启用 EPEL 仓库

  • 删除 kernel-devel 和 kernel-headers 依赖项:如果缺少匹配的软件包,则不会出现黑屏

使用预编译驱动程序时,会启用 DNF 软件包管理器的插件,以防止系统崩溃,方法是阻止升级到尚无预编译驱动程序的内核。 这可能会延迟内核更新的应用,但确保始终使用经过测试的内核和驱动程序组合。 在该升级情况下,dnf 会显示警告

NVIDIA driver: some kernel packages have been filtered due to missing precompiled modules.
Please run "dnf nvidia-plugin" as a command to see a report on the filter being applied.

通过以独立命令形式运行插件,可以显示系统可用的所有内核和预编译模块的更多信息。 例如

# dnf nvidia-plugin
Last metadata expiration check: 0:27:16 ago on Wed 20 Nov 2024 08:09:53 PM CET.

Installed kernel(s):
  kernel-core-5.14.0-503.14.1.el9_5.x86_64
  kernel-core-5.14.0-427.42.1.el9_4.x86_64

Available kernel(s):
  kernel-core-5.14.0-503.11.1.el9_5.x86_64
  kernel-core-5.14.0-503.14.1.el9_5.x86_64

Available driver(s):
  nvidia-driver-3:565.57.01-1.el9.x86_64
  nvidia-driver-cuda-3:565.57.01-1.el9.x86_64

Available kmod(s):
  kmod-nvidia-3:565.57.01-2.el9.x86_64

GitHub 上提供了打包模板和说明,允许您为自定义内核和衍生 Linux 发行版维护自己的预编译内核模块软件包:NVIDIA/yum-packaging-precompiled-kmod

要在 RHEL 8 或 RHEL 9 上使用新的驱动程序软件包

  1. 首先,确保已启用必要的 Red Hat 仓库。

    与正常的 DKMS 安装相比,这需要在系统上启用的仓库更少。

    红帽企业 Linux 8

    # subscription-manager repos --enable=rhel-8-for-x86_64-appstream-rpms
    # subscription-manager repos --enable=rhel-8-for-x86_64-baseos-rpms
    

    红帽企业 Linux 9

    # subscription-manager repos --enable=rhel-9-for-x86_64-appstream-rpms
    # subscription-manager repos --enable=rhel-9-for-x86_64-baseos-rpms
    
  2. 根据所需的驱动程序,选择以下选项之一

    • latest 始终更新到版本最高的驱动程序(预编译)

      # dnf module install nvidia-driver:latest
      
    • 将驱动程序更新锁定到指定的驱动程序分支(预编译)。 将 <id> 替换为适当的驱动程序分支流,例如 570、560、550 等。

      # dnf module install nvidia-driver:<id>
      

有关更多信息,请参考驱动程序仓库中的预编译文件夹

14.4.1. 预编译流支持矩阵

下表显示了每个驱动程序支持的预编译流、旧版 DKMS 流和开源 DKMS 流的示例。

表 7 流支持矩阵

NVIDIA 驱动程序

预编译流

旧版 DKMS 流

开源 DKMS 流

最高版本

latest

latest-dkms

open-dkms

锁定在 570.x

570

570-dkms

570-open

锁定在 565.x

565

565-dkms

565-open

锁定在 560.x

560

560-dkms

560-open

锁定在 550.x

550

550-dkms

550-open

在模块流之间切换之前,首先重置 DNF 模块

# dnf module reset nvidia-driver

或作为替代方案

# dnf module switch-to nvidia-driver:<stream>

14.5. 模块化配置文件

模块化配置文件适用于任何受支持的模块化流,并允许其他用例。 这些模块化配置文件在 Amazon Linux 2023、KylinOS 10 和 Red Hat Enterprise Linux 8/9 上可用。

表 8 模块化配置文件

配置文件

用例

默认

/default

安装流中的所有驱动程序软件包。

Kickstart

/ks

使用配置文件执行无人值守的 Linux 操作系统安装。

NVSwitch Fabric

/fm

安装所有驱动程序软件包以及引导 NVSwitch 系统所需的组件(包括 Fabric Manager 和 NSCQ 遥测)。

/src

用于编译的源头文件(仅限预编译流)。

例如

# dnf module install nvidia-driver:<stream>/default
# dnf module install nvidia-driver:<stream>/ks
# dnf module install nvidia-driver:<stream>/fm
# dnf module install nvidia-driver:<stream>/src

您可以使用 BASH 花括号展开来安装多个模块化配置文件,例如

# dnf module install nvidia-driver:latest/{default,src}

有关更多信息,请参考开发者博客

14.6. Red Hat Enterprise Linux 8/9 Kickstart 安装

按如下方式编辑 Kickstart 配置文件。

红帽企业 Linux 8、Rocky Linux 8、Oracle Linux 8

  1. 启用 EPEL 仓库

    repo --name=epel --baseurl=http://download.fedoraproject.org/pub/epel/8/Everything/x86_64/
    
  2. 启用 CUDA 仓库

    repo --name=cuda-rhel8 --baseurl=https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/
    
  3. 如果您未使用 570 或更高版本的驱动程序,请确保在 Kickstart 文件的 packages 部分中使用 /ks 配置文件

    @nvidia-driver:open-dkms/ks
    

从 570 及更高版本开始,不需要这样做,您可以跳过 /ks 配置文件。

  1. 执行安装后操作

红帽企业 Linux 9、Rocky Linux 9、Oracle Linux 9

  1. 启用 EPEL 仓库

    repo --name=epel --baseurl=http://download.fedoraproject.org/pub/epel/9/Everything/x86_64/
    
  2. 启用 CUDA 仓库

    repo --name=cuda-rhel9 --baseurl=https://developer.download.nvidia.com/compute/cuda/repos/rhel9/x86_64/
    
  3. 如果您未使用 570 或更高版本的驱动程序,请确保在 Kickstart 文件的 packages 部分中使用 /ks 配置文件

    @nvidia-driver:open-dkms/ks
    
  4. 执行安装后操作

14.7. 版本锁定

对于在同一仓库内没有机制来明确隔离分支的发行版,可以使用正常的发行版版本锁定机制。 以下是一些关于如何锁定到特定驱动程序分支的示例。

以下示例都指的是为分支 570 配置版本锁定。 确保您要锁定到特定分支的每个软件包在配置文件中都有相应的行/代码块。

14.7.1. DNF 4

DNF 版本 4 是以下发行版的软件包管理器

  • 红帽企业 Linux 8 / Rocky Linux 8 / Oracle Linux 8

  • 红帽企业 Linux 9 / Rocky Linux 9 / Oracle Linux 9

  • 麒麟 10

  • Amazon Linux 2023

确保已安装 python3-dnf-plugin-versionlock 软件包以使用它。 只需运行 dnf versionlock 命令即可自动填充文件 /etc/dnf/plugins/versionlock.list 并锁定特定的驱动程序版本

# dnf4 versionlock \*nvidia\*570\*
Adding versionlock on: kmod-nvidia-open-dkms-3:570.51-1.fc41.*
Adding versionlock on: nvidia-kmod-common-3:570.51-1.fc41.*
Adding versionlock on: nvidia-driver-cuda-libs-3:570.51-1.fc41.*
Adding versionlock on: nvidia-open-3:570.51-1.fc41.*
Adding versionlock on: nvidia-xconfig-3:570.51-1.fc41.*
Adding versionlock on: xorg-x11-nvidia-3:570.51-1.fc41.*
Adding versionlock on: kmod-nvidia-latest-dkms-3:570.51-1.fc41.*
Adding versionlock on: libnvidia-cfg-3:570.51-1.fc41.*
Adding versionlock on: nvidia-driver-cuda-3:570.51-1.fc41.*
Adding versionlock on: nvidia-driver-3:570.51-1.fc41.*
Adding versionlock on: libnvidia-fbc-3:570.51-1.fc41.*
Adding versionlock on: nvidia-libXNVCtrl-devel-3:570.51-1.fc41.*
Adding versionlock on: nvidia-libXNVCtrl-3:570.51-1.fc41.*
Adding versionlock on: libnvidia-ml-3:570.51-1.fc41.*
Adding versionlock on: nvidia-modprobe-3:570.51-1.fc41.*
Adding versionlock on: nvidia-settings-3:570.51-1.fc41.*
Adding versionlock on: nvidia-driver-libs-3:570.51-1.fc41.*
Adding versionlock on: nvidia-persistenced-3:570.51-1.fc41.*

# cat /etc/dnf/plugins/versionlock.list
kmod-nvidia-open-dkms-3:570.51-1.fc41.*
nvidia-kmod-common-3:570.51-1.fc41.*
nvidia-driver-cuda-libs-3:570.51-1.fc41.*
nvidia-open-3:570.51-1.fc41.*
nvidia-xconfig-3:570.51-1.fc41.*
xorg-x11-nvidia-3:570.51-1.fc41.*
kmod-nvidia-latest-dkms-3:570.51-1.fc41.*
libnvidia-cfg-3:570.51-1.fc41.*
nvidia-driver-cuda-3:570.51-1.fc41.*
nvidia-driver-3:570.51-1.fc41.*
libnvidia-fbc-3:570.51-1.fc41.*
nvidia-libXNVCtrl-devel-3:570.51-1.fc41.*
nvidia-libXNVCtrl-3:570.51-1.fc41.*
libnvidia-ml-3:570.51-1.fc41.*
nvidia-modprobe-3:570.51-1.fc41.*
nvidia-settings-3:570.51-1.fc41.*
nvidia-driver-libs-3:570.51-1.fc41.*
nvidia-persistenced-3:570.51-1.fc41.*

另一种方法是手动编辑配置文件 /etc/dnf/plugins/versionlock.list 并使用以下内容填充它,以将驱动程序固定到特定分支,而不再是特定版本

kmod-nvidia*3:570*
libnvidia*3:570*
nvidia-driver*3:570*
nvidia-kmod-common-3:570*
nvidia-libXNVCtrl*3:570*
nvidia-modprobe-3:570*
nvidia-open-3:570*
nvidia-persistenced-3:570*
nvidia-settings-3:570*
nvidia-xconfig-3:570*
xorg-x11-nvidia-3:570*

14.7.2. DNF 5

DNF 版本 5 是以下发行版的软件包管理器

  • Fedora 41

只需运行 dnf versionlock add 命令即可填充文件 /etc/dnf/versionlock.toml(然后可以对其进行编辑或保持原样)以锁定特定的驱动程序版本

# dnf versionlock add \*nvidia\*570\*

警告

由于 DNF 5 错误,在编写本文时(版本 5.2.8.1),该命令无法正常工作。

或者,可以配置 DNF 5 以在配置文件中指定范围,但这非常冗长。 使用以下内容配置文件 /etc/dnf/versionlock.toml

警告

由于 DNF 5 错误,在编写本文时(版本 5.2.8.1),无法使用 key = "version"。 因此,需要使用 key = "evr" 的范围,并在版本 value 中包含 Epoch

version = "1.0"

[[packages]]
name = "kmod-nvidia*"
[[packages.conditions]]
key = "evr"
comparator = ">="
value = "3:570"
[[packages.conditions]]
key = "evr"
comparator = "<"
value = "3:575"

[[packages]]
name = "libnvidia*"
[[packages.conditions]]
key = "evr"
comparator = ">="
value = "3:570"
[[packages.conditions]]
key = "evr"
comparator = "<"
value = "3:575"

[[packages]]
name = "nvidia-driver*"
[[packages.conditions]]
key = "evr"
comparator = ">="
value = "3:570"
[[packages.conditions]]
key = "evr"
comparator = "<"
value = "3:575"

[[packages]]
name = "nvidia-kmod-common*"
[[packages.conditions]]
key = "evr"
comparator = ">="
value = "3:570"
[[packages.conditions]]
key = "evr"
comparator = "<"
value = "3:575"

[[packages]]
name = "nvidia-libXNVCtrl*"
[[packages.conditions]]
key = "evr"
comparator = ">="
value = "3:570"
[[packages.conditions]]
key = "evr"
comparator = "<"
value = "3:575"

[[packages]]
name = "nvidia-modprobe*"
[[packages.conditions]]
key = "evr"
comparator = ">="
value = "3:570"
[[packages.conditions]]
key = "evr"
comparator = "<"
value = "3:575"

[[packages]]
name = "nvidia-open*"
[[packages.conditions]]
key = "evr"
comparator = ">="
value = "3:570"
[[packages.conditions]]
key = "evr"
comparator = "<"
value = "3:575"

[[packages]]
name = "nvidia-persistenced*"
[[packages.conditions]]
key = "evr"
comparator = ">="
value = "3:570"
[[packages.conditions]]
key = "evr"
comparator = "<"
value = "3:575"

[[packages]]
name = "nvidia-settings*"
[[packages.conditions]]
key = "evr"
comparator = ">="
value = "3:570"
[[packages.conditions]]
key = "evr"
comparator = "<"
value = "3:575"

[[packages]]
name = "nvidia-xconfig*"
[[packages.conditions]]
key = "evr"
comparator = ">="
value = "3:570"
[[packages.conditions]]
key = "evr"
comparator = "<"
value = "3:575"

[[packages]]
name = "xorg-x11-nvidia*"
[[packages.conditions]]
key = "evr"
comparator = ">="
value = "3:570"
[[packages.conditions]]
key = "evr"
comparator = "<"
value = "3:575"

14.8. 限制 APT 查找特定架构

修改 Ubuntu 的 apt 软件包管理器,以查询特定仓库的特定架构。 当添加了外部架构时,这很有用,这会导致在更新仓库元数据时出现“404 Not Found”错误。

您希望限制为特定架构的每个仓库都必须修改其 sources.list 条目。 这是通过修改 /etc/apt/sources.list 文件以及 /etc/apt/sources.list.d/ 目录下包含您希望限制的仓库的任何文件来完成的。 通常,仅修改 /etc/apt/sources.list 中的条目就足够了。

架构受限的仓库条目如下所示

deb [arch=<arch1>,<arch2>] <url>

例如,如果您想将仓库限制为仅 amd64 和 i386 架构,它将如下所示

deb [arch=amd64,i386] <url>

没有必要限制 deb-src 仓库,因为这些仓库不提供特定于架构的软件包。

有关更多详细信息,请参阅 sources.list 手册页。

14.9. APT 仓库文件未找到

如果出现错误:E: Failed to fetch file:/var/cuda-repo File not found 在 Debian 和 Ubuntu 系统上。

这可能在卸载不同版本后安装 CUDA 时发生。 在安装前使用以下命令

# rm -v /var/lib/apt/lists/*cuda* /var/lib/apt/lists/*nvidia*

14.10. 使用 APT 时的详细版本

使用 --verbose-versions 标志,例如

# apt install --verbose-versions nvidia-open

15. GNOME 软件集成

Gnome 软件安装面向非技术用户,仅安装驱动程序的桌面部分,而忽略计算组件。 该过程指导用户安装驱动程序并注册安全启动密钥。

目前,此过程仅在 Fedora 41 上启用,并将为所有新的基于 Red Hat 的发行版启用。

这需要已经配置/添加 NVIDIA 仓库,以便在 GNOME 软件中显示信息作为 PackageKit 下载的一部分。

15.1. 驱动程序安装

  1. 添加 NVIDIA 仓库后,搜索“nvidia driver”

    image1

    • 如果找不到任何内容,请运行以下命令以强制 PackageKit 元数据刷新,使其脱离正常的定期计划

      # pkcon refresh force
      
  2. 单击NVIDIA 显卡驱动程序项。

  3. 单击安装按钮并插入管理员密码 (root)。

    注意

    多个仓库可以为相同的软件包集提供相同的元数据。 该驱动程序也由 RPMFusion 和其他仓库提供; 因此,您必须从安装按钮右上角的下拉菜单中选择 CUDA 仓库

    image2

  4. 安装即将开始。您可以在灰色的按钮下方查看进度。

    image3

15.2. 安全启动准备

  1. 驱动安装完成后,按钮将切换为启用…。点击该按钮。

    image4

  2. 接下来您将看到 MOK 注册提示。

    • 记下该号码。这将是稍后使用的 MOK 密码。

    • 勾选我已经记下 MOK 密码复选框。

    • 点击下一步

    image5

  3. 点击重启并注册 MOK 按钮。

    • 系统将再次要求您输入管理员密码 (root),然后系统将重启。

    image6

然后,您可以继续注册本地生成的 MOK。请参阅 机器所有者密钥注册 部分以继续。

15.3. 机器所有者密钥注册

注意

本节是 Fedora 机器所有者密钥注册文档页面上发布内容的副本。

为了在 NVIDIA 驱动安装后成功重启,您必须在 GNOME 软件中注册您在安装期间创建的机器所有者密钥。重启期间,您将看到 mokutil 工具。

  1. 按任意键开始。

    image7

  2. 选择Enroll MOK(注册 MOK)

    image8

  3. 选择Continue(继续)以继续

    image9

  4. 选择Yes(是)以注册密钥。

    image10

  5. 输入您在安装期间为密钥创建的 MOK 密码。

    注意

    请注意,当您输入字符时,屏幕上不会有任何反馈。

    image11

  6. 选择Reboot(重启)以重启进入启用 NVIDIA 驱动和安全启动的操作系统。

    image12

15.4. 卸载

  1. 在 GNOME 软件窗口中点击卸载以移除驱动程序。

    image13

  2. 在卸载提示中,再次点击卸载按钮。

    • 输入管理员密码 (root),GNOME 软件将继续卸载驱动程序。

    image14

  3. 可选地,您可以通过在终端中键入以下命令来移除已注册的 MOK。

    # mokutil --delete /var/lib/dkms/mok.pub
    

16. Optimus 笔记本电脑和多 GPU 桌面系统

本节专门针对具有多个 GPU 的桌面系统,适用于以下类型的系统:

  • Optimus 笔记本电脑(例如集成 Intel GPU + 独立 NVIDIA GPU)。

  • 具有来自不同供应商的 GPU 的桌面工作站(例如集成 AMD GPU + 独立 NVIDIA GPU)。

  • 具有多个 NVIDIA GPU 的桌面工作站。

无需进行太多配置,并且几年来,在大多数常见情况下,即使在不使用 NVIDIA 驱动程序时,一切也都开箱即用。

警告

在 Optimus 笔记本电脑上,强烈建议不要使用任何旨在强制 NVIDIA GPU 始终处于开启状态的外部软件。这包括 bbswitchBumblebeeSUSEPrimeenvycontrolnvidia-prime。这些项目中的大多数实际上已被放弃,并且通常会产生比好处更多的问题。

唯一的例外是 switcheroo-control,它与系统集成良好。大多数情况下,它带有 switcherooctl 的软件包名称,并且通常在大多数发行版上默认预装在桌面环境中。

让我们考虑一个非常常见的情况,一台带有 Intel + NVIDIA GPU 的笔记本电脑(Dell Precision 5680,NVIDIA Optimus)。GPU 如下所示:

$ lspci | grep -i vga
00:02.0 VGA compatible controller: Intel Corporation Raptor Lake-P [Iris Xe Graphics] (rev 04)
01:00.0 VGA compatible controller: NVIDIA Corporation AD104GLM [RTX 3500 Ada Generation Laptop GPU] (rev a1)

我们将使用 lspci 命令的输出,以获取每个 GPU 的 <bus#>:<device#>.<function#>。本节将在全文中使用它来区分 Intel GPU (00:02.0) 和 NVIDIA GPU (01:00.0)。

16.1. 电源管理

系统启动时,图形输出由集成的 Intel GPU 驱动,而 NVIDIA GPU 处于关闭状态。

$ cat /sys/bus/pci/devices/0000:{00:02.0,01:00.0}/power/runtime_status
active
suspended

一个简单的命令(例如 lspcinvidia-settings),只要访问 PCI 卡,就足以唤醒 NVIDIA GPU 进行探测。

$ lspci > /dev/null
$ cat /sys/bus/pci/devices/0000:{00:02.0,01:00.0}/power/runtime_status
active
active

几秒钟后,GPU 再次进入挂起状态。

$ cat /sys/bus/pci/devices/0000:{00:02.0,01:00.0}/power/runtime_status
active
suspended

如果没有程序使用 GPU,则转换始终很快;GPU 通常只需 4 或 5 秒即可关闭。例如,退出游戏后,当 GPU 关闭时,您可以立即听到风扇停止转动。

这是在使用开源 DRM 驱动程序或 NVIDIA 驱动程序时检查 GPU 电源状态的最简单方法。

16.1.1. VGA Switcheroo(仅限 DRM 驱动程序)

如果您使用的是开源驱动程序,一旦两个 GPU 驱动程序和一个处理程序在 vga_switcheroo 中注册,VGA Switcheroo 文件就会出现。由于多个 GPU 使用通用框架,因此 vga_switcheroo 已启用,我们可以操作设备的状态。默认 GPU 标有 * 符号。

$ sudo cat /sys/kernel/debug/vgaswitcheroo/switch
0:IGD:+:Pwr:0000:00:02.0
1:DIS-Audio: :DynOff:0000:01:00.1
2:DIS: :DynOff:0000:01:00.0

在启动 GPU 以进行工作负载后,我们可以看到状态反映在虚拟文件中。

$ sudo cat /sys/kernel/debug/vgaswitcheroo/switch
0:IGD:+:Pwr:0000:00:02.0
1:DIS-Audio: :DynOff:0000:01:00.1
2:DIS: :DynPwr:0000:01:00.0

DIS-Audio 设备(独立音频)是 GPU 上的实际 HDA 声卡,用于将音频发送到外部输出(例如,连接到 HDMI 端口的电视)。这也受 VGA Switcheroo 设备动态控制的控制。

配置很灵活,因此例如,您可以拥有两个或多个独立 GPU 和一个额外的音频控制器,用于可能的 HDMI 端口。

您还可以做一些非常底层的操作。这是一个示例命令,用于将显示输出切换到独立 GPU,如果您有一个旧系统,其中 GPU 已断开连接,并且使用 MUX 来切换显示输出。

$ sudo echo MDIS > /sys/kernel/debug/vgaswitcheroo/switch

16.2. 从桌面运行程序时选择要使用的 GPU

如果在 Gnome 或 KDE 上运行,可以直接从桌面通过右键单击应用程序图标来选择任何应用程序在独立 GPU 上运行

image16

在多个 DRI/DRM 设备的情况下,或者与 NVIDIA 专有驱动程序组合的情况下,都支持此功能。两者之间没有明显的区别。

Gnome 和 KDE 都具有一个额外的设置,可以添加到桌面菜单中以首选集成 GPU。例如,Steam 默认提供此功能。

$ cat /usr/share/applications/steam.desktop | grep -i GPU
PrefersNonDefaultGPU=true
X-KDE-RunOnDiscreteGpu=true

带有这些条目的应用程序会受到相反的处理,它们默认在独立 GPU 上运行。您可以右键单击 Steam 应用程序图标并选择内部 GPU

image17

16.3. 使用 switcherooctl 选择要使用的 GPU

系统带有一个用户空间实用程序来操作 GPU,并且还可以打印可用于寻址特定 GPU 的变量。这是 Prime / VGA Switcheroo 的情况。

$ switcherooctl list
Device: 0
  Name:        Intel Corporation Raptor Lake-P [Iris Xe Graphics]
  Default:     yes
  Environment: DRI_PRIME=pci-0000_00_02_0

Device: 1
  Name:        NVIDIA Corporation AD104GLM [RTX 3500 Ada Generation Laptop GPU]
  Default:     no
  Environment: DRI_PRIME=pci-0000_01_00_0

注意

DRI_PRIME 变量永远不会默认设置,如果没有任何其他设置,则假定为 0(因此在大多数情况下为主集成 GPU)。

在 NVIDIA 驱动程序的情况下,该工具足够智能,可以设置适当的 NVIDIA 变量以达到相同的效果。

$ switcherooctl list
Device: 0
  Name:        Intel Corporation Raptor Lake-P [Iris Xe Graphics]
  Default:     yes
  Environment: DRI_PRIME=pci-0000_00_02_0

Device: 1
  Name:        NVIDIA Corporation AD104GLM [RTX 3500 Ada Generation Laptop GPU]
  Default:     no
  Environment: __GLX_VENDOR_LIBRARY_NAME=nvidia __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only

可以将 switcherooctl 视为设置变量的替代方法。例如,如果您的系统有 4 个 GPU (0-3) 并且您想定位第 4 个 GPU,则以下命令是等效的:

$ switcherooctl launch -g 3 <command>
$ DRI_PRIME=3 <command>
$ DRI_PRIME=pci-0000_03_00_0 <command>

16.4. 使用环境变量选择要使用的 GPU

16.4.1. OpenGL 上下文

OpenGL 出现在多 GPU / 多 GPU 供应商主题出现之前。默认情况下,使用为 OpenGL 提供多 GPU 支持的 GLVND,第一个 GPU 用于在主显示器中运行 OpenGL 应用程序,而第二个 GPU 保持关闭状态。

$ glxinfo -B | grep string
OpenGL vendor string: Intel
OpenGL renderer string: Mesa Intel(R) Graphics (RPL-P)
OpenGL core profile version string: 4.6 (Core Profile) Mesa 24.0.8
OpenGL core profile shading language version string: 4.60
OpenGL version string: 4.6 (Compatibility Profile) Mesa 24.0.8
OpenGL shading language version string: 4.60
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 24.0.8
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
$ cat /sys/bus/pci/devices/0000:{00:02.0,01:00.0}/power/runtime_status
active
suspended

在 Intel + NVIDIA 驱动程序的情况下,我们可以使用驱动程序使用的 NVIDIA 变量来选择 GPU,并让系统开启额外的 GPU。

$ __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxinfo -B | grep string
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVIDIA RTX 3500 Ada Generation Laptop GPU/PCIe/SSE2
OpenGL core profile version string: 4.6.0 NVIDIA 555.42.02
OpenGL core profile shading language version string: 4.60 NVIDIA
OpenGL version string: 4.6.0 NVIDIA 555.42.02
OpenGL shading language version string: 4.60 NVIDIA
OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 555.42.02
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
$ cat /sys/bus/pci/devices/0000:{00:02.0,01:00.0}/power/runtime_status
active
active

如果我们为两个 GPU 都使用开源驱动程序,我们可以使用 Mesa DRI 变量来选择 GPU。

$ DRI_PRIME=1 glxinfo -B | grep string
OpenGL vendor string: Mesa
OpenGL renderer string: NV194
OpenGL core profile version string: 4.3 (Core Profile) Mesa 24.0.8
OpenGL core profile shading language version string: 4.30
OpenGL version string: 4.3 (Compatibility Profile) Mesa 24.0.8
OpenGL shading language version string: 4.30
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 24.0.8
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20

我们可以使用 PCI 或 VGA Switcheroo 设备来检查 GPU 的电源状态。

$ cat /sys/bus/pci/devices/0000:{00:02.0,01:00.0}/power/runtime_status
active
active
$ sudo cat /sys/kernel/debug/vgaswitcheroo/switch
0:IGD:+:Pwr:0000:00:02.0
1:DIS-Audio: :DynOff:0000:01:00.1
2:DIS: :DynPwr:0000:01:00.0

16.4.2. VA-API (视频加速 API) 上下文

视频加速 API 也可以通过使用 vainfo 命令来显示 GPU 信息。

$ vainfo | grep version
libva info: VA-API version 1.21.0
libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_21
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.21 (libva 2.21.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 24.2.3 (Full Feature Build)
$ cat /sys/bus/pci/devices/0000:{00:02.0,01:00.0}/power/runtime_status
active
suspended

VA-API 有自己的一组变量,用于在 Intel + NVIDIA 驱动程序的情况下选择要使用的驱动程序。

$ LIBVA_DRIVER_NAME=nvidia vainfo | grep version
libva info: VA-API version 1.21.0
libva info: User environment variable requested driver 'nvidia'
libva info: Trying to open /usr/lib64/dri/nvidia_drv_video.so
libva info: Found init function __vaDriverInit_1_0
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.21 (libva 2.21.0)
vainfo: Driver version: VA-API NVDEC driver [direct backend]
$ cat /sys/bus/pci/devices/0000:{00:02.0,01:00.0}/power/runtime_status
active
active

同样,使用开源堆栈,还需要设置 DRI 变量或 switcherooctl 以在正确的 GPU 上运行命令。

$ DRI_PRIME=1 LIBVA_DRIVER_NAME=nouveau vainfo | grep version
libva info: VA-API version 1.21.0
libva info: User environment variable requested driver 'nouveau'
libva info: Trying to open /usr/lib64/dri/nouveau_drv_video.so
libva info: Found init function __vaDriverInit_1_21
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.21 (libva 2.21.0)
vainfo: Driver version: Mesa Gallium driver 24.0.8 for NV194
$ cat /sys/bus/pci/devices/0000:{00:02.0,01:00.0}/power/runtime_status
active
active

16.4.3. VDPAU 上下文

VDPAU 不支持 Optimus/Prime 笔记本电脑,也不支持 Wayland。

16.4.4. Vulkan 或 EGL 上下文

Vulkan 和 EGL 在设计时考虑到了这种用例,并且要使用的 GPU 的选择与扩展相关联,因此通常程序会考虑使用适当的 API 来选择正确的 GPU。程序可以查询特定的扩展以获取 GPU 的有序列表或使用其他一些机制。这通常由程序本身执行,因此实际上没有“强制”使用特定 GPU 的方法。

例如,vkcube 允许我们选择 GPU。

$ vkcube --gpu_number 0 --c 20
Selected GPU 0: Intel(R) Graphics (RPL-P), type: IntegratedGpu
$ vkcube --gpu_number 1 --c 20
Selected GPU 1: NVIDIA RTX 3500 Ada Generation Laptop GPU, type: DiscreteGpu

与 OpenGL 上下文相反,您可以使用以下命令来显示要使用的 GPU 列表,而不仅仅是单个 GPU。

$ eglinfo -B
$ __NV_PRIME_RENDER_OFFLOAD=1 eglinfo -B
$ vulkaninfo --summary

有一些变量或程序可以用来影响用于查询 GPU 的扩展,但这并不是真正受支持的路径。应用程序根据驱动程序提供的信息和一些预定义的标准来决定。

16.4.5. 在 Wayland 上下文中强制在特定 GPU 上使用 X

到目前为止描述的所有内容也适用于 Wayland。最重要的是,当在 Wayland 桌面中启动尚不支持 Wayland 的应用程序时,将启动 Xwayland。

如果您想强制对同时支持 Wayland 和 X 的程序使用 Xwayland,那么您只需要设置一个额外的变量。例如,根据上下文(DRI、NVIDIA 等),以下所有内容都是等效的:

$ XDG_SESSION_TYPE=X11 __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxgears
$ XDG_SESSION_TYPE=X11 DRI_PRIME=1 glxgears
$ XDG_SESSION_TYPE=X11 switcherooctl launch -g 1 glxgears

17. 可选组件

17.1. Linux x86_64 的 32 位 (i686) 软件包

这些软件包提供 32 位 (i686) 驱动程序库,这些库是 Steam(流行的游戏应用商店/启动器)、较旧的视频游戏和一些计算应用程序所需的。

17.1.1. Debian 12

# dpkg --add-architecture i386
# apt update
# apt install nvidia-driver-libs:i386

17.1.2. Ubuntu 20.04/22.04/24.04

# dpkg --add-architecture i386
# apt update
# apt install \
   libnvidia-compute-<branch>:i386 libnvidia-decode-<branch>:i386 \
   libnvidia-encode-<branch>:i386 libnvidia-extra-<branch>:i386 \
   libnvidia-fbc1-<branch>:i386 libnvidia-gl-<branch>:i386

其中 <branch> 是驱动程序版本,例如 570。

17.1.3. Red Hat Enterprise Linux 8/9, Fedora 41

# dnf install nvidia-driver-cuda-libs.i686 nvidia-driver-libs.i686 libnvidia-ml.i686 libnvidia-fbc.i686

17.1.4. SUSE Enterprise Linux Server 15, OpenSUSE Leap 15

# zypper install nvidia-compute-G06-32bit nvidia-gl-G06-32bit nvidia-video-G06-32bit

17.2. GPUDirect 存储

安装 NVIDIA 文件系统。

Red Hat Enterprise Linux 8/9

# dnf install nvidia-fs

注意

不支持预编译流。GPUDirect 存储模块仅以 DKMS 格式提供。这意味着它需要模块源可用,并使预编译模块的每一项优势完全消失,包括在没有自定义 MOK 的情况下支持安全启动。

# dnf module install nvidia-driver:$stream/src

Ubuntu 20.04/22.04/24.04

# apt install nvidia-fs

17.3. NVSwitch

安装 Fabric Manager、NSCQ、NVSDM、IMEX

Red Hat Enterprise Linux 8/9

# dnf module install nvidia-driver:$stream/fm

Ubuntu 20.04/22.04/24.04

# apt install -V nvidia-fabric-manager-<branch> libnvidia-nscq-<branch> libnvsdm-<branch> nvidia-imex-<branch>

18. Tarball 和 Zip 存档交付件

为了满足不断增长的客户群对替代安装程序打包格式的需求,以及为社区 CI/CD 系统提供输入,每个组件都提供了 tarball 和 zip 存档。

这些 tarball 和 zip 存档(称为二进制存档)在 https://developer.download.nvidia.com/compute/nvidia-driver/redist/ 上提供。

_images/tarball-archives.png

这些组件 .tar.xz.zip 二进制存档不会取代现有的软件包,例如 .deb.rpm.run、conda 等,并且不适用于一般消费,因为它们不是安装程序。但是,这种标准化方法将取代现有的 .txz 存档。

对于每个版本,都提供了一个 JSON 清单,例如 redistrib_<version>.json,它对应于数据中心驱动程序发布标签,其中包括发布日期、每个组件的名称、许可证名称、每个平台的相对 URL 和校验和。

建议软件包维护人员在重新分发之前检查每个组件提供的 LICENSE。后续章节提供了使用 CMakeBazel 构建系统的开发人员的说明。

19. 安装后操作

安装后操作必须手动执行。

19.1. 持久性守护程序

NVIDIA 在 Linux 上提供了一个用户空间守护程序,以支持 CUDA 作业运行之间驱动程序状态的持久性。与持久性模式相比,守护程序方法为这个问题提供了更优雅、更强大的解决方案。有关 NVIDIA 持久性守护程序的更多详细信息,请参阅 此处的文档。

所有发行版软件包都包含一个 systemd 预设,如果作为其他驱动程序组件的依赖项安装,则会自动启用它。可以通过运行以下命令手动重启它:

# systemctl restart persistenced

19.2. 验证驱动程序版本

如果您安装了驱动程序,请验证是否加载了正确的版本。当驱动程序加载后,可以通过执行以下命令找到驱动程序版本:

$ cat /proc/driver/nvidia/version

19.3. 本地存储库移除

建议在安装驱动程序后移除本地存储库安装程序。

Amazon Linux 2023、Fedora 41、KylinOS 10、Red Hat Enterprise Linux 8/9、Rocky Linux 8/9、Oracle Linux 8/9

# dnf remove nvidia-driver-local-repo-$distro*

Azure Linux 2 (CBL Mariner 2.0)

# tdnf remove nvidia-driver-local-repo-$distro*

Ubuntu 20.04/22.04/24.04、Debian 12

# apt remove --purge nvidia-driver-local-repo-$distro*

OpenSUSE Leap 15、SUSE Linux Enterprise Server 15

# zypper remove nvidia-driver-local-repo-$distro*

20. 移除驱动程序

请按照以下步骤从系统中正确卸载 NVIDIA 驱动程序。这些步骤将确保卸载干净。

Amazon Linux 2023、KylinOS 10、Red Hat Enterprise Linux 8/9、Rocky Linux 8/9、Oracle Linux 8/9

移除 NVIDIA 驱动程序

# dnf module remove --all nvidia-driver
# dnf module reset nvidia-driver

Fedora 41

移除 NVIDIA 驱动程序

# dnf remove nvidia-driver\*

Azure Linux 2 (CBL Mariner 2.0)

移除 NVIDIA 驱动程序

# tdnf remove nvidia-driver-cuda
# tdnf autoremove

OpenSUSE 和 SLES

移除 NVIDIA 驱动程序

# zypper remove nvidia\*G06\*

Ubuntu 20.04/22.04/24.04、Debian 12

移除 NVIDIA 驱动程序

# apt remove --autoremove --purge -V nvidia-driver\* libxnvctrl\*

21. 用于签名软件包的 GPG 密钥

用于 CUDA 存储库软件包的 GPG 公钥如下:

  • rpm 基础发行版:d42d0685

  • deb 基础发行版:3bf863cc

22. 其他注意事项

现在您已经拥有支持 CUDA 的硬件并安装了 NVIDIA 驱动程序,您可以安装 CUDA 工具包。请查阅 CUDA 安装指南,位于 https://docs.nvda.net.cn/cuda/cuda-installation-guide-linux/

如需有关安装问题的技术支持,请查阅并参与开发者论坛:https://forums.developer.nvidia.com/c/gpu-graphics/linux/148

23. 常见问题解答

23.1. 为什么在 Ubuntu 上更新存储库元数据时会看到多个“404 Not Found”错误?

添加外部架构后,会出现这些错误,因为 apt 尝试在系统 sources.list 文件中列出的每个存储库中查询每个架构。不托管新添加架构软件包的存储库将显示此错误。虽然很烦人,但错误本身无害。请参阅 高级选项 部分,了解如何修改 sources.list 文件以防止这些错误。

23.2. 如何告诉 X 忽略 GPU 以仅用于计算?

要确保 X 不会将某个 GPU 用于显示,您需要指定将哪个其他 GPU 用于显示。有关更多信息,请参阅 高级选项 部分中的“使用特定 GPU 进行渲染显示”场景。

如果您系统中只有一个 NVIDIA GPU,而您只想将其用于计算(例如在 Optmus 笔记本电脑中),您可以执行仅计算安装,这将跳过驱动程序的图形组件。

23.3. 如果在执行系统更新后显示未加载或 CUDA 无法工作,我该怎么办?

系统更新可能包括更新的 Linux 内核。在许多情况下,将安装新的 Linux 内核,而未正确更新所需的 Linux 内核标头和开发软件包。为确保 CUDA 驱动程序在执行系统更新时继续工作,请重新运行 验证系统是否安装了正确的内核软件包 部分中的命令。

此外,在不重启的情况下更新内核组件时,DKMS 框架有时会在安装新的 Linux 内核时未能正确重建 NVIDIA 内核模块软件包。发生这种情况时,通常只需通过在虚拟控制台中运行适当的命令来手动调用 DKMS,然后重启即可。例如:

# dkms status
nvidia/565.57.01: added
# dkms -m nvidia/565.57.01 -k 6.11.7-300.fc41.x86_64 build

Sign command: /lib/modules/6.11.7-300.fc41.x86_64/build/scripts/sign-file
Signing key: /var/lib/dkms/mok.key
Public certificate (MOK): /var/lib/dkms/mok.pub

Cleaning build area... done.
Building module(s)....................... done.
Signing module /var/lib/dkms/nvidia/565.57.01/build/kernel-open/nvidia.ko
Signing module /var/lib/dkms/nvidia/565.57.01/build/kernel-open/nvidia-modeset.ko
Signing module /var/lib/dkms/nvidia/565.57.01/build/kernel-open/nvidia-drm.ko
Signing module /var/lib/dkms/nvidia/565.57.01/build/kernel-open/nvidia-uvm.ko
Signing module /var/lib/dkms/nvidia/565.57.01/build/kernel-open/nvidia-peermem.ko
Cleaning build area... done.
# dkms -m nvidia/565.57.01 -k 6.11.7-300.fc41.x86_64 install

Module nvidia-565.57.01 for kernel 6.11.7-300.fc41.x86_64 (x86_64):
Before uninstall, this module version was ACTIVE on this kernel.
Deleting /lib/modules/6.11.7-300.fc41.x86_64/extra/nvidia.ko.xz
Deleting /lib/modules/6.11.7-300.fc41.x86_64/extra/nvidia-modeset.ko.xz
Deleting /lib/modules/6.11.7-300.fc41.x86_64/extra/nvidia-drm.ko.xz
Deleting /lib/modules/6.11.7-300.fc41.x86_64/extra/nvidia-uvm.ko.xz
Deleting /lib/modules/6.11.7-300.fc41.x86_64/extra/nvidia-peermem.ko.xz
Running depmod.... done.

Installing /lib/modules/6.11.7-300.fc41.x86_64/extra/nvidia.ko.xz
Installing /lib/modules/6.11.7-300.fc41.x86_64/extra/nvidia-modeset.ko.xz
Installing /lib/modules/6.11.7-300.fc41.x86_64/extra/nvidia-drm.ko.xz
Installing /lib/modules/6.11.7-300.fc41.x86_64/extra/nvidia-uvm.ko.xz
Installing /lib/modules/6.11.7-300.fc41.x86_64/extra/nvidia-peermem.ko.xz
Running depmod... done.

您可以同时按下 CTRL+ALT+F2 来访问虚拟控制台。

23.4. 如何处理“Errors were encountered while processing: glx-diversions”错误?

在 565 之前的版本中尝试安装和卸载 Debian 软件包时,有时会发生这种情况。运行以下命令:

# apt remove --purge glx-diversions nvidia-alternative

23.5. 内核模块中未知的符号

nvidia.ko 内核模块加载失败,提示某些符号未知。例如:

nvidia: Unknown symbol drm_open (err 0)

检查是否有任何可选安装的模块可能提供这些符号,但目前尚未安装。

对于 drm_open 符号的示例,检查是否有任何软件包提供 drm_open 且尚未安装。例如,在 Ubuntu 上,linux-image-extra 软件包提供 DRM 内核模块(提供 drm_open)。即使内核标头反映了 DRM 的可用性,无论是否安装了此软件包,此软件包也是可选的。

然后,重新运行 移除驱动程序 部分中的命令。

24. 声明

24.1. 声明

本文档仅供参考,不得视为对产品的特定功能、条件或质量的保证。NVIDIA Corporation(“NVIDIA”)对本文档中包含信息的准确性或完整性不作任何明示或暗示的陈述或保证,并且对本文档中包含的任何错误不承担任何责任。NVIDIA 对使用此类信息造成的后果或使用,或因其使用而可能导致的侵犯第三方专利或其他权利的行为不承担任何责任。本文档不构成开发、发布或交付任何材料(如下定义)、代码或功能的承诺。

NVIDIA 保留随时对此文档进行更正、修改、增强、改进和任何其他更改的权利,恕不另行通知。

客户应在下订单前获取最新的相关信息,并应验证此类信息是否为最新且完整。

NVIDIA 产品的销售受订单确认时提供的 NVIDIA 标准销售条款和条件的约束,除非 NVIDIA 和客户的授权代表签署的个别销售协议(“销售条款”)另有约定。NVIDIA 特此明确反对将任何客户通用条款和条件应用于购买本文档中引用的 NVIDIA 产品。本文档不直接或间接地形成任何合同义务。

NVIDIA 产品并非设计、授权或保证适用于医疗、军事、航空、航天或生命支持设备,也不适用于 NVIDIA 产品的故障或故障可能合理预期会导致人身伤害、死亡或财产或环境损害的应用。NVIDIA 对在上述设备或应用中包含和/或使用 NVIDIA 产品不承担任何责任,因此,此类包含和/或使用由客户自行承担风险。

NVIDIA 不保证或声明基于本文档的产品将适用于任何特定用途。NVIDIA 不一定会对每个产品的所有参数进行测试。客户全权负责评估和确定本文档中包含的任何信息的适用性,确保产品适用于并符合客户计划的应用,并为应用执行必要的测试,以避免应用或产品的默认设置。客户产品设计中的缺陷可能会影响 NVIDIA 产品的质量和可靠性,并可能导致超出本文档中包含的附加或不同条件和/或要求。NVIDIA 对可能基于或归因于以下原因的任何默认设置、损坏、成本或问题不承担任何责任:(i) 以任何违反本文档的方式使用 NVIDIA 产品;或 (ii) 客户产品设计。

本文档未授予 NVIDIA 专利权、版权或本文档下的其他 NVIDIA 知识产权的任何明示或暗示的许可。NVIDIA 发布的有关第三方产品或服务的信息不构成 NVIDIA 授予使用此类产品或服务的许可,也不构成对其的保证或认可。使用此类信息可能需要从第三方获得其专利或其他知识产权下的许可,或从 NVIDIA 获得 NVIDIA 专利或其他知识产权下的许可。

仅在事先获得 NVIDIA 书面批准的情况下,才允许复制本文档中的信息,复制时不得进行更改,并且必须完全遵守所有适用的出口法律和法规,并附带所有相关的条件、限制和声明。

本文档和所有 NVIDIA 设计规范、参考板、文件、图纸、诊断程序、列表和其他文档(统称为“材料”)均按“原样”提供。NVIDIA 对材料不作任何明示、暗示、法定或其他方面的保证,并明确否认所有关于非侵权性、适销性和特定用途适用性的暗示保证。在法律未禁止的范围内,在任何情况下,NVIDIA 均不对因使用本文档而引起的任何损害(包括但不限于任何直接、间接、特殊、附带、惩罚性或后果性损害,无论因何种原因造成,也无论责任理论如何)承担责任,即使 NVIDIA 已被告知可能发生此类损害。尽管客户可能因任何原因而遭受任何损害,但 NVIDIA 对本文所述产品的客户的累计和累积责任应根据产品的销售条款进行限制。

24.2. OpenCL

OpenCL 是 Apple Inc. 的商标,已获得 Khronos Group Inc. 的许可使用。

24.3. 商标

NVIDIA 和 NVIDIA 徽标是 NVIDIA Corporation 在美国和其他国家/地区的商标或注册商标。其他公司和产品名称可能是与其相关的各自公司的商标。