cuDNN v7.6.3 及以后,conv 维度会被自动padded到8的倍数来启用 tensorcore(Channels In And Out)
BN 里满足以下条件,就可以开启 semi-persistent NHWC kernel:
- 所有tensor,都是 NHWC packed,而且数据类型是
CUDNN_DATA_HALF
- 输入参数 mode 必须是
CUDNN_BATCHNORM_SPATIAL_PERSISTENT
# cudnn 8.0 里默认就会用 - HWC 格式
对于使用除了 *_ALGO_WINOGRAD_NONFUSED 算法之外,当下列条件满足,cuDNN lib 就出发 Tensor Core 操作:
- 输入、filter和输出都是
CUDNN_DATA_HALF
(包含bfloat16?) - 输入和输出 feature map(比如 channel 维度)是8的倍数。当通道维度不是8的倍数,可以用 padding
- filter 类型是
CUDNN_TENSOR_NCHW
ORCUDNN_TENSOR_NHWC
- 如果 filter 用的
CUDNN_TENSOR_NHWC
,当输入,filter和输出数据都被对齐到 128 bit(16B) 边界
nsight system 里打开 gpu metrics指标(需要root权限),就可以捕获,在ui里查看 tensor active 这一项。或者是dlprof 里,会有两列:tensor eligible
Deep Learning Performance Optimization with Profiling Tools: 主要介绍 DLProf, 里面有 Tensor Core Efficiency ,可以看出有多少可用 TC,但是没用到