数据格式

数据格式(format)是用于描述一个多维Tensor的轴的业务语义,一般在CNN(Convolutional Neural Network)类的API中需要描述具体的格式。
  • 算子API支持的数据格式一般形式为“ACL_FORMAT_XXXX”,为方便描述,一般可简写为“XXXX”。
  • 数据格式中维度含义:N(Batch)表示批量大小、H(Height)表示特征图高度、W(Width)表示特征图宽度、C(Channels)表示特征图通道、D(Depth)表示特征图深度。

常见数据格式

目前大部分算子API都是支持ND数据格式的。例如aclnnAdd接口,均标明支持的数据格式是ND(即多维Tensor的,低维度优先连续排布的规则)。

对于aclnnConvolution这类CNN类的API,该API要求输入的aclTensor设置具有业务语义的格式,而不是ND格式。此类算子,在计算过程中需要知道Tensor中的业务语义才可以进行对应的计算。例如2D卷积中,需要知道Batch维度、Channel维度、Height维度、Width维度与Tensor维度的对应关系是什么。

当调用aclCreateTensor接口的时候,根据API要求设置Tensor的数据格式,当前支持的数据格式有:ACL_FORMAT_ND、ACL_FORMAT_NCHW、ACL_FORMAT_NHWC、ACL_FORMAT_HWCN、ACL_FORMAT_NDHWC、ACL_FORMAT_NCDHW、ACL_FORMAT_NC、ACL_FORMAT_NCL。

对于非ND的Tensor,Tensor的维度要求与format表述是一致的。例如:

私有数据格式

除了常见的数据格式,还存在其他的数据格式,比如ACL_FORMAT_NC1HWC0、ACL_FORMAT_FRACTAL_Z、ACL_FORMAT_NC1HWC0_C04、ACL_FORMAT_FRACTAL_NZ、ACL_FORMAT_NDC1HWC0、ACL_FORMAT_FRACTAL_Z_3D等。

这些格式,属于NPU的一些私有格式,当前绝大多数的aclnn API还不支持这些格式。如果有个别API申明了支持的数据格式,请以该API实际描述为准。