文件最后提交记录最后更新时间
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
1 个月前
README

FakeQuantWithMinMaxArgsGradient

产品支持情况

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

功能说明

  • 算子功能:FakeQuantWithMinMaxArgs的反向梯度算子,通过Nudge后的nudgedMin/nudgedMax构建0/1mask,对梯度进行乘法门控。

  • 计算公式:

    Nudge预计算(host端,与FakeQuantWithMinMaxArgs相同):

    • qMin=narrow_range?1:0qMin = narrow\_range ? 1 : 0
    • qMax=2num_bits−1qMax = 2^{num\_bits} - 1
    • scale=(max−min)/(qMax−qMin)scale = (max - min) / (qMax - qMin)
    • nudgedZeroPoint=round(qMin−min/scale)nudgedZeroPoint = round(qMin - min / scale),裁剪至 [qMin,qMax][qMin, qMax]
    • nudgedMin=(qMin−nudgedZeroPoint)×scalenudgedMin = (qMin - nudgedZeroPoint) \times scale
    • nudgedMax=(qMax−nudgedZeroPoint)×scalenudgedMax = (qMax - nudgedZeroPoint) \times scale

    注:上述Nudge中间值仅用于host端预计算,传递到kernel的仅为nudgedMinnudgedMax

    梯度计算(kernel端):

    mask={1,nudgedMin≤x≤nudgedMax0,otherwisemask = \begin{cases} 1, & nudgedMin \le x \le nudgedMax \\ 0, & \text{otherwise} \end{cases}

    y=gradients×masky = gradients \times mask

    • x为NaN时,mask = 0(NaN比较结果为false);当gradients为NaN时,NaN通过乘法自然传播(IEEE754: NaN × 0/1 = NaN)。
    • 乘法后对所有元素执行sign-bit OR(vOut_u32 |= vG_u32 & 0x80000000),修复Ascend Mul可能丢失-0符号位的问题;对正常数值和NaN该操作幂等无副作用。

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
gradients 输入
  • 表示上游梯度Tensor,对应公式中的gradients;
  • shape与输入x、输出y一致。
FLOAT ND
x 输入
  • 表示前向输入Tensor,用于构建mask判断x是否在量化范围内;
  • shape与gradients、输出y一致。
FLOAT ND
min 可选属性
  • 表示量化范围的最小值;
  • 必须小于max;
  • 缺省值为-6.0。
FLOAT -
max 可选属性
  • 表示量化范围的最大值;
  • 必须大于min;
  • 缺省值为6.0。
FLOAT -
num_bits 可选属性
  • 表示量化位宽;
  • 取值范围 [2, 16];
  • 缺省值为8。
INT -
narrow_range 可选属性
  • 表示是否使用窄量化范围;
  • true时qMin=1,false时qMin=0;
  • 缺省值为false。
BOOL -
y 输出
  • 表示梯度计算输出,对应公式中的y;
  • shape和输入x一致。
FLOAT ND

约束说明

  • 输入gradientsx与输出y的数据类型仅支持FLOAT32,shape必须完全一致。
  • min必须小于max
  • num_bits取值范围为[2, 16]。

调用说明

调用方式 样例代码 说明
图模式 test_geir_fake_quant_with_min_max_args_gradient 通过GE IR构图方式调用FakeQuantWithMinMaxArgsGradient算子(per-tensor min/max/num_bits/narrow_range标量属性)。