机器人

简化 NVIDIA Jetson 用户的 CUDA 升级

NVIDIA JetPack 为 Jetson 平台边缘的硬件加速 AI 提供了一个完整的开发环境。以前, NVIDIA JetPack 的独立版本支持单一版本的 CUDA ,您无法在给定的 NVIDIA JetPack 版本上升级 CUDA 。 NVIDIA JetPack 以滚动步调发布,使用单一版本的 CUDA ,通常在每个主要发布周期中都受支持(例如, NVIDIA JetPack 4.x 或 NVIDIA JetPack 5.x )。

从 CUDA Toolkit 11.8 开始, NVIDIA JetPack 5.0 和更高版本上的 Jetson 用户可以升级到最新的 CUDA 版本,而无需更新 NVIDIA JetPack 版本或 Jetson Linux BSP ( Board Support Package )。您可以与 CUDA 桌面版本保持一致。

Jetson 上的 CUDA 与桌面上的 CUDA 相比

为了理解为什么具有离散 – GPU ( dGPU )和具有集成 – GPU ( iGPU )的 Jetson 桌面之间的 CUDA 支持模型有所不同,这有助于理解以下内容:

  • CUDA 如何在 Jetson 上打包
  • CUDA 如何在桌面上打包
  • 他们之间的差异

图 1 显示了 Jetson 软件体系结构,其核心是 Jetson Linux BSP 和组成 NVIDIA JetPack SDK 的各种软件组件层。有关详细信息,请参阅 Jetson Software Architecture

Block diagram image shows the key software modules that make up the Jetson software architecture and NVIDIA JetPack SDK for embedded applications.
图 1. Jetson 软件架构

图 2 显示了 CUDA 在整个 NVIDIA JetPack SDK 打包结构中的位置,以及它如何与 Jetson Linux BSP 的所有其他组件交互。如图 2 所示, CUDA 驱动程序和其他组件是 Jetson LinuxBSP 的一部分。所有这些组件都根据 Jetson Linux BSP 的发布节奏和频率进行更新,这与 CUDA 的季度发布节奏不同。 CUDA 工具包独立于 BSP ,不打包 CUDA 驱动程序。

安装 NVIDIA JetPack SDK 时,默认情况下会安装 Jetson Linux BSP (包含 CUDA 驱动程序)和 CUDA 工具箱。

Block diagram shows the compatibility of software modules between the Jetson Linux BSP and the CUDA Toolkit.
图 2. Jetson ( iGPU )上的 CUDA 封装; CUDA 驱动程序被烘焙到 Jetson Linux BSP 中
Block diagram shows the interdependency of software modules between a standard Linux OS distribution, the NVIDIA UDA package, and the CUDA Toolkit as managed with the CUDA Installer.
图 3.桌面上的 CUDA 打包( dGPU ); CUDA 驱动程序是 NV Display 驱动程序和 UDA 软件包的一部分

由于这种打包结构,桌面上的 CUDA 开发人员可以灵活地跟上最新的 CUDA 版本,与 CUDA 季度发布节奏保持一致。此外, forward compatibilityminor version compatibility 等特性可以帮助您选择驱动程序和工具箱的组合,并根据应用程序的需要进行定制。

CUDA Jetson 上的可升级包

从 CUDA 11.8 开始, CUDA 引入了一个升级路径,为 Jetson 开发人员提供了一个选项,可以将[ZCK0 :驱动程序和[ZCK0 /工具箱更新到最新版本。

图 4 显示了蓝色框,其中描述了 NVIDIA JetPack 5.0 SDK 中默认存在的组件。虚线将 Jetson Linux BSP 与 NVIDIA JetPack SDK 的其他组件分隔开。绿色框表示可以通过此功能升级到的 CUDA 组件。

Flow diagram of the steps needed to upgrade CUDA software from previous releases.
图 4.Jetson 上的 CUDA 升级路径

这些升级是通过引入 CUDA 驱动程序升级(也称为[ZCK0 兼容性包)实现的,如图 5 所示。

此升级包主要包含 CUDA 驱动程序(libcuda.so.*)及其依赖项,使您能够访问每个季度[ZCK0 发布的最新和最大的[ZCK0 :功能。

如果没有这个包,您以前只能使用 Jetson Linux BSP 中打包的默认 CUDA 驱动程序提供的功能。您没有升级到最新 CUDA 驱动程序和工具箱的机制。

有了这个软件包,为现有 Jetson Linux BSP 投入了漫长而彻底的验证周期的 Jetson 用户可以升级到最新的 CUDA 版本。此升级是在现有 Jetson Linux BSP 上完成的,保持不变。

Figure shows which Jetson software modules are affected and how the new flexible upgrade path works to install the latest CUDA software release.
图 5.介绍新的 CUDA 升级包

如何在 Jetson 上升级 CUDA

对于 CUDA 11.8 , CUDA Downloads 页面现在显示了一个新的体系结构 aarch64-Jetson ,如图 6 所示,以及相关的 aarch64- Jetson [ZCK0 安装程序,并提供了有关如何下载和使用本地安装程序或[ZCK0 :网络存储库来安装最新 PyTorch 版本的逐步说明。

Screenshot of the CUDA downloads web page showing the different CUDA architecture versions available to download and use for Jetson.
图 6. CUDA 11.8 下载页面 aarch64-Jetson 安装程序下载选项

新的aarch64-Jetson Jetson 安装程序将 CUDA 工具包和升级包打包在一起。提供的分步安装说明可确保下载并安装 CUDA 升级包以及 CUDA 设备的相应 CUDA 工具包。

Block diagram of Jetson and CUDA software modules that will be installed automatically when using the CUDA Installer utility.
图 7. Jetson 设备的 aarch64- Jetson CUDA 安装程序

已安装的升级包位于版本化工具包文件目录中。例如,您可以在以下目录中找到 11.8 :

/usr/local/cuda-11.8/

升级包包含以下文件:

  • libcuda.so.*: CUDA 驱动程序。
  • libnvidia-nvvm.so.*:实时链路时间优化(仅限 CUDA 11.8 及更高版本)。
  • libnvidia-ptxjitcompiler.so.*: PTX 文件的 JIT (实时)编译器。

这些文件一起实现了 CUDA 驱动程序接口。此软件包仅提供文件,不配置系统。

如果您正在 x86 主机上工作并交叉编译到aarch64-Jetson目标,可以在 CUDA Downloads 页面上找到 U20.04 CUDA 主机安装程序。交叉编译位可以在以下目录中找到:

aarch64-jetson/cross/Ubuntu/20.04/deb installer

实例

下面的代码示例显示了如何安装 CUDA Upgrade 包并使用它来运行应用程序。

$ sudo apt-get -y install cuda

Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
  cuda-11-8 cuda-cccl-11-8 cuda-command-line-tools-11-8 cuda-compat-11-8
  ...<snip>…

The following NEW packages will be installed:
  cuda cuda-11-8 cuda-cccl-11-8 cuda-command-line-tools-11-8 cuda-compat-11-8
  ...<snip>…

0 upgraded, 48 newly installed, 0 to remove and 38 not upgraded.
Need to get 15.7 MB/1,294 MB of archives.
After this operation, 4,375 MB of additional disk space will be used.
Get:1 http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/arm64  cuda-compat-11-8 11.8.31058490-1 [15.8 MB]
Fetched 15.7 MB in 12s (1,338 kB/s)
Selecting previously unselected package cuda-compat-11-8.
(Reading database ... 
  ...<snip>…

(Reading database ... 100%
(Reading database ... 148682 files and directories currently installed.)
Preparing to unpack .../00-cuda-compat-11-8_11.8.31058490-1_arm64.deb ...
Unpacking cuda-compat-11-8 (11.8.31058490-1) ...
  ...<snip>…

Unpacking cuda-11-8 (11.8.0-1) ...
Selecting previously unselected package cuda.
Preparing to unpack .../47-cuda_11.8.0-1_arm64.deb ...
Unpacking cuda (11.8.0-1) ...
Setting up cuda-toolkit-config-common (11.8.56-1) ...
Setting up cuda-compat-11-8 (11.8.31058490-1) ...

$ ls -l /usr/local/cuda-11.8/compat
total 55300
lrwxrwxrwx 1 root root       12 Jan  6 19:14 libcuda.so -> libcuda.so.1
lrwxrwxrwx 1 root root       14 Jan  6 19:14 libcuda.so.1 -> libcuda.so.1.1
-rw-r--r-- 1 root root 21702832 Jan  6 19:14 libcuda.so.1.1
lrwxrwxrwx 1 root root       19 Jan  6 19:14 libnvidia-nvvm.so -> libnvidia-nvvm.so.4
lrwxrwxrwx 1 root root       23 Jan  6 19:14 libnvidia-nvvm.so.4 -> libnvidia-nvvm.so.4.0.0
-rw-r--r-- 1 root root 24255256 Jan  6 19:14 libnvidia-nvvm.so.4.0.0
-rw-r--r-- 1 root root 10665608 Jan  6 19:14 libnvidia-ptxjitcompiler.so
lrwxrwxrwx 1 root root       27 Jan  6 19:14 libnvidia-ptxjitcompiler.so.1 -> libnvidia-ptxjitcompiler.so
 
The user can set LD_LIBRARY_PATH to include the libraries installed by upgrade package before running the CUDA 11.8 application:
$ LD_LIBRARY_PATH=/usr/local/cuda-11.8/compat:$LD_LIBRARY_PATH ~/Samples/1_Utilities/deviceQuery
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "Orin"
  CUDA Driver Version / Runtime Version          11.8 / 11.8
  CUDA Capability Major/Minor version number:    8.7
      ...<snip>...
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 11.8, CUDA Runtime Version = 11.8, NumDevs = 1
Result = PASS

默认驱动程序(最初随 NVIDIA JetPack 和 Jetson Linux BSP 的一部分一起安装)由安装程序保留。应用程序可以使用默认版本的 CUDA (最初与 NVIDIA JetPack 一起安装),也可以使用升级包安装的版本。使用 LD _ LIBRARY _ PATH 变量选择所需的版本。

在给定的系统上,任何时候都只能安装一个 CUDA 升级包。安装新的 CUDA 升级包时,已安装的升级包的先前版本将被删除,并替换为新版本。如果升级包与 NVIDIA JetPack 版本不兼容,则安装失败。

例如,由于 CUDA 驱动程序的向后兼容性,以前使用 CUDA 11.4 编译的应用程序可以继续使用 CUDA 11.8 升级包。

表 1 显示了 NVIDIA JetPack 5.0 版本的 CUDA 用户模式驱动程序( UMD )和 CUDA Toolkit 版本兼容性。

表 1. CUDA UMD 版本与 CUDA Toolkit 版本的兼容性​

C =兼容; X =不兼容

要注意的要点

  • 此功能在 CUDA 11.8 和 NVIDIA JetPack 5.0 以后的版本中可用,最新的 Jetson Linux 版本将支持此功能。
  • CUDA 升级包仅更新 CUDA 驱动程序接口,而保持 NVIDIA JetPack SDK 其余组件不变。如果最新 CUDA 驱动程序中的新功能需要更新的 NVIDIA JetPack SDK 组件或接口,则在调用时可能会返回错误。有关功能兼容性的更多信息,请参阅 CUDA release notes
  • 由于并非所有 NVIDIA JetPack SDK 都支持 CUDA 的所有版本,因此要求用户检查新 CUDA 版本与所使用的 NVIDIA JetPack 软件开发工具包版本的兼容性。有关兼容版本的更多信息,请参阅 CUDA for Tegra App Note

在 Jetson 上, CUDA 、 cuDNN 、 TensorRT 等的计算堆栈与 Jetson Linux ( L4T )的特定版本紧密相连。要升级到计算堆栈的更新版本,还必须处理升级到 Jetson Linux 的问题。

我们正在努力实现一个未来, Jetson 开发人员可以迁移到计算库的更新版本,而无需升级 Jetson Linux 。支持升级 CUDA 的 CUDA 功能是朝着这个方向迈出的一步。

立即在 Jetson 上升级到最新的 CUDA 版本!

  • CUDA 11.8 Downloads 页面上,下载aarch64-Jetson的 CUDA 安装程序,并按照安装说明将 Jetson 设备升级到 CUDA 11.8 。
  • 有关 Jetson 上 CUDA 可升级包的更多信息,请参阅 CUDA for Tegra App Note
  • 有关 CUDA 11.8 引入的所有新功能的信息,请参阅 CUDA 11.8 Omnibus
  • 如果您有任何问题或需要支持,请在 Jetson forum 上发布您的问题。

请注册 NVIDIA JetPack 5 deep-dive webinar 。 CUDA 和 Jetson 团队将为您介绍此新功能的详细信息,您将有机会现场提问!

 

Tags