文件最后提交记录最后更新时间
2 天前
12 天前
10 天前
27 天前
12 天前
12 天前
27 天前
27 天前
16 天前
README

GroupedMatmulActivationQuant

产品支持情况

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

功能说明

  • 算子功能:融合GroupedMatmul、activation和quant计算。当前版本仅支持WeightNz路径下的MXFP8量化场景,激活函数仅支持gelu_tanh。

  • 计算公式:

    • Ascend 950PR/Ascend 950DT:

      MXFP8量化场景:
      • 定义:

        • EE 表示专家数,MM 表示总token数,KK 表示输入特征维度,NN 表示输出特征维度。
        • blocksizeblocksize 表示MX量化时共享指数的分组大小,当前仅支持64。
        • · 表示矩阵乘法, 表示逐元素乘法。
      • 根据group_list确定每个group对应的token范围。

      • 对每个group执行GroupedMatmul和反量化计算,中间结果默认为FLOAT32类型:

        Ci=(Xi⋅weighti)⊙x_scalei Broadcast⊙weight_scalei BroadcastC_i = (X_i \cdot weight_i) \odot x\_scale_{i\ Broadcast} \odot weight\_scale_{i\ Broadcast}

      • 执行gelu_tanh激活:

        Si=GeluTanh(Ci)S_i = GeluTanh(C_i)

        当前kernel底层实现使用gelu_sigmoid函数对gelu_tanh进行近似计算:

        GeluTanh⁡(x)=x1+exp⁡(−1.595769121×(x+0.044715×x3))\operatorname{GeluTanh}(x) = \frac{x}{1 + \exp\left(-1.595769121 \times \left(x + 0.044715 \times x^3\right)\right)}

      • 对激活结果在N轴按blocksize=32blocksize=32分组执行MX动态量化,输出量化结果yy和量化因子y_scaley\_scale

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式 维度(shape)
x 输入 左矩阵,对应公式中的XX FLOAT8_E4M3FN、FLOAT8_E5M2 ND 2维,形如(M, K)
group_list 输入 分组信息,对应公式中的group_list INT64 ND 1维,形如(E,)
weight 动态输入 右矩阵dynamic tensorList。当前MXFP8场景tensorList长度仅支持1。 FLOAT8_E4M3FN FRACTAL_NZ viewShape为3维,storageShape为5维
weight_scale 动态输入 weight的MX量化因子,dynamic tensorList。当前MXFP8场景tensorList长度仅支持1。 FLOAT8_E8M0 ND 4维
bias 动态输入 bias dynamic tensorList。当前MXFP8场景必须为空。 FLOAT ND -
x_scale 可选输入 x的MX量化因子。当前MXFP8场景必须传入。 FLOAT8_E8M0 ND 3维,形如(M, ceil(K / 64), 2)
y 输出 激活并量化后的输出矩阵。 FLOAT8_E4M3FN、FLOAT8_E5M2 ND 2维,形如(M, N)
y_scale 输出 输出y的MX量化因子。 FLOAT8_E8M0 ND 3维,形如(M, ceil(N / 64), 2)
activation_type 必选属性 激活函数类型,当前仅支持"gelu_tanh" STRING - -
transpose_weight 可选属性 表示weight是否转置,默认false。 BOOL - -
group_list_type 可选属性 表示group_list输入的分组方式,支持0和1,默认0。 INT64 - -
tuning_config 可选属性 预留调优参数,默认[0],当前暂不使用。 LIST_INT - -
quant_mode 可选属性 量化模式,当前仅支持"mx" STRING - -
y_dtype 可选属性 输出y的数据类型,默认0;当前支持0、35、36,其中35表示FLOAT8_E5M2,36表示FLOAT8_E4M3FN。 INT64 - -
round_mode 可选属性 量化舍入模式,默认"rint",当前仅支持"rint" STRING - -
scale_alg 可选属性 MX量化scale算法,默认0;支持0或1,其中0表示OCP实现,1表示cuBLAS实现。 INT64 - -
dst_type_max 可选属性 表示maxType的取值,对应公式中的Amax(DType),默认0.0。当前MXFP8场景仅支持0.0。 FLOAT - -

约束说明

  • x仅支持非转置输入;weight支持非转置和转置输入,weight_scale转置属性需要与weight保持一致。
  • N必须为64的整数倍,group_list第一维取值范围为[1, 1024]。
  • bias为空时,支持nullptr、空tensorList或长度为1且元素shape为(0)的空tensorList。

调用说明

调用方式 调用样例 说明
aclnn API test_aclnn_grouped_matmul_activation_quant_weight_nz 通过aclnnGroupedMatmulActivationQuantWeightNz方式调用GroupedMatmulActivationQuant算子。