使用模块化流简化 RHEL 8 上的 NVIDIA 驱动程序部署

NVIDIA GPU 已成为加速机器学习、高性能计算 (HPC)、内容创建工作流程和数据中心应用程序等各种工作负载的主流。对于这些企业用例,NVIDIA 提供了由 CUDA 平台支持的软件堆栈:驱动程序、CUDA-X 加速库、CUDA 优化的应用程序和框架。

空白终端屏幕

部署 NVIDIA 驱动程序是设置 GPU 加速集群以使用 CUDA 的基本方面之一。过去,安装或升级 NVIDIA 驱动程序需要在每个 GPU 节点上安装完整的软件开发环境,例如编译器工具链和内核头文件。企业用户还需要经过测试的 NVIDIA 驱动程序和 Linux 内核组合,以确保稳定性,并能够停留在可能具有不同生命周期的特定驱动程序分支上。

在本文中,我将介绍在 Red Hat Enterprise Linux (RHEL) 8 上对 NVIDIA 驱动程序进行打包的工作,以改善安装和升级驱动程序的体验。这项工作提供了许多好处,包括提高了可靠性、安全性和选择性。对于这项工作,请使用 RHEL 8 中提供的模块化流和预编译的内核模块 ( kmod) 包。

DNF 模块化

使用模块化,CUDA 存储库为驱动程序包提供多个更新流。仅考虑所选流上的更新。您可以选择跟上最新和最好的版本,也可以锁定到特定的驱动程序分支,例如主版本等于“450”的驱动程序。

这种新机制允​​许您根据用例切换到不同的流。您可以从单个 RPM 存储库中选择多个 NVIDIA GPU 驱动程序分支之一进行跟踪。一些NVIDIA 驱动程序适合在 NVIDIA 数据中心 GPU 上使用,并且与其他驱动程序分支相比,它们的使用寿命可能更长。企业用户可能出于稳定性原因选择留在特定的驱动程序分支上,而其他用户可能希望跟踪其他分支以访问新功能。

图 1.可用的 nvidia-driver 模块流列表。

您可以选择一个特定的驱动程序分支(例如 R418)来跟踪更新,并且仅从该分支获取更新。这些软件包还提供了一个名为的虚拟分支latestlatest-dkms可跟踪每个时间点的最新 NVIDIA 驱动程序。该分支latest-dkms是默认分支。其他分支是可选的,并且可以切换分支而无需重新安装 CUDA 工具包。

使用预编译驱动程序

对于受支持的 Red Hat Enterprise Linux 8.x 内核版本(请参阅下面的支持列表),提供了实现DKMS替代方案的驱动程序包。无需启用EPEL 存储库。这些驱动程序 kmod 包的源文件是预先编译的,然后在安装时链接,因此这些被称为“预编译驱动程序”。

新方法不需要gcc安装编译器,从而减少了攻击面并加快了内核和/或驱动程序更新的启动时间。使用这些预编译的kmod软件包可以提供更高的稳定性,因为确切的 NVIDIA 驱动程序版本和内核版本字符串组合已经过预先测试。告别黑屏(运行级别 3),迎接可预测的用户体验,驱动程序安装不再依赖于kernel-devel软件包kernel-headers

当发布新的驱动程序更新时,仅针对驱动程序更新时最新发布的内核提供预编译驱动程序包。同样,如果发布了新的内核更新,则针对此内核提供预编译驱动程序包。另一种表述方式是,现在,在任何时间点,都会为最新的 RHEL 内核和最新的 NVIDIA 驱动程序版本(每个受支持的分支)启用预编译驱动程序。

`sudo dnf module info nvidia-driver:450 的终端输出。

图 2. ‘450’ 模块流中的 RPM 包列表,其中突出显示了预编译的 kmod 包。

使用预编译驱动程序时,会启用包管理器插件dnf来清理过时的 .ko 文件。为了防止系统崩溃,NVIDIA dnf 插件还会阻止升级到尚不存在预编译驱动程序的内核。这可能会延迟安全修复的应用,但可确保始终使用经过测试的内核和驱动程序组合。

使用包管理器安装

以下是在 RHEL 8 上开始使用新驱动程序包的方法。首先,确保已启用 Red Hat 存储库,包括 RHEL8 AppStream、RHEL8 BaseOS 和 RHEL8 CRB:

<span style="color:#1a1a1a"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5">$ 订阅管理器 repos --enable=rhel-8-for-x86_64-appstream-rpms
$ 订阅管理器 repos--enable=rhel-8-for-x86_64-baseos-rpms
$ 订阅管理器 repos --enable=codeready-builder-for-rhel-8-x86_64-rpms</span></span></span></span>

添加 CUDA 网络存储库:

<span style="color:#1a1a1a"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5">$ sudo dnf config-manager --add-repo=https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo</span></span></span></span>

安装最新的流以选择加入预编译包: 

<span style="color:#1a1a1a"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5">$ sudo dnf 模块安装 nvidia-driver:latest</span></span></span></span>

选择模块化流

为了提高灵活性,预编译和 DKMS 类型均提供了多种流(表 1)。

NVIDIA 驱动程序预编译流旧版 DKMS 流
最高版本最新的最新-dkms
锁定@455.x455455-dkms
锁定@450.x450450-dkms
锁定@440.x440440-dkms
锁定@418.x418418-dkms

表 1.可用的 nvidia-driver 模块流列表。

最新选项始终更新到最高版本的驱动程序(预编译):

<span style="color:#1a1a1a"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5">$ sudo dnf 模块安装 nvidia-driver:latest</span></span></span></span>

<id>选项将驱动程序更新锁定到指定的驱动程序分支(预编译)。请<id>用适当的驱动程序分支流替换,例如 455、450、440 或 418。

<span style="color:#1a1a1a"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5">$ sudo dnf 模块安装 nvidia-driver:<id></span></span></span></span>

latest-dkms选项始终更新到最高版本的驱动程序(非预编译)。这是默认流。

<span style="color:#1a1a1a"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5">$ sudo dnf 模块安装 nvidia-driver:latest-dkms</span></span></span></span>

<id>-dkms选项将驱动程序更新锁定到指定的驱动程序分支(非预编译),例如 455-dkms、450-dkms、440-dkms 或 418-dkms。

<span style="color:#1a1a1a"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5">$ sudo dnf 模块安装 nvidia-driver:<id>-dkms</span></span></span></span>

切换流

要切换到另一个流,首先删除驱动程序包:

<span style="color:#1a1a1a"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5"> $ sudo dnf 删除 nvidia 驱动程序</span></span></span></span>

然后,重置模块流:

<span style="color:#1a1a1a"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5"> $ sudo dnf 模块重置 nvidia 驱动程序</span></span></span></span>

现在可以从适当的流安装驱动程序。

使用模块化配置文件

模块化配置文件可与任何受支持的模块化流配合使用,并允许其他用例(表 2)。

溪流轮廓用例
默认/默认安装流中的所有驱动程序包。
快速启动/ks使用配置文件执行无人值守的 Linux 操作系统安装。
NVSwitch 结构/调频
安装引导 NVSwitch 系统所需的所有驱动程序包和组件
(包括 Fabric Manager 和 NSCQ 遥测)。

表 2. 可用的 nvidia-driver 模块配置文件列表。

现在,您可以使用该dnf命令来指定流和配置文件:

<span style="color:#1a1a1a"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5"> $ sudo dnf 模块安装 nvidia-driver:<流>/<配置文件></span></span></span></span>

/default选项在流中安装所有驱动程序包(传递闭包):

<span style="color:#1a1a1a"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5"> $ sudo dnf 模块安装 nvidia-driver:latest/default</span></span></span></span>

/ks选项旨在使用不安装元包的Kickstartcuda-drivers配置文件进行无人值守的 Linux 操作系统安装。该元包会尝试删除旧的驱动程序运行文件安装。

<span style="color:#1a1a1a"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5"> %软件包
 @^最小安装
 @nvidia-驱动程序:最新-dkms/ks
 %结尾</span></span></span></span>

/fm选项安装用于引导 NVSwitch 的附加软件包,包括 Fabric Manager 和 NSCQ(用于交换机遥测):

<span style="color:#1a1a1a"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5"> $ sudo dnf 模块安装 nvidia-driver:450/fm</span></span></span></span>

RHEL 的支持矩阵

目前,这些软件包改进仅支持 x86_64 架构上的 RHEL 8.2(及更高版本)。NVIDIA 仅为最新的官方 RHEL 内核提供预编译驱动程序包,例如 4.18.0-193.19.1 及更高版本。如果您使用较早的内核,请更新以开始接收预编译驱动程序包。不为RHEL EUS内核提供预编译驱动程序。

表 3 显示了根据NVIDIA 驱动程序生命周期策略支持的分支。

驱动分支分支机构名称生命终结
418长期服务2022 年 3 月
440新功能2020 年 11 月
450长期服务2023 年 7 月
455开发人员460 可用性

表 3. NVIDIA 驱动程序分支的支持矩阵。

新的 kmod 包通常在新的 RHEL 内核更新后的 24 小时内可用。

为了防止系统崩溃,该插件会在内核上线和 kmod 软件包可用之间阻止内核更新。在升级过程中dnf会显示警告:dnf

<span style="color:#1a1a1a"><span style="background-color:#ffffff"><span style="color:#333333"><span style="background-color:#f5f5f5">注:由于找不到 NVIDIA 驱动程序内核模块包 kmod-nvidia-${driver}-${kernel} ...,因此跳过内核安装</span></span></span></span>

概括

使用预编译的内核模块包和模块化流,在 RHEL 8 上部署 NVIDIA 驱动程序的体验更好。新的驱动程序包可在CUDA 存储库中找到,因此您可以立即开始使用。

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

有关详细信息,请参阅以下资源:

如需提供反馈、发送评论报告错误。如果您还不是会员,请加入 NVIDIA 开发者计划

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值