大模型稀疏注意力 sparseMode 详解
本文基于CANN开源社区的ops-nn仓库进行技术解读CANN组织链接:https://atomgit.com/cann仓库链接:https://atomgit.com/cann/ops-nn数据格式(format)是用于描述一个多维Tensor的轴的业务语义,表示数据的物理排布格式,如1D、2D、3D、4D、5D等,一般在CNN(Convolutional Neural Networks)类的A
数据格式
本文基于CANN开源社区的ops-nn仓库进行技术解读
CANN组织链接:https://atomgit.com/cann
仓库链接:https://atomgit.com/cann/ops-nn
数据格式(format)是用于描述一个多维Tensor的轴的业务语义,表示数据的物理排布格式,如1D、2D、3D、4D、5D等,一般在CNN(Convolutional Neural Networks)类的API中需要描述具体的格式。
关于aclTensor支持的全量数据格式范围参见《acl API(C)》中“数据类型及其操作接口>aclFormat”。
关于数据格式排布原理介绍参见《Ascend C算子开发指南》中“概念原理和术语>神经网络和算子>数据排布格式”。
使用说明
目前大部分算子API都是支持ND数据格式的。例如aclnnAdd接口,均标明支持的数据格式是ND(即多维Tensor的,低维度优先连续排布的规则)。对于aclnnConvolution,其属于CNN类API,要求输入的aclTensor设置具有业务语义的格式,而不是ND格式。此类算子,在计算过程中需要知道Tensor中的业务语义才可以进行对应的计算。例如2D卷积中,需要知道Batch维度、Channel维度、Height维度、Width维度与Tensor维度的对应关系是什么。
说明:
- 两段式接口参数说明时,为简化描述,将原始数据格式“ACL_FORMAT_XXXX_”简写为“XXXX”。
- 数据格式中各维度含义:N(Batch)表示批量大小、H(Height)表示特征图高度、W(Width)表示特征图宽度、C(Channels)表示特征图通道、D(Depth)表示特征图深度、L(Length)表示特征图长度。
常见数据格式
通过aclCreateTensor接口创建aclTensor时,需根据API业务要求设置数据格式,当前支持的数据格式有:
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表述是一致的。例如:
- 5D的Tensor:要求为ACL_FORMAT_NCDHW、ACL_FORMAT_NDHWC或者ACL_FORMAT_ND(如果API参数说明中未标明支持ND,设置ND格式后API将会校验报错)。
- 4D的Tensor:要求为ACL_FORMAT_NCHW、ACL_FORMAT_NHWC、ACL_FORMAT_HWCN或者ACL_FORMAT_ND。
- 3D的Tensor:要求为ACL_FORMAT_NCL或者ACL_FORMAT_ND。
- 2D的Tensor:要求为ACL_FORMAT_NC或者ACL_FORMAT_ND。
- 其他维度的Tensor:要求为ACL_FORMAT_ND。
私有数据格式
除了上述常见数据格式,还存在其他的数据格式,比如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实际描述为准。
数据类型
通过aclCreateTensor接口创建aclTensor时,支持的全量数据类型参见《acl API(C)》中“数据类型及其操作接口>aclDataType”。
两段式接口参数说明时,为了方便描述,支持的数据类型将采用如下简写形式。
表 1 数据类型简写表
| 原始数据类型 | 简写形式(不区分大小写) |
|---|---|
| ACL_FLOAT | FLOAT或FLOAT32 |
| ACL_FLOAT16 | FLOAT16 |
| ACL_INT8 | INT8 |
| ACL_INT32 | INT32 |
| ACL_UINT8 | UINT8 |
| ACL_INT16 | INT16 |
| ACL_UINT16 | UINT16 |
| ACL_UINT32 | UINT32 |
| ACL_INT64 | INT64 |
| ACL_UINT64 | UINT64 |
| ACL_DOUBLE | DOUBLE或FLOAT64 |
| ACL_BOOL | BOOL |
| ACL_STRING | STRING |
| ACL_COMPLEX64 | COMPLEX64 |
| ACL_COMPLEX128 | COMPLEX128 |
| ACL_BF16 | BF16或BFLOAT16 |
| ACL_INT4 | INT4 |
| ACL_UINT1 | UINT1 |
| ACL_COMPLEX32 | COMPLEX32 |
| ACL_HIFLOAT8 | HIFLOAT8 |
| ACL_FLOAT8_E5M2 | FLOAT8_E5M2 |
| ACL_FLOAT8_E4M3FN | FLOAT8_E4M3FN |
| ACL_FLOAT8_E8M0 | FLOAT8_E8M0 |
| ACL_FLOAT6_E3M2 | FLOAT6_E3M2 |
| ACL_FLOAT6_E2M3 | FLOAT6_E2M3 |
| ACL_FLOAT4_E2M1 | FLOAT4_E2M1 |
| ACL_FLOAT4_E1M2 | FLOAT4_E1M2 |
更多推荐



所有评论(0)