后端 API 概述#

NVIDIA CUDA 深度神经网络 (cuDNN) 库提供了一个基于上下文的 API,可以轻松实现多线程以及与 CUDA 流的(可选)互操作性。此 API 参考列出了每个子库的数据类型和 API 函数。

cuDNN 版本 9 库被重组为多个子库。这种新的库结构将传统功能(cuDNN 版本 7 及更早版本中的命令式 API,具有固定的操作和融合模式)与 Graph API(cuDNN 版本 8 中引入的声明式 API)以及引擎实现分离开来。Graph API 现在被分组到一个单独的库中 (libcudnn_graph.so)。

我们建议用户通过 Graph API 进行 API 调用,但旧的 shim 层 (libcudnn.so) 和传统库 (libcudnn_cnn.solibcudnn_ops.solibcudnn_adv.so) 仍然可以直接使用。引擎库 (libcudnn_engines_precompiled.solibcudnn_heuristic.solibcudnn_engines_runtime_compiled.so) 包含必要的内部功能,以支持上述子库。这种库拆分以允许用户方面在加载库方面具有更大的灵活性。更灵活的库可配置性机制将在更高版本的 cuDNN 中引入。

Dynamic Library Dependency Structure of cuDNN on Linux

API 分为以下库,每个库在 include 目录中都有相应的头文件

cudnn_graph

  • 此实体包含与 cuDNN 上下文创建和销毁相关的 API 函数、有效 cuDNN 后端描述符类型的列表、有效属性的列表、有效属性值的子集以及每个后端描述符类型及其属性的完整描述。此外,它还负责加载正确的引擎库。

  • 引擎和启发式库 (cudnn_engines_precompiledcudnn_engines_runtime_compiledcudnn_heuristics) 通过 cudnn_graph 使用 dlopen 加载,并为 cudnn_graph 中的 API 提供实现。将这些引擎彼此分离的主要思想是在未来的 cuDNN 版本中,为用户提供一种仅加载他们需要的功能的方式,从而提供节省内存和磁盘空间的机会。

cudnn_ops

  • 此实体包含与张量描述符管理、张量实用程序 API 函数以及常见的机器学习算法(如批量归一化、softmax、dropout 等)相关的传统 API 函数。此库依赖于 cudnn_graph,并间接依赖于 cudnn_engines_precompiled,因为某些 API 的内核驻留在 cudnn_engines_precompiled 库中。

cudnn_cnn

  • 此实体包含与卷积神经网络相关的所有传统 API 函数。此库依赖于 cudnn_opscudnn_graphcudnn_engines_precompiled 库必须存在,cudnn_cnn 才能正确加载。

cudnn_adv

  • 此实体包含所有其他功能和算法。这包括 RNN、CTC 损失和多头注意力。此库依赖于 cudnn_opscudnn_graph

已添加、已弃用和已移除的 API#

cuDNN 9.5.0 的 API 更改#

cuDNN 9.2.0 的 API 更改#

cuDNN 9.1.0 的 API 更改#

  • 已添加的枚举

    • CUDNN_NUMERICAL_NOTE_STRICT_NAN_PROP

    • CUDNN_POINTWISE_ATAN2

    • CUDNN_POINTWISE_CBRT

    • CUDNN_POINTWISE_CLZ

    • CUDNN_POINTWISE_IS_FINITE

    • CUDNN_POINTWISE_POPC

    • CUDNN_POINTWISE_ROUND_NEAREST_AFZ

    • CUDNN_POINTWISE_ROUND_NEAREST_EVEN

    • CUDNN_POINTWISE_SHIFT_LEFT

    • CUDNN_POINTWISE_SHIFT_RIGHT_ARITHMETIC

    • CUDNN_POINTWISE_SHIFT_RIGHT_LOGICAL

    • CUDNN_POINTWISE_XOR

    • CUDNN_POINTWISE_AND

    • CUDNN_POINTWISE_OR

    • CUDNN_POINTWISE_NOT

cuDNN 9.0.0 的 API 更改#

已移除的 9.0.0 API#

在 v8 中已弃用,在 v9 中已移除的函数

替换函数

  • cudnnCopyAlgorithmDescriptor()

  • cudnnCreateAlgorithmDescriptor()

  • cudnnCreateAlgorithmPerformance()

  • cudnnCreatePersistentRNNPlan()

  • cudnnDestroyPersistentRNNPlan()

  • cudnnSetPersistentRNNPlan()

cudnnBuildRNNDynamic()

  • cudnnDestroyAlgorithmDescriptor()

  • cudnnDestroyAlgorithmPerformance()

  • cudnnGetRNNBiasMode()

  • cudnnGetRNNDescriptor_v6()

  • cudnnGetRNNMatrixMathType()

  • cudnnGetRNNPaddingMode()

  • cudnnGetRNNProjectionLayers()

cudnnGetRNNDescriptor_v8()

  • cudnnFindRNNBackwardDataAlgorithmEx()

  • cudnnFindRNNBackwardWeightsAlgorithmEx()

  • cudnnFindRNNForwardInferenceAlgorithmEx()

  • cudnnFindRNNForwardTrainingAlgorithmEx()

  • cudnnGetAlgorithmDescriptor()

  • cudnnGetAlgorithmPerformance()

  • cudnnGetAlgorithmSpaceSize()

  • cudnnGetRNNBackwardDataAlgorithmMaxCount()

  • cudnnGetRNNBackwardWeightsAlgorithmMaxCount()

  • cudnnGetRNNLinLayerBiasParams()

  • cudnnGetRNNLinLayerMatrixParams()

cudnnGetRNNWeightParams()

cudnnGetRNNParamsSize()

cudnnGetRNNWeightSpaceSize()

  • cudnnGetRNNForwardInferenceAlgorithmMaxCount()

  • cudnnGetRNNForwardTrainingAlgorithmMaxCount()

  • cudnnGetRNNTrainingReserveSize()

  • cudnnGetRNNWorkspaceSize()

cudnnGetRNNTempSpaceSizes()

cudnnRestoreAlgorithm()

  • cudnnRNNBackwardData()

  • cudnnRNNBackwardDataEx()

cudnnRNNBackwardData_v8()

  • cudnnRNNBackwardWeights()

  • cudnnRNNBackwardWeightsEx()

  • cudnnRNNForwardInference()

  • cudnnRNNForwardInferenceEx()

  • cudnnRNNForwardTraining()

  • cudnnRNNForwardTrainingEx()

cudnnRNNForward()

cudnnRNNGetClip()

cudnnRNNGetClip_v9()

cudnnRNNSetClip()

cudnnRNNSetClip_v9()

  • cudnnSaveAlgorithm()

  • cudnnSetAlgorithmDescriptor()

  • cudnnSetAlgorithmPerformance()

  • cudnnSetRNNAlgorithmDescriptor()

  • cudnnSetRNNBiasMode()

  • cudnnSetRNNDescriptor_v6()

  • cudnnSetRNNMatrixMathType()

  • cudnnSetRNNPaddingMode()

  • cudnnSetRNNProjectionLayers()

cudnnSetRNNDescriptor_v8()

  • 已移除的类型

    • cudnnRNNPaddingMode_t

    • cudnnAttnQueryMap_t