NVIDIA GPUs 已成为加速机器学习、高性能计算( HPC )、内容创建工作流和数据中心应用程序等多种工作负载的主流。对于这些企业用例, NVIDIA 提供了一个由 CUDA 平台支持的软件堆栈:驱动程序、 CUDA -X 加速库、 CUDA – 优化的应用程序和框架。
部署 NVIDIA 驱动程序是建立 GPU 加速集群以使用 CUDA 的一个基本方面。在过去, NVIDIA 驱动程序的安装或升级都需要一个完整的软件开发环境,比如编译器工具链和内核头文件,在每个 GPU 节点上。企业用户还希望使用经过测试的 NVIDIA 驱动程序和 Linux 内核组合的组合,以获得稳定性,并能够在特定的驱动程序分支上运行,这些分支可能具有不同的生命周期。
在这篇文章中,我将介绍如何在 Red Hat Enterprise Linux ( RHEL ) 8 上打包 NVIDIA 驱动程序,以改进安装和升级驱动程序的体验。这项工作提供了几个好处 – 包括提高可靠性、安全性和可选择性。为此,请使用 RHEL8 和预编译内核模块( kmod
)包中提供的模块化流。
DNF 模块化
使用 模块化 , CUDA 存储库为驱动程序包提供多个更新流。只考虑对所选流的更新。您可以选择跟上最新和最新版本,或锁定到特定的驱动程序分支,例如,主版本等于“ 450 ”的驱动程序。
这个新机制允许您根据您的用例切换到不同的流。您可以从多个 NVIDIA GPU 驱动程序分支中选择一个,这些分支可从单个 RPM 存储库遵循。一些 NVIDIA 驱动程序 用于 NVIDIA 数据中心 GPUs ,与其他驱动程序分支相比,它们的使用寿命可能更长。企业用户可能出于稳定性的原因选择留在特定的驱动程序分支上,而其他用户可能希望跟踪其他分支以访问新功能。
您可以选择一个特定的驱动程序分支,例如 R418 ,用于跟踪更新,并且只从该分支获取更新。这些软件包还提供了一个名为 latest
和 latest-dkms
的虚拟分支,在每个时间点跟踪最新的 NVIDIA 驱动程序。默认为分支 latest-dkms
。其他的分支是可选的,并且可以在不需要重新安装 CUDA 工具箱的情况下切换分支。
使用预编译驱动程序
对于受支持的 Red Hat Enterprise Linux 8 . x 内核版本(请参阅下面的支持列表),提供了实现 DKMS 公司 替代方案的驱动程序包。无需启用 EPEL 存储库 。这些驱动程序 kmod 包的源文件是预先编译的,然后在安装时链接,因此这些文件被称为“预编译驱动程序”
新方法不需要安装 gcc
编译器,从而减少了攻击面,加快了内核和/或驱动程序更新的启动时间。使用这些预编译的 kmod
包提供了更大的稳定性,因为 NVIDIA 驱动程序版本和内核版本字符串组合已经过预测试。告别黑屏(运行级别 3 ),向可预测的用户体验问好,驱动程序安装不再依赖于 kernel-devel
和 kernel-headers
软件包。
当发布新的驱动程序更新时,只为驱动程序更新时最新发布的内核提供预编译的驱动程序包。同样,如果发布了新的内核更新,则会为该内核提供预编译的驱动程序包。另一种说法是,在任何时候,对最新的 RHEL 内核和最新的 NVIDIA 驱动程序版本(每个支持的分支)都启用预编译驱动程序。
使用预编译驱动程序时, dnf
包管理器的插件将被启用,用于清除过时的. ko 文件。为了防止系统崩溃, NVIDIA dnf 插件 还防止升级到尚未存在预编译驱动程序的内核。这可能会延迟安全修复的应用,但确保始终使用经过测试的内核和驱动程序组合。
使用包管理器安装
下面是如何开始在 RHEL8 上使用新的驱动程序包。首先,确保已启用 Red Hat 存储库,包括 RHEL8 AppStream 、 RHEL8 BaseOS 和 RHEL8 CRB :
$ subscription-manager repos --enable=rhel-8-for-x86_64-appstream-rpms $ subscription-manager repos --enable=rhel-8-for-x86_64-baseos-rpms $ subscription-manager repos --enable=codeready-builder-for-rhel-8-x86_64-rpms
添加 CUDA 网络存储库:
$ sudo dnf config-manager --add-repo=https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
安装最新的流以选择进入预编译包:
$ sudo dnf module install nvidia-driver:latest
选择模块化流
为了提高灵活性,预编译和 DKMS 变体中都有几个流可用(表 1 )。
NVIDIA driver | Precompiled stream | Legacy DKMS stream |
Highest version | latest | latest-dkms |
Locked @ 455.x | 455 | 455-dkms |
Locked @ 450.x | 450 | 450-dkms |
Locked @ 440.x | 440 | 440-dkms |
Locked @ 418.x | 418 | 418-dkms |
最新选项始终更新到最高版本的驱动程序(预编译):
$ sudo dnf module install nvidia-driver:latest
<id>
选项将驱动程序更新锁定到指定的驱动程序分支(预编译)。将 <id>
替换为适当的驱动程序分支流,例如 455 、 450 、 440 或 418 。
$ sudo dnf module install nvidia-driver:<id>
latest-dkms
选项总是更新到最高版本的驱动程序(非预编译)。这是默认流。
$ sudo dnf module install nvidia-driver:latest-dkms
<id>-dkms
选项将驱动程序更新锁定到指定的驱动程序分支(非预编译),例如 455 dkms 、 450 dkms 、 440 dkms 或 418 dkms 。
$ sudo dnf module install nvidia-driver:<id>-dkms
交换流
要切换到另一个流,请先删除驱动程序包:
$ sudo dnf remove nvidia-driver
然后,重置模块流:
$ sudo dnf module reset nvidia-driver
现在可以从适当的流安装驱动程序。
使用模块化配置文件
模块化概要文件与任何支持的模块化流一起工作,并允许附加的用例(表 2 )。
Stream | Profile | Use case |
Default | /default | Installs all the driver packages in a stream. |
Kickstart | /ks | Performs unattended Linux OS installation using a config file. |
NVSwitch Fabric | /fm | Installs all the driver packages plus components required for bootstrapping an NVSwitch system (including the Fabric Manager and NSCQ telemetry). |
现在,您可以使用 dnf
命令指定流和配置文件:
$ sudo dnf module install nvidia-driver:<stream>/<profile>
/default
选项在流中安装所有驱动程序包(可传递闭包):
$ sudo dnf module install nvidia-driver:latest/default
/ks
选项用于无人值守的 Linux 操作系统安装,使用的是不安装 cuda-drivers
元包的 cuda-drivers
配置文件。该元包尝试删除旧的驱动程序运行文件安装。
%packages @^Minimal Install @nvidia-driver:latest-dkms/ks %end
/fm
选项安装用于引导 NVSwitch 的其他软件包,包括 Fabric Manager 和 NSCQ (用于交换机遥测):
$ sudo dnf module install nvidia-driver:450/fm
RHEL 支持矩阵
目前,这些包改进仅支持 x86 _ 64 体系结构上的 RHEL 8 . 2 (及更高版本)。 NVIDIA 只为最新的官方 RHEL 内核提供预编译驱动程序包,例如 4 . 18 . 0-193 . 19 . 1 及更高版本。如果使用早期内核,请更新以开始接收预编译的驱动程序包。没有为 几何学 内核提供预编译驱动程序。
表 3 显示了根据 NVIDIA 驱动程序生命周期策略 支持的分支。
Driver Branch | Branch Designation | End of Life |
418 | Long Term Service | March 2022 |
440 | New Feature | November 2020 |
450 | Long Term Service | July 2023 |
455 | Developer | 460 availability |
新的 kmod 包通常在新的 RHEL 内核更新后 24 小时内可用。
为了防止系统崩溃, dnf
插件会在内核上线和 kmod 包可用性之间阻止内核更新。在升级过程中, dnf
会显示一条警告:
NOTE: Skipping kernel installation since no NVIDIA driver kernel module package kmod-nvidia-${driver}-${kernel} ... could be found
摘要
在 RHEL8 上部署 NVIDIA 驱动程序是使用预编译内核模块包和模块化流的更好的体验。新的驱动程序包在 CUDA 存储库 中提供,所以您可以从今天开始。
GitHub 上提供了打包模板和说明,允许您为自定义内核和衍生 Linux 发行版维护自己的预编译内核模块包:
有关更多信息,请参阅以下资源:
- 预编译内核模块:模块化流在 RHEL8 上打包和部署( GTC Fall 2020 session )
- 在 Red Hat Enterprise Linux 上简化 NVIDIA GPU 驱动程序部署 (红帽峰会 2020 )
提供反馈, 发送评论 或 报告错误 。如果您还不是会员, 加入 NVIDIA 开发者计划 。