NVIDIA 发布 CUDA Toolkit 13.5,开始正式支持 Vera Rubin GPU 架构。共享 GPU 的开发者可以更精细地调整资源分配,使用多个 GPU 的团队则可以将通信和计算整合到同一份执行代码中。

1. 直接调整 GPU 资源分配

新版本扩展了按局部性区域(内存访问位置相近的单元)分配 GPU 计算单元——流式多处理器(SM)的方式。默认设置保证每个区域具有相同数量的 SM,将剩余 SM 留在区域之外。结合使用新设置后,也可将剩余 SM 纳入选定区域,但各区域的 SM 数量可能不同。

应用程序可通过资源分区查询功能,确认各区域的 SM 数量并分配工作量。因此,开发者可以选择保持各区域规模一致以提高可预测性,也可以选择尽量利用各区域中更多可用的 SM。

供多个进程共享 GPU 的 MPS v3 新增了加权时间分片。它通过为各服务器的基础时间设置倍率来调整计算时间,从而为承担较长计算任务的服务器分配更多时间。

SM 分区负载均衡功能允许在有空闲资源时借用默认分区以外的 SM,没有客户端的分区则可以借出资源。借入和借出可分别设置,MPS 会在重新分配借出资源前将其收回。

在难以依赖内存用量通知的环境中,可以通过直接读取当前用量和限额的轮询方式,判断是否回收资源。这降低了对通知送达的依赖,但每次判断是否回收资源时都需要额外操作。

2. CUDA Tile 中的多 GPU 通信

在 GPU 上执行的 CUDA Tile 内核现在可以直接与多个 GPU 通信。单目标指针可访问通过 GPU 互连技术 NVLink 连接的 GPU 内存。多目标指针和专用操作可在连接多个 GPU 的 NVSwitch 交换网络中合并多个 GPU 的结果或存储数据。该网络必须支持用于合并多个 GPU 结果的通信技术 NVLink SHARP。

在执行前准备好让 GPU 访问同一内存的共享内存映射,即可在内核内部结合通信与计算。例如,可将矩阵乘法与 GPU 间的结果求和整合到同一个内核中。

在 Tile 内核中调用传统线程执行模式 SIMT 的库函数的功能也已推出公开预览。这使开发者不必在独立内核间传递数据,而能直接处理内核已有的数据。对相关库的支持将逐步启用。

3. Python 与 CCCL 的开发便利性

CUDA Python 核心库 1.2 的批量复制可将多个缓冲区复制合并为一次驱动调用提交。用于复用执行流程的 CUDA Graph 也可在不重建待执行计算图的情况下,更新内核参数和内存复制等操作,因此应用程序参数变化后仍可复用现有计算图。

程序化依赖启动允许协作内核在同一流中重叠执行,适用于表示 GPU 指令功能代际等级的计算能力为 9.0 及以上的 GPU。后续内核可以在前一个内核结束前开始独立任务。

以下是原文中的配置示例。内核必须实现程序化依赖启动的同步协议。

from cuda.core import LaunchConfig, launch

config = LaunchConfig(
    grid=num_blocks,
    block=256,
    programmatic_stream_serialization=True,
)

# The kernel must implement the PDL synchronization protocol.
launch(stream, config, dependent_kernel, *kernel_args)

在 GPU 算法库集合 CCCL 3.5 中,可以通过 CUB 的公开调优策略,直接调整每个线程块的线程数等算法执行设置。

浮点累加求和可以请求固定求和顺序,从而在相同 GPU、输入和构建配置下复现多次执行的结果。

此外还新增了批量选择功能,可在多个区间内分别选出最大的或最小的 K 个项目。NVIDIA 表示,该功能已集成到语言模型推理库 FlashInfer 中。

4. 数学与图像库的性能改进

cuBLAS 对直接执行 64位浮点(FP64)运算的对称更新进行了改进,适用于特征值求解和矩阵分解等科学计算。据 NVIDIA 称,部分运算在 NVIDIA B200 上最高加速 1.5倍,使用这些运算的代码无需修改即可获得性能提升。

cuSPARSE 的 CSR(压缩行存储)稀疏矩阵与稠密矩阵乘法 ALG3 改进了 FP32(32位浮点)和 FP64 运算。NVIDIA 表示,这些运算在数据中心 GPU 上加速了 1.65~2.27倍。

表:cuSPARSE 稀疏三角求解 ALG2 相比 ALG1 的性能

条件:以 NVIDIA 公布的信息为准。对比稀疏三角求解 ALG2 与 ALG1 的性能,原文未提供测试设备。

单位:加速比(倍)

数学与图像库的性能改进
库与运算设备与运算条件比较基准提升幅度统计方式
cuSPARSE 稀疏三角求解 ALG2未提供设备信息ALG12.7倍几何平均

几何平均是将多个比值相乘后求平均的一种方式。

对于反复求解稀疏三角系统的任务,可以分别考察求解时间和准备时间。ALG2 提高了重复求解的性能。据 NVIDIA 称,求解前分析阶段的几何平均加速比也达到 2.79倍,从而缩短准备时间。

NVIDIA 还表示,cuSPARSE 图着色的几何平均加速比约为 3倍。

NVIDIA 表示,nvJPEG 的 GPU 混合解码吞吐量提升了 10~600%,具体取决于图像大小以及是否使用标准霍夫曼表。

5. 将运行时负担转移到部署阶段

nvprune 的预编译在打包过程中,将中间设备代码(按执行设备转换的中间代码)转换为 GPU 可直接执行的机器码,消除了目标架构已确定的部署包在运行时的编译负担。相应地,部署者需要选择适合目标环境的架构,并在所支持的 GPU 上验证产物。

Rubin 及之后的 GPU 在 Windows 上部署时,必须使用 WDDM 或仅用于计算的 MCDM 驱动模式,而不是原有的 TCC。

cuobjdump 的符号输出改为带有说明的四列格式,因此读取该输出的脚本也需要修改。

CUDA 13.5 的核心在于扩展 GPU 分割和多 GPU 互连的选择,让开发者能够自行调整资源利用率与执行方式之间的平衡。