CANN/cann-bench反量化SwiGLU量化算子

发布时间:2026/7/15 20:43:35

CANN/cann-bench反量化SwiGLU量化算子 DequantSwigluQuant 算子 API 描述【免费下载链接】cann-bench评测AI在处理CANN领域代码任务的能力涵盖算子生成、算子优化等领域支撑模型选型、训练效果评估统一量化评估标准识别Agent能力短板构建CANN领域评测平台推动AI能力在CANN领域的持续演进。项目地址: https://gitcode.com/cann/cann-bench1. 算子简介反量化、SwiGLU和量化的融合。主要应用场景大语言模型推理中 FFN 层的量化加速低精度推理流水线中 SwiGLU 激活函数的融合计算INT8 量化模型中的反量化-激活-重量化一体化操作算子特征难度等级L3FusedComposite单输入单输出融合反量化、SwiGLU 激活和量化三个操作输入最后一维 H 必须为偶数SwiGLU 将其等分为两半2. 算子定义数学公式$$ y \text{quantize}(\text{SwiGLU}(\text{dequantize}(x))) $$具体步骤反量化将 int32 输入转换为浮点数SwiGLU 激活将最后一维等分为两半当 activate_leftFalse 时 $y \text{SiLU}(x_{left}) \times x_{right}$当 activate_leftTrue 时 $y x_{left} \times \text{SiLU}(x_{right})$量化将结果量化为 INT83. 接口规范算子原型cann_bench.dequant_swiglu_quant(Tensor x, bool activate_left, str quant_mode, int dst_type) - Tensor y输入参数说明参数类型默认值描述xTensor必选输入张量任意维度最后一维 H 必须为偶数activate_leftboolFalse是否激活左侧quant_modestrstatic量化模式dst_typeint0目标数据类型 (0:DT_INT8)输出参数Shapedtype描述y除最后一维减半外与输入相同int8输出张量数据类型输入 dtype输出 dtypefloat16int8bfloat16int8int32int8规则与约束输入张量的最后一维 H 必须为偶数SwiGLU 将其等分为两半分别处理activate_left 控制 SwiGLU 的激活方向False 时对左半部分应用 SiLUTrue 时对右半部分应用 SiLUquant_mode 指定量化模式默认 staticdst_type 取值0 表示 DT_INT8当输入为 int32 类型时先以 scale0.1 进行反量化转浮点4. 精度要求采用生态算子精度标准进行验证。误差指标平均相对误差MERE采样点中相对误差平均值$$ \text{MERE} \text{avg}(\frac{\text{abs}(actual - golden)}{\text{abs}(golden)\text{1e-7}}) $$最大相对误差MARE采样点中相对误差最大值$$ \text{MARE} \max(\frac{\text{abs}(actual - golden)}{\text{abs}(golden)\text{1e-7}}) $$通过标准数据类型FLOAT16BFLOAT16FLOAT32HiFLOAT32FLOAT8 E4M3FLOAT8 E5M2通过阈值(Threshold)2^-102^-72^-132^-112^-32^-2当平均相对误差 MERE Threshold最大相对误差 MARE 10 * Threshold 时判定为通过。5. 标准 Golden 代码import torch DequantSwigluQuant算子Torch Golden参考实现 反量化、SwiGLU和量化的融合 公式: y quantize(SwiGLU(dequantize(x))) def dequant_swiglu_quant( x: torch.Tensor, activate_left: bool False, quant_mode: str static, dst_type: int 0 ) - torch.Tensor: 反量化、SwiGLU和量化的融合 公式: y quantize(SwiGLU(dequantize(x))) Args: x: 输入张量 activate_left: 是否激活左侧 quant_mode: 量化模式 dst_type: 目标数据类型 (0:DT_INT8) Returns: 输出张量 def swiglu(x, activate_leftFalse): # 截断到偶数维以支持非对齐输入 last_dim x.shape[-1] - (x.shape[-1] % 2) x x[..., :last_dim] half x.shape[-1] // 2 if activate_left: x_left x[..., :half] x_right x[..., half:] return x_left * torch.nn.functional.silu(x_right) else: x_left x[..., :half] x_right x[..., half:] return torch.nn.functional.silu(x_left) * x_right if x.dtype torch.int32: scale 0.1 x_float x.float() * scale else: x_float x result swiglu(x_float, activate_left) # INT8 量化 max_val result.abs().max() if max_val 0: # 处理全零情况避免 scaleinf y torch.zeros_like(result, dtypetorch.int8) else: scale (127.0 / max_val).to(torch.float32) y torch.clamp((result.float() * scale.item()).round(), -128, 127).to(torch.int8) return y6. 额外信息算子调用示例import torch import cann_bench x torch.randn(2, 4096, dtypetorch.float16, devicenpu) y cann_bench.dequant_swiglu_quant(x, activate_leftFalse, quant_modestatic, dst_type0) # INT8 量化 x_int32 torch.randint(-128, 127, (2, 4096), dtypetorch.int32, devicenpu) y cann_bench.dequant_swiglu_quant(x_int32, activate_leftTrue, quant_modestatic, dst_type0) # 反量化后 SwiGLU 再量化【免费下载链接】cann-bench评测AI在处理CANN领域代码任务的能力涵盖算子生成、算子优化等领域支撑模型选型、训练效果评估统一量化评估标准识别Agent能力短板构建CANN领域评测平台推动AI能力在CANN领域的持续演进。项目地址: https://gitcode.com/cann/cann-bench创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻