NVIDIA 完全过渡到开源 GPU 内核模块

news2024/12/25 22:48:18

目录

  • 支持的 GPU
  • 安装程序更改
  • 将包管理器与 CUDA 元包配合使用
  • 使用 runfile
  • 使用安装帮助程序脚本
  • 包管理器详细信息
    • apt:基于 Ubuntu 和 Debian 的发行版
    • dnf:Red Hat Enterprise Linux、Fedora、Kylin、Amazon Linux 或 Rocky Linux
    • zypper:SUSE Linux Enterprise Server 或 OpenSUSE
  • 包管理器摘要
  • 适用于 Linux 的 Windows 子系统
  • CUDA工具包
  • Github
    • 如何构建
    • 支持的目标 CPU 体系结构
    • 其他构建旋钮
    • 支持的工具链
    • 支持的 Linux 内核版本
    • 如何贡献
    • 如何报告问题
    • 内核模块的内核接口和与操作系统无关的组件
    • 目录结构布局
    • Nouveau 设备驱动程序集成
    • 兼容的 GPU
  • Forums
  • 参考链接

借助 R515 驱动程序,NVIDIA 于 2022 年 5 月发布了一组 Linux GPU 内核模块,作为具有 GPL 和 MIT 双重许可的开源模块。初始版本以数据中心计算 GPU 为目标,GeForce 和 Workstation GPU 处于 alpha 状态。

当时,NVIDIA宣布后续版本将提供更强大、功能更齐全的 GeForce 和 Workstation Linux 支持,NVIDIA 开放内核模块最终将取代闭源驱动程序。

NVIDIA GPU 共享通用的驱动程序架构和功能集。适用于台式机或笔记本电脑的同一驱动程序可在云中运行世界上最先进的 AI 工作负载。对我们来说,恰到好处地做到这一点非常重要。

两年过去了,NVIDIA通过开源 GPU 内核模块实现了同等或更好的应用程序性能,并增加了大量新功能:

  • 异构内存管理 (HMM)
  • 支持机密计算
  • Grace 平台的一致内存架构
  • 还有更多…

NVIDIA现在正处于完全过渡到开源 GPU 内核模块的正确举措,NVIDIA将在即将发布的 R560 驱动程序版本中做出这一改变。

支持的 GPU

并非每个 GPU 都与开源 GPU 内核模块兼容。

对于 NVIDIA Grace Hopper 或 NVIDIA Blackwell 等尖端平台,必须使用开源 GPU 内核模块。这些平台不支持专有驱动程序。

对于来自 Turing、Ampere、Ada Lovelace 或 Hopper 架构的较新 GPU,NVIDIA 建议切换到开源 GPU 内核模块。

对于 Maxwell、Pascal 或 Volta 架构中较旧的 GPU,开源 GPU 内核模块与这些平台不兼容。需要继续使用 NVIDIA 专有驱动程序。

对于在同一系统中使用较旧和新 GPU 的混合部署,请继续使用专有驱动程序。

如果不确定,NVIDIA 会提供一个新的检测帮助程序脚本来帮助指导您选择哪个驱动程序。有关详细信息,请参阅本文后面的“使用安装帮助程序脚本”部分。

安装程序更改

通常,所有安装方法安装的驱动程序的默认版本都是从专有驱动程序切换到开源驱动程序。有几个特定方案值得特别注意:

  • 使用 CUDA 元包的包管理器
  • 运行文件
  • 安装帮助程序脚本
  • 包管理器详细信息
  • 适用于 Linux 的 Windows 子系统
  • CUDA工具包

将包管理器与 CUDA 元包配合使用

使用包管理器(而不是 .run 文件)安装 CUDA Toolkit 时,安装CUDA 元包存在并且常用。通过安装顶级软件包,您可以安装 CUDA 工具包和关联的驱动程序版本的组合。例如,通过在 CUDA 12.5 发布时间范围内安装 cuda,您可以获得专有的 NVIDIA 驱动程序 555 以及 CUDA 工具包 12.5。

图 1 显示了此包结构。
在这里插入图片描述
以前,使用开源 GPU 内核模块意味着可以使用顶级元包。您必须安装特定于发行版的 NVIDIA 驱动程序开放包以及您选择的 cuda-toolkit-X-Y 包。

从 CUDA 12.6 版本开始,流程有效地切换了位置(图 2)。
图 1.CUDA Toolkit 12.6 之前的 CUDA 包

使用 runfile

如果您使用该文件安装 CUDA 或 NVIDIA 驱动程序,安装程序会查询您的硬件并自动为您的系统安装最适合的驱动程序。UI 切换也可用于在专有驱动程序和开源驱动程序之间进行选择,具体取决于您的选择。

如果通过 CUDA .run 文件并使用用户界面进行安装,则现在会看到类似于以下内容的菜单:
在这里插入图片描述

如果通过驱动程序 .run 文件进行安装,则会看到类似的选择(图 3)。
图3.新的 runfile 交互式选择(驱动程序安装程序)

您还可以使用命令行传递覆盖,以便在没有用户界面的情况下进行安装,或者如果您使用的是 Ansible 等自动化工具。

# sh ./cuda_12.6.0_560.22_linux.run --override --kernel-module-type=proprietary
 
# sh ./NVIDIA-Linux-x86_64-560.run --kernel-module-type=proprietary

使用安装帮助程序脚本

如前所述,如果您不确定要为系统中的 GPU 选择哪个驱动程序,NVIDIA 创建了一个帮助程序脚本来指导您完成选择过程。

要使用它,请先使用包管理器安装包,然后运行脚本:nvidia-driver-assistant

$ nvidia-driver-assistant

包管理器详细信息

为了获得一致的体验,NVIDIA 建议您使用包管理器来安装 CUDA 工具包和驱动程序。但是,不同发行版使用哪些包管理系统或软件包的结构的具体细节可能因特定发行版而异。

本部分概述了各种平台所需的特定详细信息、注意事项或迁移步骤。

apt:基于 Ubuntu 和 Debian 的发行版

运行以下命令:

$ sudo apt-get install nvidia-open

要在 Ubuntu 20.04 上使用 metapackage 进行升级,请先切换到打开内核模块:cuda

$ sudo apt-get install -V nvidia-kernel-source-open
 
$ sudo apt-get install nvidia-open

dnf:Red Hat Enterprise Linux、Fedora、Kylin、Amazon Linux 或 Rocky Linux

运行以下命令:

$ sudo dnf module install nvidia-driver:open-dkms

要在基于 dnf 的发行版上使用元包进行升级,必须禁用模块流:cuda

$ echo "module_hotfixes=1" | tee -a /etc/yum.repos.d/cuda*.repo
$ sudo dnf install --allowerasing nvidia-open
$ sudo dnf module reset nvidia-driver

zypper:SUSE Linux Enterprise Server 或 OpenSUSE

运行以下命令之一:

# default kernel flavor
$ sudo zypper install nvidia-open
# azure kernel flavor (sles15/x86_64)
$ sudo zypper install nvidia-open-azure
# 64kb kernel flavor (sles15/sbsa) required for Grace-Hopper
$ sudo zypper install nvidia-open-64k

包管理器摘要

为简化起见,我们以表格格式压缩了包管理器建议。驱动程序版本 560 和 CUDA 工具包 12.6 之后的所有版本都将使用这些打包约定。

发行版	安装最新的	安装特定版本
Fedora/RHEL/Kylin	dnf module install nvidia-driver:open-dkms	dnf module install nvidia-driver:560-open
openSUSE/SLES	zypper install nvidia-open{-azure,-64k}	zypper install nvidia-open-560{-azure,-64k}
Debian 的	apt-get install nvidia-open	apt-get install nvidia-open-560
Ubuntu的	apt-get install nvidia-open	apt-get install nvidia-open-560
表 1.包管理器安装建议

有关更多信息,请参阅 NVIDIA 数据中心驱动程序。

适用于 Linux 的 Windows 子系统

适用于 Linux 的 Windows 子系统 (WSL) 使用主机 Windows 操作系统中的 NVIDIA 内核驱动程序。您不应专门在此平台中安装任何驱动程序。如果使用的是 WSL,则无需进行任何更改或操作。

CUDA工具包

CUDA Toolkit 的安装通过包管理器保持不变。运行以下命令:

$ sudo apt-get/dnf/zypper install cuda-toolkit

更多信息
有关如何安装 NVIDIA 驱动程序或 CUDA 工具包的更多信息,包括在目前无法迁移到开源 GPU 内核模块时如何确保安装专有驱动程序,请参阅《CUDA 安装指南》中的驱动程序安装。

Github

https://github.com/NVIDIA/open-gpu-kernel-modules

NVIDIA Linux 开放 GPU 内核模块源代码
这是 NVIDIA Linux 开放 GPU 内核模块的源代码版本, 版本 550.100。

如何构建

要构建:

make modules -j$(nproc)

要安装,请先卸载所有现有的 NVIDIA 内核模块。然后 作为 root:

make modules_install -j$(nproc)

请注意,此处构建的内核模块必须与 GSP 一起使用 固件和用户空间 NVIDIA GPU 驱动程序组件来自相应的 550.100 驱动程序版本。这可以通过安装来实现 使用 .run 文件中的 NVIDIA GPU 驱动程序。例如,–no-kernel-modules

sh ./NVIDIA-Linux-[...].run --no-kernel-modules

支持的目标 CPU 体系结构

目前,内核模块可以针对 x86_64 或 aarch64 构建。 如果是交叉编译,请在 make 命令行上设置以下变量:

TARGET_ARCH=aarch64|x86_64
CC
LD
AR
CXX
OBJCOPY

例如,

# compile on x86_64 for aarch64
make modules -j$(nproc)         \
    TARGET_ARCH=aarch64         \
    CC=aarch64-linux-gnu-gcc    \
    LD=aarch64-linux-gnu-ld     \
    AR=aarch64-linux-gnu-ar     \
    CXX=aarch64-linux-gnu-g++   \
    OBJCOPY=aarch64-linux-gnu-objcopy

其他构建旋钮

NV_VERBOSE - 将其设置为“1”以打印执行的每个完整命令; 否则,将打印简洁的“CC”行。

DEBUG - 将此值设置为“1”以将内核模块构建为调试。默认情况下, 生成编译,不调试信息。这也使 内核模块中的各种调试日志消息。

这些变量可以在 make 命令行上设置。例如,

make modules -j$(nproc) NV_VERBOSE=1

支持的工具链

任何相当现代的 GCC 或 Clang 版本都可用于构建 内核模块。请注意,内核的内核接口层 模块必须使用用于构建 内核。

支持的 Linux 内核版本

NVIDIA 开放内核模块支持相同范围的 Linux 内核 专有 NVIDIA 内核模块支持的版本。 目前是 Linux 内核 3.10 或更高版本。

如何贡献

可以通过在 https://github.com/NVIDIA/open-gpu-kernel-modules 上创建拉取请求来做出贡献,我们将通过 GitHub 进行响应。

请注意,提交拉取请求时,系统将提示您接受 贡献者许可协议。

该代码库与 NVIDIA 的专有驱动程序共享,并且各种 对共享代码执行处理以生成源代码,即 在这里发布。这对可预见的未来有几个影响:

  • GitHub 存储库将主要用作每个驱动程序的快照 释放。
  • 我们不希望能够为个人提供修订历史记录 对 NVIDIA 的共享代码库所做的更改。可能会有 每个驱动程序版本只有一个 Git 提交。
  • 我们可能无法将个人贡献作为单独的贡献来反映 GitHub 存储库中的 git 提交。
  • 由于代码在发布之前会经过各种处理, 此处所做的贡献需要手动合并才能应用于共享 代码库。因此,此处进行的大型重构更改可能难以合并并接受回共享代码库。如果你有大 重构建议,请提前联系我们,以便我们进行协调。

如何报告问题

特定于 Open GPU 内核模块的问题可以在 https://github.com/NVIDIA/open-gpu-kernel-modules 存储库的“问题”部分。

此外,任何现有的错误报告场所都可用于通信 NVIDIA的问题,例如我们的论坛:

https://forums.developer.nvidia.com/c/gpu-graphics/linux/148

或 linux-bugs@nvidia.com。

请参阅“NVIDIA 联系信息和其他资源”部分 的 NVIDIA GPU 驱动程序自述文件了解详情。

如果您符合以下条件,请参阅单独的 SECURITY.md 文档 相信您已在此软件中发现了安全漏洞。

内核模块的内核接口和与操作系统无关的组件

NVIDIA的大多数内核模块都分为两个组件:

  • “与操作系统无关”的组件:这是每个内核模块的组件 这与操作系统无关。
  • “内核接口层”:这是每个内核模块的组件 特定于 Linux 内核版本和配置。

打包在 NVIDIA .run 安装包中时,与操作系统无关的 组件以二进制形式提供:它很大且耗时 编译,因此提供了预构建版本,以便用户执行 不必在每次驱动程序安装期间对其进行编译。对于 nvidia.ko 内核模块,此组件名为“nv-kernel.o_binary”。 对于 nvidia-modeset.ko 内核模块,此组件名为 “nv-modeset-kernel.o_binary”。nvidia-drm.ko 和 nvidia-uvm.ko 都不是 具有与操作系统无关的组件。

必须构建每个内核模块的内核接口层组件 对于目标内核。

目录结构布局

  • kernel-open/内核接口层
  • kernel-open/nvidia/nvidia.ko 的内核接口层
  • kernel-open/nvidia-drm/nvidia-drm.ko 的内核接口层
  • kernel-open/nvidia-modeset/nvidia-modeset.ko 的内核接口层
  • kernel-open/nvidia-uvm/nvidia-uvm.ko 的内核接口层
  • src/与操作系统无关的代码
  • src/nvidia/nvidia.ko 的与操作系统无关的代码
  • src/nvidia-modeset/nvidia-modeset.ko 的与操作系统无关的代码
  • src/common/nvidia.ko 和 nvidia-modeset.ko 中的一个或多个使用的实用程序代码
  • nouveau/用于与 Nouveau 设备驱动程序集成的工具

Nouveau 设备驱动程序集成

“nouveau”目录中的 Python 脚本用于提取一些 在源代码中编码的固件二进制映像(和相关数据)和 将它们存储为不同的文件。这些文件由 Nouveau 设备使用 驱动程序加载并与 GSP 固件通信。

二进制文件的布局如nouveau_firmware_layout.ods中描述, 这是一个 OpenDocument 电子表格文件,与大多数电子表格兼容 软件应用程序。

兼容的 GPU

NVIDIA 开放内核模块可用于任何图灵或更高版本的 GPU (具体见Github链接)。但是,在 DRIVER_VERION 版本中,GeForce 和 工作站支持被认为是 Beta 质量的。开放的内核模块 适合广泛使用,NVIDIA 会就任何问题请求反馈 遇到特定于他们。

有关功能支持和限制的详细信息,请参阅 NVIDIA GPU 驱动程序 最终用户自述文件:

https://us.download.nvidia.com/XFree86/Linux-x86_64/550.100/README/kernel_open.html

有关 vGPU 支持,请参阅 vGPU 主机中打包的 README.vgpu 打包了解更多详情。

在下表中,如果列出了三个 ID,则第一个是 PCI 设备 ID,第二个是 PCI 子系统供应商 ID,第三个是 PCI 子系统设备 ID。

Forums

https://forums.developer.nvidia.com/c/gpu-graphics/linux/148

参考链接

https://developer.nvidia.com/blog/nvidia-transitions-fully-towards-open-source-gpu-kernel-modules/
https://developer.nvidia.com/zh-cn/blog/nvidia-releases-open-source-gpu-kernel-modules/

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

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

相关文章

​探讨元宇宙和VR虚拟现实之间的区别​

在数字时代,人们对虚拟现实的兴趣与日俱增。在虚拟现实技术的推动下,出现了两个概念:元宇宙和VR虚拟现实。虽然这两个概念都与虚拟现实有关,但它们有着不同的特点和用途。在本文中,我们将探讨元宇宙和VR虚拟现实之间的…

UNiapp 微信小程序渐变不生效

开始用的一直是这个,调试一直没问题,但是重新启动就没生效,经查询这个不适合小程序使用:不适合没生效 background-image:linear-gradient(to right, #33f38d8a,#6dd5ed00); 正确使用下面这个: 生效,适合…

JavaScript与DOM的奇妙探险:从入门到精通的实战笔记

文章目录 JavaScript基本说明特点两种使用方式在script中写使用script标签引入JS文件 数据类型介绍特殊值 运算符算数运算符赋值运算符逻辑运算符:![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bbf5c150699845af837d3c45c926e941.png)条件运算符 数组的…

通信协议_C#实现CAN通信

CAN协议 CAN(Controller Area Network)即控制器局域网络。特点: 多主网络:网络上的任何节点都可以主动发送数据,不需要一个固定的主节点。双绞线:使用双绞线作为通信介质,支持较远的通信距离。…

为Word文档注入魔法!Python批量替换多个文档的多个关键字,轻松搞定!

嘿,各位小伙伴们,大家好!有没有想过,如何在多个Word文档中批量替换多个关键字?不用担心,今天我来教大家一招,用Python轻松搞定这个问题!保证让你分分钟拥有处理文档的超级魔法~✨&am…

arm 内联汇编基础

一、 Arm架构寄存器体系熟悉 基于arm neon 实现的代码有 intrinsic 和inline assembly 两种实现。 1.1 通用寄存器 arm v7 有 16 个 32-bit 通用寄存器,用 r0-r15 表示。 arm v8 有 31 个 64-bit 通用寄存器,用 x0-x30 表示,和 v7 不一样…

AndroidStudio与手机进行无线调试

(一)、前提条件 一部手机一条USB数据线一部电脑手机和电脑连接到同一个 Wifi开启手机的USB调试功能开启手机的无线调试功能 (二)、操作步骤 1、 将手机和电脑用USB数据线连接 2、 打开 终端,输入 adb devices ,查看手机和电脑是否连接成功。如下图: 2、…

Mac电脑硬盘无法读取怎么办 Mac硬盘读取慢会导致电脑卡吗 Paragon NTFS 激活码

Mac电脑作为众多用户的工作与生活伙伴,其稳定性和效率至关重要。然而,当遭遇硬盘无法读取或读取速度缓慢的问题时,这无疑会给用户带来极大的不便,影响日常操作与数据访问。下面我们来看看Mac电脑硬盘无法读取怎么办,Ma…

Kotlin性能:runCatching、try-catch块、无异常处理耗时比较

Kotlin性能&#xff1a;runCatching、try-catch块、无异常处理耗时比较 fun main(args: Array<String>) {val a 1.1fval b 2.2fval n1 System.nanoTime()val m1 System.currentTimeMillis()runCatching {cal(a, b)}val n2 System.nanoTime()val m2 System.currentT…

python中format函数和f-string详解

Python 中的 format() 函数是一种字符串格式化的方法&#xff0c;通过花括号 {} 来定义占位符&#xff0c;并通过 format() 方法中的参数来替换这些占位符。这种方法非常灵活&#xff0c;可以处理多种数据类型&#xff0c;并且可以通过索引、关键字或者属性名来访问对象的属性。…

【中项】系统集成项目管理工程师-第2章 信息技术发展-2.2新一代信息技术及应用-2.2.3大数据与2.2.4区块链

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

实战项目:仿muduo库实现并发服务器

目录 项目初始与项目演示HTTP服务器基础认识Reactor模式基础认识单Reactor单线程模式认识单Reactor多线程模式认识多Reactor多线程模式认识 目标定位总体大模块划分server模块的管理思想Buffer子模块Socket子模块Channel子模块Connection子模块Acceptor子模块TimerQueue子模块P…

记录些Spring+题集(9)

在网络应用开发中&#xff0c;Cookie、Session 和 Token 是常见的用于管理用户状态和身份验证的机制。 Cookie、Session、Token 的区别 这三个概念的产生与 HTTP 是一种无状态协议密切相关。在 HTTP 中&#xff0c;每次客户端与服务器之间进行通信时&#xff0c;服务器无法直…

8月长沙学术会议:经济金融发展国际会议(ICEFD 2024)

经济金融发展国际会议&#xff08;ICEFD 2024&#xff09;将于2024年8月20-22日在长沙盛大举行。本次会议汇聚了国内外众多高校、科研机构、企业界及其他相关领域的专家学者&#xff0c;共同探讨经济金融发展的新趋势、新挑战和新机遇。 长沙&#xff0c;这座历史悠久的文化名…

细说MCU用DMA控制ADC采样和串口传送的实现方法

目录 一、建立工程 1.相同的配置 2.配置ADC 3.配置DMA 二、代码修改 1.定义存储ADC采样结果的数组 2.启动ADC与定时器 3.编写主程序代码 4.重定义回调函数 5.查看结果 三、修改DMA模式 1. 修改DMA模式为Circular 2.查看结果 采用DMA(Direct Memory Access&#xf…

Python爬虫(1) --基础知识

爬虫 爬虫是什么&#xff1f; spider 是一种模仿浏览器上网过程的一种程序&#xff0c;可以获取一些网页的数据 基础知识 URL 统一资源定位符 uniform resource locator http: 超文本传输协议 HyperText Transfer Protocol 默认端口 80 https: 安全的超文本传输协议 security…

docker 部署wechatbot-webhook 并获取接口实现微信群图片自动保存到chevereto图库等

功能如图&#xff1a; docker部署 version: "3" services:excalidraw:image: dannicool/docker-wechatbot-webhook:latestcontainer_name: wechatbot-webhookdeploy:resources:limits:cpus: 0.15memory: 500Mreservations:cpus: 0.05memory: 80Mrestart: alwayspor…

数据结构_Map和Set

目录 一、搜索模型 二、Map 2.1 Map.Entry 2.2 Map 方法 2.3 Map 注意事项 三、Set 3.1 Set 方法 3.2 Set 注意事项 四、哈希表 4.1 哈希表 4.2 冲突 4.3 哈希函数设计 4.4 闭散列 4.5 开散列/哈希桶 总结 【搜索树】 二叉搜索树又称二叉排序树&#xff0c;它或…

P4-AI产品经理-九五小庞

从0开始做AI产品的完整工作方法 项目启动 项目实施 样本测试模型推荐引擎 构建DMP&#xff08;数据管理平台&#xff09; 项目上线

Intel和AMD用户再等等!微软确认Win11 24H2年底前登陆

微软近日确认&#xff0c;Windows 11 24H2版本将于2024年底前正式登陆使用英特尔和AMD处理器的PC。 根据微软介绍&#xff0c;Windows 11 24H2将作为传统功能更新&#xff0c;将在今年晚些时候提供给所有设备。 此前&#xff0c;微软已向搭载骁龙X Plus和X Elite系列处理器的Co…