文件最后提交记录最后更新时间
6 个月前
6 个月前
6 个月前
6 个月前
6 个月前
6 个月前
6 个月前
6 个月前
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 可选输入 预留参数 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 = -1 且 axis = -1 的场景。
  • 当 dst_type 为 FP4 类型时,最后一维必须能被 4 整除。
  • FP8 输出类型仅支持 "rint" 舍入模式。

调用说明

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