硬件向前兼容性#
cuDNN 硬件向前兼容性 指的是给定 cuDNN 版本与未来硬件的兼容性。
如果一个 cuDNN 构建版本在未来的硬件上能够正常工作,那么它就是硬件向前兼容的。这允许链接到 cuDNN 的应用程序在未来的硬件上继续工作,而无需更新到更新的 cuDNN 版本。但是,存在一些注意事项。
此功能在 cuDNN 9.0.0 中添加,并且仅适用于使用 CUDA 工具包 12 或更高版本的构建版本。早期版本的 cuDNN 不具备硬件向前兼容性。
cuDNN 的硬件向前兼容性存在一些限制。这些限制将在本节后面进行说明。
CUDNN_LIB_CONFIG设置需要设置为FULL才能实现向前兼容性。
在本节中,除非另有明确说明,否则向前兼容性或兼容性的使用均指硬件向前兼容性。
每个版本,cuDNN 库都有一个它原生支持的 SM 版本列表,该列表在 cuDNN 支持矩阵 中列出。当在这些 SM 版本之一上运行时,库处于原生模式。原生支持是指库包含专门为该 SM 架构编译的显式 CUDA 内核。
另一方面,当在比原生支持的设备更新的设备上运行时,库处于向前兼容性模式,其中将使用 CUDA 内核的 PTX JIT 编译来支持库工作负载。
注意
每个版本的 cuDNN 库都存储了它原生支持的 GPU 的最高 SM 编号;这通常是 cuDNN 版本发布时最新的 NVIDIA GPU 的 SM 编号。可以通过调用函数
cudnnGetMaxDeviceVersion()查询此值。对于任何 SM 编号高于此编号的 GPU,将以向前兼容性模式支持该 SM。
配置向前兼容性模式#
默认情况下,当库检测到它正在新的 GPU 上运行时(该 GPU 它不原生支持),向前兼容性模式会自动启用。如果不需要这样做,请导出 ENV 变量 CUDNN_FORWARD_COMPAT_DISABLE=1 以禁用向前兼容性模式。
在这种情况下,库可能在它不原生支持的未来设备上失败
如果需要支持未来的硬件设备,我们建议
将 cuDNN 库升级到原生支持该设备的版本(这将在新硬件上提供最佳可用支持);或者
保持默认启用向前兼容性支持(即,
CUDNN_FORWARD_COMPAT_DISABLE=0或不导出),这意味着库将默认尝试通过在向前兼容性模式下运行来支持 NVIDIA GPU 的未来架构。
向前兼容性与 Graph API#
我们建议在您计划运行的设备上查询启发式方法,以获得在该查询设备上高性能且有望运行的引擎配置。具体来说,使用 CUDNN_HEUR_MODE_A 查询操作图推荐的引擎配置列表并在其中选择。目前没有其他模式针对向前兼容性进行调整。此建议意味着当从旧设备首次切换到新设备时,用户绝不应使用以前自动调整或以其他方式最终确定的引擎配置。
在向前兼容性模式下,CUDNN_HEUR_MODE_A 具有以下重要属性
当在向前兼容性模式下调用启发式方法时,它不会返回不向前兼容的引擎配置。
它专门针对向前兼容性模式进行了调整,因此可以提供性能更高的配置。
由于在向前兼容性模式下与在原生模式下查询启发式方法时,推荐的引擎配置可能不同,因此这两种模式之间可能无法比较推荐的引擎配置的数值属性和性能。用户应查询推荐引擎的行为注释,并筛选掉那些在向前兼容性模式下具有他们不期望的数值属性的引擎,这与他们在原生模式下的做法类似。
由于向前兼容性模式依赖于 PTX JIT(即时)编译,因此可能存在编译开销。与任何 CUDA 应用程序一样,这些开销可以通过延迟加载来管理(例如,请参阅 CUDA_MODULE_LOADING 环境变量)和缓存 JIT 编译的内核,有关 JIT 缓存的更多信息,请参阅此 CUDA 部分。
请注意,与原生模式一样,不支持反序列化在旧硬件上序列化的执行计划。执行计划必须在匹配的硬件上序列化和反序列化。
支持的图形模式#
虽然目标是使所有可以在 cuDNN 中成功最终确定的操作图都向前兼容,但这在今天还不是真的。以下是截至本版本向前兼容的图形操作集
-
这包括
ConvolutionFwd、ConvolutionBwdFilter和ConvolutionBwdData,或ConvolutionBwBias、NormalizationForward和NormalizationBackward。
-
- ConvBNFprop
完整模式:Scale + Bias + ReLU + Conv + GenStats
部分模式:Conv + GenStats
上面未列出的操作图尚未实现向前兼容;但是,预计在后续版本中将实现向前兼容。目前一些值得注意的不支持的图形模式示例包括
专用运行时融合引擎,用于融合 Attention 和融合 Flash Attention 的图形模式(
fprop和bprop)专用预编译引擎,用于以下图形模式
ConvBNFprop:DBARCS 模式(Dual、Scale、Bias、Add、ReLU、Conv genStats 的缩写)
任何涉及 FP8 数据类型的图形操作
对于尚不向前兼容的操作图,库将返回 status CUDNN_STATUS_NOT_SUPPORTED_ARCH_MISMATCH。
对于通用运行时融合引擎中的以下情况,向前兼容性模式存在一些已知问题
一些涉及以下模式的卷积融合
g 1 中的融合模式(在 通用运行时融合引擎 中)结合
CUDNN_BACKEND_OPERATION_POINTWISE_DESCRIPTOR,其中涉及CUDNN_POINTWISE_MUL (pointwise:Scale)、CUDNN_POINTWISE_ADD (pointwise:Bias)、CUDNN_POINTWISE_RELU_FWD (pointwise:Relu)模式,仅支持 half I/O 数据类型和 float32 计算类型用于convolutionForward/ConvolutionBackwardFilter,而ConvolutionBackwardData不支持任何数据类型。不支持具有混合精度输入张量的 Matmul 操作。
主循环融合在任一输入分支上具有多个完整张量的 Matmul 融合不受支持。
对于涉及浮点输入到数据梯度操作的融合模式,仅支持 NHWC 布局格式。