Tensor Core操作说明:
关于sm_70上的cuDNN v7使用Tensor Core Operations的一些说明:Volta GPU系列支持Tensor Core操作,这些操作执行多个浮点产品的并行浮点积累。 将数学模式设置为CUDNN_TENSOR_OP_MATH表示库将如前所述使用Tensor Core操作。 缺省值是CUDNN_DEFAULT_MATH,这个缺省值表示库将避免Tensor Core操作。 默认模式是序列化操作,张量核心操作是并行操作,因此由于操作的不同顺序,两者可能会导致略微不同的数值结果。 注意:当Tensor Core操作不受支持或不允许时,库将回退到默认的数学模式。
使用Tensor Core操作将两个矩阵相乘的结果与使用一系列传统标量浮点运算序列实现的产品非常接近,但并不总是相同。 所以cuDNN在启用Tensor Core操作之前需要明确的用户选择加入。 然而,训练常用深度学习模型的实验显示,使用Tensor Core操作和遗留浮点路径之间的差异可忽略不计(根据最终网络准确性和迭代次数来衡量)。 因此,图书馆将两种操作模式视为功能上难以区分,并且允许将传统路径用作使用Tensor Core操作不适用的情况下的合法回退。
向后兼容性和弃用策略:
当更改现有cuDNN函数“foo”的API(通常用于支持某些新功能)时,首先创建一个新例程“foo_v ”,其中n表示首次引入新API的cuDNN版本,而“ foo“不变。 这确保了与cuDNN的版本n-1的向后兼容性。 此时,“foo”被认为已被弃用,并应由cuDNN的用户对待。 根据以下策略,我们逐渐删除在库的几个版本过程中弃用和添加的API条目:
- 在版本n + 1中,传统API条目“foo”被重新映射到新的API“foo_v ”,其中f是n之前的某个cuDNN版本。
- 同样在版本n + 1中,未修饰的API条目“foo”被修改为与“foo_ ”具有相同的签名。 “foo_ ”保持原样。
- 本发行版中维护了已弃用的具有前缀后缀_v 和具有后缀_v 的新API条目的前API条目。
- 在版本n + 2中,删除给定条目的两个后缀条目。
作为一个经验法则,当例程以两种形式出现时,一种带有后缀,另一种没有后缀,非后缀条目将被视为弃用。 在这种情况下,强烈建议用户迁移到新的后缀API条目,以确保在以下cuDNN版本中具有向后兼容性。 当例程出现多个后缀时,未添加的API条目将映射到较高编号的后缀。 在这种情况下,强烈建议使用非后缀API条目来保证与以下cuDNN版本的后向兼容性。
分组卷积:
通过使用cudnnSetConvolutionGroupCount()设置GroupCount> 1,cuDNN支持分组卷积。 在内存中,所有输入/输出张量都存储所有独立的组。 这样,所有张量描述符都必须描述整个卷积的大小(而不是指定每个组的大小)。 请参阅以下尺寸/步骤,以解释如何针对二维卷积运行NCHW格式的分组卷积。 请注意,支持其他格式和3-D卷积(请参阅相关的卷积API了解有关支持的信息); 组数为1的张量stridings仍然适用于任何组计数。