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

news2024/9/21 20:41:30

目录

DNF 模块化

使用预编译驱动程序

使用包管理器安装

选择模块化流

切换流

使用模块化配置文件

RHEL 的支持矩阵

概括

相关资源


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/yum-包装-预编译-kmod
  • NVIDIA/yum-包装-nvidia-插件

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

  • 预编译内核模块:使用模块化流在 RHEL8 上进行打包和部署(GTC 2020 年秋季会议)
  • 简化 Red Hat Enterprise Linux 上的 NVIDIA GPU 驱动程序部署(Red Hat 峰会 2020)
  • RHEL8 预编译 kmod 状态

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

相关资源

  • GTC 会议:Legate:用于可组合、可扩展、加速库的高效编程框架
  • GTC 会议:NVIDIA AI 的数据模式:NVIDIA DGX SuperPOD、NVIDIA DGX BasePOD、分析和部署(由 IBM 提供)
  • NGC 容器:NVIDIA DOCA 驱动程序
  • NGC 容器:NVIDIA GPU 操作员的验证器
  • NGC 容器:适用于 Kubernetes 的 NVIDIA 驱动程序管理器
  • SDK:DRIVE OS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2096428.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【个人笔记】VCS工具与命令

Title&#xff1a;VCS工具学习 一 介绍 是什么&#xff1f; VCS (Verilog Compiler Simulator) 是synopsys的verilog 仿真软件&#xff0c;竞品有Mentor公司的Modelsim、Cadence公司的NC-Verilog、Verilog—XL. VCS能够 分析、编译 HDL的design code&#xff0c;同时内置了 仿…

ubuntu环境下实现ROS 2 与 Arduino 通信

本教程为https://blog.csdn.net/2301_81924597/article/details/141757091?spm1001.2014.3001.5501的进一步拓展 ROS 2 与 Arduino 通信指南 准备工作 确保已安装 ROS 2&#xff08;本指南基于 ROS 2 Humble&#xff09;确保已安装 Arduino IDE 并能正常使用安装必要的 ROS…

系统架构师考试学习笔记第三篇——架构设计高级知识(10)系统质量属性与架构评估

本章知识点&#xff1a; 第10课时主要学习软件系统质量属性、系统架构评估以及ATAM方法评估实践等内容。 本课时内容侧重于概念知识&#xff0c;根据以往全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;。考试的出题规律&#xff0c;考查的知识点多来源于教材&a…

在Web服务应用中,如何编程使用Redis的缓存功能?包括缓存页面内容、缓存数据库查询结果、用户会话信息等代码分享

目录 一、概述 二、redis介绍 1、简介 2、Redis作为缓存的原理 &#xff08;1&#xff09;内存存储 &#xff08;2&#xff09;数据结构 &#xff08;3&#xff09;工作原理 3、Redis作为缓存的作用 三、redis缓存页面内容 1、作用 2、实现方法 3、示例代码&#x…

python07-单元测试框架unittest1-2

5 fixture 可以看作case的前置条件、后置条件 5.1 fixture的用例执行顺序 fixture分为 方法级别类级别模块级别 5.1.1方法级fixture 每个测试用例之前要调用setUp每个测试用例执行后要调用tearDowntestCase中有多少测试用例,那么setUp和tearDown就被调用多少次 def add(…

【Java】Spring-AOP与拦截器简洁实操 (上手图解)

Java系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 文章目录 Java系列文章目录一、前言二、学习内容&#xff1a;三、问题描述四、解决方案&#xff1a;4.1 认识依赖4.2 使用AOP与拦截器4.2.1 使用AOP4.2.1.1 设置DemoAop类4.2.2.2 设…

【SpringBoot】电脑商城-11-显示购物车功能

加入购物车 1 购物车-创建数据表 1.使用use命令先选中store数据库。 USE store;2.在store数据库中创建t_cart用户数据表。 CREATE TABLE t_cart (cid INT AUTO_INCREMENT COMMENT 购物车数据id,uid INT NOT NULL COMMENT 用户id,pid INT NOT NULL COMMENT 商品id,price BIG…

java fastxml json 科学计数法转换处理

背景&#xff1a; 由于 canal 切换为 tx dbbridge后&#xff0c;发现dbbridge对于canal的兼容性存在较大问题&#xff0c;从而引发 该文档的实践。 就目前发现 dbbrige 的字段 大小写 和 数据类型格式 从binlog 写入kafka 同canal 都会存在差异。 canal之前导出都是小写&…

编程要由 “手动挡” 变 “自动挡” 了?Cursor+Claude-3.5-Sonnet,Karpathy 大神点赞的 AI 代码神器!如何使用详细教程

Cursor 情况简介 AI 大神 Andrej Karpathy 都被震惊了&#xff01;他最近在试用 VS Code Cursor Claude Sonnet 3.5&#xff0c;结果发现这玩意儿比 GitHub Copilot 还好用&#xff01; Cursor 在短短时间内迅速成为程序员群体的顶流神器&#xff0c;其背后的原因在于其默认使…

[VirtualBox+ubuntu24]设置linux学习环境

1)设置网络为桥接网卡&#xff0c;不然发现ifconfig出不来ip地址 依然设置为经典的: 2核4G内存 50G硬盘 2)设置默认root账户登录 // 不然每次都得输入sudo -s // step1: 打开配置文件 sudo vim/etc/gdm3/custom.conf// step2: 默认以root登录 [daemon] AutomaticLoginEnableT…

NTFS硬盘支持工具Paragon NTFS for Mac 15.4.44 中文破解版

Paragon NTFS for Mac 15.4.44 中文破解版是一个底层的文件系统驱动程序,专门开发用来弥合Windows和Mac OS X之间的不兼容性&#xff0c;通过在Mac OS X系统下提供对任何版本的NTFS文件系统完全的读写访问服务来弥合这种不兼容性。为您轻松解决Mac不能识别Windows NTFS文件难题…

C语言:大小端模式、判断大小端、大小端转换

目录 1. 什么是大端和小端 2.为什么会存在大小端的问题 3. 判断主机字节序 (主机大小端) 3.1 使用联合体 (union) 3.2 使用指针 3.3 强制转为 char 类型法 4. 大小端转换 1. 什么是大端和小端 对于一个存储空间大于 1 个字节的数据&#xff0c;在内存中有两种存储模式&a…

VCTP论文精读

机器视觉推理自从引入神经符号机制以来取得了巨大进步&#xff0c;这使得机器能够发展出多步骤的推理链。然而&#xff0c;正如早期认知科学家所预示的那样&#xff0c;这种逻辑和符号系统基本上不适合于现实世界、常识知识的表示和推理&#xff0c;因为它们仅依赖于封闭世界的…

一个人独立开发前后端,终于有属于自己的一套产品

大家好&#xff0c;我是兔兔答题的开发者。兔兔答题是一款简单、易用的答题考试系统&#xff0c;可应用于微信考试、付费考试、社会调查问卷、明星知识问答、员工培训考核、模拟自测、企业面试、试题库等多种场景。兔兔答题会根据不同的场景&#xff0c;开发不同的模版。例如驾…

[Algorithm][综合训练][循环汉诺塔][kotori和素因子][dd爱科学]详细讲解

目录 1.循环汉诺塔1.题目链接2.算法原理详解 && 代码实现 2.kotori和素因子1.题目链接2.算法原理详解 && 代码实现 3.dd爱科学1.题目链接2.算法原理详解 && 代码实现 1.循环汉诺塔 1.题目链接 循环汉诺塔 2.算法原理详解 && 代码实现 解法&a…

虚幻5|C++第三人称射击(1)添加摄像机

一.在C类创建一个一个角色类蓝图&#xff0c;命名为BasePlayer 1.得到cpp和h文件 2.打开BasePlayer.h&#xff0c;定义摄像机内容 编译以下代码&#xff0c;定义摄像机和摄像机组件 private: //定义摄像机 UPROPERTY(VisibleAnywhere,BlueprintReadOnly,Category"…

【数学分析笔记】第2章第4节收敛准则(7)

2. 数列极限 2.4 收敛准则 2.4.8 实数系的基本定理 确界存在定理&#xff08;实数系的连续性&#xff09;单调有界数列收敛定理闭区间套定理Bolzanp-Weierstrass&#xff08;波尔查诺&#xff0d;魏尔斯特拉斯&#xff09;定理Cauchy&#xff08;柯西&#xff09;收敛原理&a…

前端与后端的身份认证

这里写目录标题 前端与后端的身份认证Web开发模式服务端渲染的Web开发模式前后端分离的Web开发模式根据场景选择开发模式 身份认证为什么需要身份认证不同开发模式下的身份认证 Session认证机制HTTP协议下的无状态性如何突破HTTP无状态的限制CookieCookie的几大特性&#xff1a…

代码随想录 刷题记录-23 单调栈

题目对“下一个更高”或者“下一个更低”有要求&#xff0c;可以考虑单调栈 &#xff08;也可以考虑双指针&#xff0c;双指针往往能够把时间复杂度的指数减一&#xff09; 1.739. 每日温度 思路 首先想到的当然是暴力解法&#xff0c;两层for循环&#xff0c;把至少需要等…

豆包MarsCode编程助手:让编程更简单

在编程的浩瀚宇宙中&#xff0c;每一个开发者都在寻找那把能够开启高效与创意之门的钥匙。随着AI技术的飞速发展&#xff0c;智能编程助手应运而生&#xff0c;为开发者们带来了前所未有的便捷与灵感。今天&#xff0c;我们将以五子棋小游戏开发为例&#xff0c;深入解读豆包Ma…