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 ,与其他驱动程序分支相比,它们的使用寿命可能更长。企业用户可能出于稳定性的原因选择留在特定的驱动程序分支上,而其他用户可能希望跟踪其他分支以访问新功能。
图 1 可用 NVIDIA 驱动模块流列表。
您可以选择一个特定的驱动程序分支,例如 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 驱动程序版本(每个支持的分支)都启用预编译驱动程序。
图 2 在预编译包列表中突出显示了 450 RPM 的程序包。
使用预编译驱动程序时, dnf 包管理器的插件将被启用,用于清除过时的。 ko 文件。为了防止系统崩溃, NVIDIA dnf 插件 还防止升级到尚未存在预编译驱动程序的内核。这可能会延迟安全修复的应用,但确保始终使用经过测试的内核和驱动程序组合。
使用包管理器安装
下面是如何开始在 RHEL8 上使用新的驱动程序包。首先,确保已启用 Red Hat 存储库,包括 RHEL8 AppStream 、 RHEL8 BaseOS 和 RHEL8 CRB :v
$ 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 )。
最新选项始终更新到最高版本的驱动程序(预编译):
$ sudo dnf module install nvidia-driver:latest
选项将驱动程序更新锁定到指定的驱动程序分支(预编译)。将
替换为适当的驱动程序分支流,例如 455 、 450 、 440 或 418 。
$ sudo dnf module install nvidia-driver:
latest-dkms
选项总是更新到最高版本的驱动程序(非预编译)。这是默认流。
$ sudo dnf module install nvidia-driver:latest-dkms
选项将驱动程序更新锁定到指定的驱动程序分支(非预编译),例如 455 dkms 、 450 dkms 、 440 dkms 或 418 dkms 。
$ sudo dnf module install nvidia-driver:-dkms
交换流
要切换到另一个流,请先删除驱动程序包:
$ sudo dnf remove nvidia-driver
然后,重置模块流:
$ sudo dnf module reset nvidia-driver
现在可以从适当的流安装驱动程序。
使用模块化配置文件
模块化概要文件与任何支持的模块化流一起工作,并允许附加的用例(表 2 )。
现在,您可以使用dnf
命令指定流和配置文件:
$ sudo dnf module install nvidia-driver:/
/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 驱动程序生命周期策略 支持的分支。
新的 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 / yum 打包预编译 kmod
NVIDIA / yum 打包 -NVIDIA – 插件
关于作者
Kevin Mittman 是一个 GNU / Linux 爱好者,对自动化有着浓厚的热情。他是 NVIDIA 的系统软件工程师,专注于 CUDA 、 NVIDIA 驱动程序和其他 CUDA -X 产品的安装程序打包和发布过程。在加入 NVIDIA 之前, Kevin 在开源社区开始了他的职业生涯。
审核编辑:郭婷
-
NVIDIA
+关注
关注
14文章
4862浏览量
102731 -
编译器
+关注
关注
1文章
1617浏览量
49021 -
CUDA
+关注
关注
0文章
121浏览量
13587
发布评论请先 登录
相关推荐
评论