文件最后提交记录最后更新时间
2 小时前
8 小时前
17 天前
17 天前
17 天前
17 天前
3 个月前
8 小时前
README

SwigluMxQuant

产品支持情况

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

功能说明

  • 算子功能:融合算子,实现SwiGLU激活函数与动态块量化的组合计算。先对输入计算SwiGLU激活函数,然后对结果进行基于块的动态量化,输出低精度的FP4/FP8张量和对应的缩放因子。

  • 计算公式:

    阶段1:SwiGLU激活函数

    gate, hidden = split(x, dim=dim)

    swish = sigmoid(gate) * gate

    act = swish * hidden

    阶段2:动态块量化

    scale[block_idx] = max(abs(block))

    y[block_idx] = Cast(block / scale[block_idx])

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
x 输入 输入张量,在dim维度上的尺寸必须是2的倍数。 FLOAT16、BFLOAT16 ND
group_index 可选输入 shape必须为1维,且小于等于256 INT32、INT64 ND
activate_dim 属性 SwiGLU的分割维度,取值范围为[-1, -2]。 INT64 -
activate_left 属性 预留参数,表示SwiGLU时激活左半部或右半部。 BOOL -
swiglu_mode 属性 预留参数,表示SwiGLU时是否采用变体计算方式。 INT64 -
clamp_limit 属性 预留参数,变体SwiGLU时生效。 FLOAT -
glu_alpha 属性 预留参数,变体SwiGLU时生效。 FLOAT -
glu_bias 属性 预留参数,变体SwiGLU时生效。 FLOAT -
group_mode 属性 group_index存在时生效,表示group_index为count模式或cumsum模式。 INT64 -
axis 属性 量化轴,沿此维度进行分块量化,取值范围为[-1, -2]。 INT64 -
dst_type 属性 目标量化类型:40=FP4_E2M1, 41=FP4_E1M2, 36=FP8_E4M3FN, 35=FP8_E5M2。 INT64 -
round_mode 属性 舍入模式,用于量化时的类型转换,取值为"rint"、"floor"、"round"。 STRING -
scale_alg 属性 缩放算法:0=OCP,1=cuBLAS, 2=RNE。 INT64 -
max_dtype_value 属性 预留参数,scale_alg=2且y为FP4_E1M2时生效。 FLOAT -
y 输出 量化后的输出张量,形状为SwiGLU输出的一半(沿dim维度)。 FLOAT4_E2M1、FLOAT4_E1M2、FLOAT8_E4M3FN、FLOAT8_E5M2 ND
mxscale 输出 每个量化块的缩放因子。 FLOAT8_E8M0 ND

约束说明

  • 输入x支持2-7维张量,在activate_dim指定维度上的尺寸必须能被2整除。
  • activate_dim和axis的值必须为-1或-2。
  • activate_dim为-2时, swiglu_mode必须为0。
  • 当activate_dim = -2 或者axis = -2, group_index存在时,输入x必须为2维。
  • 当dst_type为FP4类型时,输出shape的最后一维必须能被2整除。
  • 当dst_type为FP4类型时,scale_alg必须为0。
  • group_index存在时,必须为1维,且shape值小于等于256。
  • FP8输出类型仅支持"rint"舍入模式。

调用说明

调用方式 调用样例 说明
aclnn调用 test_aclnn_swiglu_mx_quant 通过aclnnSwigluMxQuant接口方式调用SwigluMxQuant算子。