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需要转置。