高性能计算

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

 

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

Blank terminal screen

部署 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 ,与其他驱动程序分支相比,它们的使用寿命可能更长。企业用户可能出于稳定性的原因选择留在特定的驱动程序分支上,而其他用户可能希望跟踪其他分支以访问新功能。

The terminal output of `sudo dnf module list nvidia-driver`.
图 1 。可用 NVIDIA 驱动模块流列表。

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

使用预编译驱动程序

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

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

当发布新的驱动程序更新时,只为驱动程序更新时最新发布的内核提供预编译的驱动程序包。同样,如果发布了新的内核更新,则会为该内核提供预编译的驱动程序包。另一种说法是,在任何时候,对最新的 RHEL 内核和最新的 NVIDIA 驱动程序版本(每个支持的分支)都启用预编译驱动程序。

The terminal output of `sudo dnf module info nvidia-driver:450.
图 2 。在预编译包列表中突出显示了 450 RPM 的程序包。

使用预编译驱动程序时, 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
表 1 。 NVIDIA 可用驱动模块流列表。

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

$ 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).
表 2 。 NVIDIA 可用驱动模块配置文件列表。

现在,您可以使用 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
表 3 。 NVIDIA 驱动分支的支持矩阵。

新的 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 发行版维护自己的预编译内核模块包:

有关更多信息,请参阅以下资源:

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

 

Tags