SwinTransformerLnQkvQuant
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | × |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | × |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | × |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | × |
| Kirin X90 处理器系列产品 | √ |
| Kirin 9030 处理器系列产品 | √ |
功能说明
-
算子功能:Swin Transformer 网络模型 完成 Q、K、V 的计算。
-
计算公式:
(Q,K,V)=(Quant(Layernorm(x).transpose())∗weight).dequant().transpose().split()(Q,K,V)=(Quant(Layernorm(x).transpose()) * weight).dequant().transpose().split()
其中,weight 是 Q、K、V 三个矩阵权重的拼接。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 表示待进行归一化计算的目标张量,公式中的x, Device侧的aclTensor,数据类型支持FLOAT16。只支持维度为[B,S,H],其中B为batch size且只支持[1,32],S为原始图像长宽的乘积,H为序列长度和通道数的乘积且小于等于1024。不支持非连续的Tensor。 | FLOAT16 | ND |
| gamma | 输入 | 表示layernorm计算中尺度缩放的大小,维度只支持1维且为[H],Device侧的aclTensor。不支持非连续的Tensor。 | FLOAT16 | ND |
| beta | 输入 | 表示layernorm计算中尺度偏移的大小,维度只支持1维且维度为[H],Device侧的aclTensor。不支持非连续的Tensor。 | FLOAT16 | ND |
| weight | 输入 | 表示目标张量转换使用的权重矩阵,维度只支持2维且维度为[H, 3 * H],Device侧的aclTensor。不支持非连续的Tensor。 | INT8 | ND |
| bias | 输入 | 表示目标张量转换使用的偏移矩阵,维度只支持1维且维度为[3 * H],Device侧的aclTensor。不支持非连续的Tensor。 | INT32 | ND |
| quantScale | 输入 | 表示目标张量量化使用的缩放参数,维度只支持1维且维度为[H],Device侧的aclTensor。不支持非连续的Tensor。 | FLOAT16 | ND |
| quantOffset | 输入 | 表示目标张量转换使用的偏移矩阵,维度只支持1维且维度为[3 * H],Device侧的aclTensor。不支持非连续的Tensor。 | INT32 | ND |
| dequantScale | 输入 | 表示目标张量乘以权重矩阵之后反量化使用的缩放参数,维度只支持1维且维度为[3 * H],Device侧的aclTensor。不支持非连续的Tensor。 | UINT64 | ND |
| headNum | 输入 | 表示转换使用的通道数;支持范围[1,32]。 | int | - |
| seqLength | 输入 | 表示转换使用的序列长度。只支持32/64两种。 | int | - |
| epsilon | 输入 | layernorm 计算除0保护值;为了保证精度,建议小于等于1e-4。 | float | - |
| oriHeight | 输入 | layernorm 中S轴transpose的维度;oriHeight*oriWeight需等于输入x的第二维S的大小,且为hWinSize的整数倍。 | int | - |
| oriWeight | 输入 | layernorm 中S轴transpose的维度;oriHeight*oriWeight需等于输入x的第二维S的大小,且为wWinSize的整数倍。 | int | - |
| hWinSize | 属性 | 使用的特征窗宽度大小;支持范围[7,32]。 | int | - |
| wWinSize | 属性 | 使用的特征窗宽度大小;支持范围[7,32]。 | int | - |
| weightTranspose | 属性 | weight矩阵需要转置,当前不支持不转置场景。 | bool | - |
| queryOutputOut | 输出 | 表示转换之后的张量,公式中的Q,Device侧的aclTensor。不支持非连续的Tensor。 | FLOAT16 | ND |
| keyOutputOut | 输出 | 表示转换之后的张量,公式中的K,Device侧的aclTensor。不支持非连续的Tensor。 | FLOAT16 | ND |
| valueOutputOut | 输出 | 表示转换之后的张量,公式中的V,Device侧的aclTensor。不支持非连续的Tensor。 | FLOAT16 | ND |
约束说明
- seqLength只支持32/64。
- oriHeight*oriWeight=输入x Tensor的第二维度,且oriHeight为hWinSize的整数倍,oriWeight为wWinSize的整数倍。
- hWinSize和wWinSize范围只支持7~32。
- 输入x Tensor的第一维度B只支持1~32。
- weight需要转置。