CANN/ops-nn分组量化SwiGLU激活算子 SwigluGroupQuant【免费下载链接】ops-nn本项目是CANN提供的神经网络类计算算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-nn产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品×Atlas A2 训练系列产品/Atlas A2 推理系列产品×Atlas 200I/500 A2 推理产品×Atlas 推理系列产品×Atlas 训练系列产品×功能说明算子功能融合实现SwiGLU激活和分组低比特量化支持FP8和FP4输出。输入x的最后一维被均分为A和B先计算silu(A) * B再执行量化。计算公式$$ y_{tmp}silu(A) \times B $$当传入clamp_limit时$$ Amin(A, clamp_limit) $$$$ Bmin(max(B, -clamp_limit), clamp_limit) $$当传入weight时量化前执行$$ y_{tmp}y_{tmp} \times weight $$进行量化$$ scalerow_max(abs(y_{tmp}))/dstTypeScale $$$$ y Cast(Mul(y_{tmp}, 1/scale)) $$quant_mode为0时输出FP8类型的y和FLOAT32类型的y_scalequant_mode为1时输出FP8/FP4类型的y和FLOAT8_E8M0类型的y_scalequant_mode为2、3时输出HIFP8类型的y和FLOAT32类型的y_scale。参数说明参数名输入/输出/属性描述数据类型数据格式x输入输入张量shape为[...,D]最后一维D按左右两半做SwiGLU。FLOAT、FLOAT16、BFLOAT16NDweight可选输入量化前按token乘到SwiGLU输出上的权重。FLOAT32NDgroup_index可选输入count模式的group token数。INT64NDscale可选输入静态量化输入的scale张量。仅quant_mode2时使用quant_mode3时不使用。FLOAT32NDdst_type属性目标量化类型27HIFLOAT835FLOAT8_E5M236FLOAT8_E4M3FN40FLOAT4_E2M141FLOAT4_E1M2。INT64-quant_mode属性量化模式。0表示Block FP81表示MX2表示HIFP8静态量化3表示HIFP8动态量化。INT64-block_size属性量化块大小。0表示使用默认值Block FP8支持128MX支持32quant_mode2或3时不生效。INT64-round_scale属性是否将scale取整为2的幂。MX模式必须为truequant_mode2或3时不生效。BOOL-clamp_limit属性SwiGLU计算前的clamp阈值。默认不启用clamp。FLOAT-dst_type_max属性目标量化类型的最大有限值。quant_mode2或3时用于计算scale amax / dst_type_max默认值为15.0。FLOAT-output_origin属性是否输出量化前的SwiGLU结果。MX FP4模式下该输出仅作占位。BOOL-y输出量化输出。FP8 shape为[...,D/2]FP4每字节打包2个4-bit值shape为[...,D/4]HIFP8 shape为[...,D/2]。HIFLOAT8、FLOAT8_E4M3FN、FLOAT8_E5M2、FLOAT4_E2M1、FLOAT4_E1M2NDy_scale输出量化scale。Block FP8输出FLOAT32shape为[...,ceil((D/2)/128)]MX输出FLOAT8_E8M0shape为[...,ceil(ceil((D/2)/32)/2),2]HIFP8输出FLOAT32无group_index时shape为[1]有group_index时shape为[G]。FLOAT32、FLOAT8_E8M0NDy_origin输出量化前的SwiGLU结果shape为[...,D/2]。与x相同ND约束说明输入x的rank必须大于0最后一维D必须大于等于256且能被256整除。dst_type支持HIFLOAT8、FLOAT8_E4M3FN、FLOAT8_E5M2、FLOAT4_E2M1、FLOAT4_E1M2。quant_mode0时仅支持FP8输出block_size支持0或128。quant_mode1时支持FP8/FP4输出block_size支持0或32round_scale必须为true。quant_mode2时支持HIFP8静态量化输出dst_type、block_size和round_scale不生效。quant_mode3时支持HIFP8动态量化输出dst_type、block_size和round_scale不生效。dst_type为FLOAT4_E2M1或FLOAT4_E1M2时必须使用quant_mode1。dst_type为HIFLOAT8时必须使用quant_mode2或3。y_scale的数据类型必须与quant_mode匹配Block FP8为FLOAT32MX为FLOAT8_E8M0HIFP8为FLOAT32。quant_mode2或3时group_index可用于MoE场景的分组量化y_scale的shape为[G]G为group数量。clamp_limit不启用时使用默认占位值-1.0启用时必须大于0。调用说明调用方式调用样例说明aclnn调用test_aclnn_swiglu_group_quant通过aclnnSwigluGroupQuant接口调用SwigluGroupQuant算子。图模式调用-通过算子IR构图方式调用SwigluGroupQuant算子。【免费下载链接】ops-nn本项目是CANN提供的神经网络类计算算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-nn创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考