文件最后提交记录最后更新时间
21 天前
21 天前
21 天前
16 天前
16 天前
21 天前
16 天前
21 天前
21 天前
README

DequantSituQuant

产品支持情况

产品 是否支持
Ascend 950PR/Ascend 950DT ×
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品
Atlas 200I/500 A2 推理产品 ×
Atlas 推理系列产品 ×
Atlas 训练系列产品 ×

功能说明

  • 算子功能:在Situ激活函数前后添加dequant和quant操作,实现x的DequantSituQuant计算。

  • 计算公式:

    1. 根据输入数据类型x的不同,反量化路径不同:

      • INT8路径:

        dequantOuti=cast_to_float(xi)×weight_scalei+biasidequantOut_i = cast\_to\_float(x_i) \times weight\_scale_i + bias_i

      • INT32路径:

        dequantOuti=cast_to_float(xi)×weight_scalei×activation_scalei+biasidequantOut_i = cast\_to\_float(x_i) \times weight\_scale_i \times activation\_scale_i + bias_i

      • BF16/FLOAT16路径(预反量化):

        dequantOuti=cast_to_float(xi)dequantOut_i = cast\_to\_float(x_i)

    2. Situ激活:

      situa=β×tanh⁡(gate/β)×sigmoid(gate)situ_a = \beta \times \tanh(gate / \beta) \times sigmoid(gate)

      当linear_beta > 0时:

      up=linear_beta×tanh⁡(up/linear_beta)up = linear\_beta \times \tanh(up / linear\_beta)

      situOut=situa×upsituOut = situ_a \times up

      其中,当activate_left为true时,gate取dequantOut的前半部分,up取后半部分;当activate_left为false时,gate取dequantOut的后半部分,up取前半部分。

    3. 量化:

      • static模式:

        outi=trunc(situOuti/quant_scalei+quant_offseti)out_i = trunc(situOut_i / quant\_scale_i + quant\_offset_i)

      • dynamic模式:

        scalei=absmax(situOuti)/127scale_i = absmax(situOut_i) / 127

        outi=trunc(situOuti/scalei)out_i = trunc(situOut_i / scale_i)

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
x 输入 输入待处理的数据,公式中的x。输入不支持包含±inf或nan。 INT8、INT32、BFLOAT16、FLOAT16 ND
weight_scale 输入 反量化的weight scale,公式中的weight_scale。输入不支持包含±inf或nan。 FLOAT ND
activation_scale 输入 反量化的activation scale,公式中的activation_scale。输入不支持包含±inf或nan。 FLOAT ND
bias 输入 反量化的bias,公式中的bias。输入不支持包含±inf或nan。 FLOAT ND
quant_scale 输入 量化的scale,公式中的quant_scale。输入不支持包含±inf或nan。 FLOAT ND
quant_offset 输入 量化的offset,公式中的quant_offset。输入不支持包含±inf或nan。 FLOAT ND
group_index 输入 MoE分组需要的group_index。输入不支持包含±inf或nan。 INT64 ND
beta 属性 Situ激活的beta参数,公式中的β。不能为0。默认4.0。 FLOAT -
linear_beta 属性 Situ激活的linear_beta参数,公式中的linear_beta。当值≤0时不启用。默认25.0。 FLOAT -
activate_left 属性 表示gate取dequantOut的前半部分还是后半部分,公式中的activate_left。默认true。 BOOL -
quant_type 属性 表示量化模式,对应公式中的static/dynamic模式。支持"static"和"dynamic"。默认"dynamic"。 STRING -
y 输出 量化后的输出,公式中的out。 INT8 ND
y_scale 输出 动态量化的scale,公式中的scale(仅dynamic模式有意义)。 FLOAT ND

约束说明

  • x的最后一维需要是2的倍数。
  • 当x的数据类型为INT8时,x维度≥2维;当x的数据类型为INT32/BF16/FLOAT16时,x维度为2维。
  • beta参数不能为0。
  • INT8路径:必须提供weight_scale,禁止activation_scale和group_index。
  • INT32:必须提供weight_scale和activation_scale,禁止quant_scale和quant_offset。
  • BFLOAT16/FLOAT16:所有可选输入均不使用(预反量化模式)。
  • 当quant_type为static时,quant_scale必须提供。
  • 当quant_type为dynamic时,quant_scale可选(作为smoothScale使用)。
  • 算子支持的输入张量的内存大小有上限,校验公式:weight_scale张量内存大小+bias张量内存大小+quant_scale张量内存大小+quant_offset张量内存大小 + (activation_scale张量内存大小 + y_scale张量内存大小)/40 + x张量最后一维H内存大小 * 10 < 192KB。

调用说明

调用方式 调用样例 说明
aclnn调用 test_aclnn_dequant_situ_quant 通过aclnnDequantSituQuant接口方式调用DequantSituQuant算子。
图模式调用 - 通过算子IR构图方式调用DequantSituQuant算子。