Closed
[Requirement|需求建议]: WeightQuantPreprocess A16MXF4 支持转置 weight ND 直拷 #3197
马琦钧Add on Sep 16Closed at Sep 17
liuchenghao
Sep 16 Comments:
Sep 16 Comments:
【Multica 同步】状态:backlog;说明:本需求已同步至 Multica「CANN 算子开发迁移」项目承接开发(待认领排期),完成后将以 PR 形式回馈社区;详情:AI4ME-237


Sep 17 Modify description of issue
Sep 17 Close issue
Sep 17 Added label: resolved
Sep 17 Associated pull request
Sep 22 Assign maqijun as responsible person
Thanks for sending an requirement! Please fill in the following template to help quickly solve your problem.
一、背景信息 (必填)
weight_quant_preprocess 算子 A16MXF4 数据流(FP4 uint8 紧凑载体,E8M0 scale
{K/32, N},kGroupSize 固定 32)此前仅支持非转置 weight(ND→NZ_C0_16 分形转换),转置 weight 直接返回 ACLNN_ERR_PARAM_INVALID。下游 wqbmmv2 MX kernel 主干已支持 MX FP4 ND 转置输入,preprocess 需配套支持转置 weight 的 ND 直拷透传,打通 MX FP4 转置链路。本需求同时包含 conversion/weight_quant_preprocess 目录 ErrMsg reason 字符串结尾多余句号的集中整改(原 cann/ops-math!5126,已关闭并入)。
二、价值/作用 (必填)
支撑 A16 MXFP4 量化推理场景下转置 weight 的预处理:preprocess 输出 ND 物理透传,可直接衔接 wqbmmv2 MX kernel,端到端打通 torch_npu.npu_weight_quant_batchmatmul 的 MX FP4 转置路径,避免业务侧手工做 ND 直拷。
三、设计方案 (必填)
IsMMA16MXF4DataFlowjudge 拆分为 base + 转置/非转置:转置 weight(末两维严格转置 stride[1,K],打包维沿 K 须 K 为偶数)命中新条目走 ND 直拷(ProcessWeightDirectCopy,按打包维建 UINT8 视图物理透传);非转置维持原 NZ_C0_16 分形转换条目CheckOutSameBase(空指针对称 + out 非 empty + viewShape 一致)与CheckOutSameAsInput(Base + 连续性 + format/dtype/storageShape 全 ==)两层;scale/offset/bias 直拷透传参数的输入侧校验删除,约束下放 wqbmmv2CheckOutWeightDtypeSame(真实场景 NZ 出 dtype 恒等于输入);保留CheckWeightOffsetOptionalNull(无 offset 直拷 process,非空 offset 会被静默丢弃)3.1 使能方式(涉及哪些框架:如Aclnn直调、Pytorch训练等)
Aclnn 直调 / PyTorch(torch_npu,配套 Ascend/op-plugin!5803、cann/ops-nn!10133)
3.2 总体设计
3.2.1 算子支持的数据类型
weight:float4_e2m1(uint8 紧凑载体);weightScale:float8_e8m0(uint8 承载);x/y:float16、bfloat16
3.2.2 host侧设计
aclnn 注册表(judge + checks + processes)新增 A16MXFP4 转置 ND 直拷条目,无 infer/tiling 变更
3.2.3 kernel侧设计
无 kernel 变更(host 侧视图转换 + 直拷透传)
3.3 支持硬件
ascend950(DAV_3510)
3.4 算子约束限制
[1,K]),打包维沿 K 须 K 为偶数对应 PR:https://gitcode.com/cann/ops-math/pull/5241