已合并
fix: WeightQuantPreprocess A16MXF4 支持转置 weight ND 直拷 #5803
fix: WeightQuantPreprocess A16MXF4 支持转置 weight ND 直拷 #5803
已合并
马琦钧创建于 8月31日
马琦钧
马琦钧成员
8月31日

WeightQuantPreprocess A16MXF4 转置 weight ND 直拷支持

概述

配合 ops-math 侧 aclnn 能力(https://gitcode.com/cann/ops-math/pull/5241 ),torch 侧 npu_weight_quant_preprocess 放开 A16 MXFP4(FP4 uint8 紧凑载体,E8M0 scale {K/32, N},kGroupSize=32)转置 weight:转置视图走 ND 直拷透传(outWeight 保持输入 sizes/strides,物理透传),可直接衔接 npu_weight_quant_batchmatmul(wqbmmv2 已支持 MX FP4 ND 转置输入);非转置仍走 NZ_C0_8 转换。接口参数不变。

pergroup(A16F4 per-group)维持不支持转置:judge 仍要求非转置 weight(pergroup FP4 ND 无下游 wqbmmv2 支持)。

主要修改

  1. judge_mm_a16f4_mx 去掉 !is_transpose_certain_two_dims 限制,ctx.is_weight_trans 改为按实际 stride 判定;MX 条目 prepare 从固定 prepare_out_weight_nz_a16w4 改为 prepare_out_weight_a16w4 内部分流(转置 → ND 直拷,非转置 → NZ 转换)
  2. 直拷类 prepare(prepare_out_weight_nd/weight_scale/weight_offset/bias)输出统一别名输入(共享 storage 与 view,aclnn 直拷路径同址无拷贝),移除 check_strides_envelope
  3. prepare_out_weight_a16s4 更名 prepare_out_weight_a16w4(INT4/FP4 共用的转置分流),同步修正注释引用
  4. wqbmmv2 打包维还原:方向判定统一回归 is_transpose_last_two_dims,还原倍率按载体位宽(int32/float 载体 ×8,uint8 载体 ×2);标注 at::kByte 即 uint8
  5. a8w4 judge、is_transpose_certain_two_dims 与主线保持一致,本迭代不涉及
  6. 文档:npu_weight_quant_preprocess 补充 MM_A16F4(pergroup)/MM_MX_A16F4 数据流说明与调用示例,数据类型统一 torch/torch_npu 前缀

验证(Ascend950PR 实测)

  • e2e 精度:MX 转置/非转置两条链路 preprocess → npu_weight_quant_batchmatmul,对 CPU float64 golden 比对均 0/4096 mismatch(max_rel 4.8e-4,fp16 正常舍入),两条链路 NPU 输出逐位一致
  • 行为回归:wqbmmv2 打包维还原新旧逻辑 72 组布局/载体/格式组合枚举比对,可达链路(A16W4/A16W8 全布局、int32/float 载体)零差异
  • ST:新增 test_npu_weight_quant_preprocess_a16mxf4_trans_nd 用例(转置 ND 直拷透传 + format 断言)
  • 文档:5 个调用示例(A8W4×2、A16S4、A16F4、MX_A16F4 转置/非转置)真机全部跑通

关联

likedislike
Pull Request已成功合入, 合并人@ascend-robot
(感谢 马琦钧 的贡献)
马琦钧马琦钧成员
8月31日 创建了 pull request,commit 870b4705
atomgit-bot
atomgit-bot
8月31日 评论:

变更摘要

本 PR 为 npu_weight_quant_preprocess 的 A16F4(FP4,uint8 紧凑载体)路径放开转置 weight 支持:转置视图改为 ND 直拷透传(outWeight 保持输入 sizes/strides,物理透传),非转置仍走 NZ_C0_16 转换,接口参数不变。pergroup(per-group scale [G, N])与 MX(E8M0 scale {K/32, N},kGroupSize=32)两条数据流均支持,MX 转置 ND 输出可直接衔接 npu_weight_quant_batchmatmul(wqbmmv2 MX kernel 支持 ND 转置输入)。

主要改动

  • judge_mm_a16f4_pergroup 放开转置判定:judge_mm_a16f4_nz_pergroup 更名为 judge_mm_a16f4_pergroup,去掉 !is_transpose_certain_two_dims(ctx.weight, 0) 限制,ctx.is_weight_trans 改为按实际 stride(is_transpose_certain_two_dims)判定,转置时走 ND 直拷而非仅 NZ 转换
  • judge_mm_a16f4_mx 同步放开转置:移除 !is_transpose_certain_two_dims 限制,MX 转置 weight 改为 ND 直拷透传,可衔接 wqbmmv2 的 MX FP4 ND 转置输入
  • prepare_out_weight_a16w4 统一转置内部分流:prepare_out_weight_a16s4 更名为 prepare_out_weight_a16w4(INT4/FP4 共用),转置时调用 prepare_out_weight_nd 直拷、非转置时调用 prepare_out_weight_nz_a16w4 做 NZ 转换;MX 数据流条目的 prepare 从 prepare_out_weight_nz_a16w4 切换为该内部分流版本
  • 注释引用同步修正:judge_mm_a16s4_per_channel、judge_mm_a16s4_per_group 及数据流配置表中两处注释里的 prepare_out_weight_a16s4 引用更新为 prepare_out_weight_a16w4
likedislike
不准确?
atomgit-bot
atomgit-bot
8月31日 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
ascend-robotascend-robot成员
8月31日 添加了label:ascend-cla/yes
此处折叠了381条消息 查看更多
AtlasAccount
AtlasAccount成员
14 天前 评论:
流水线 PR-pipeline_op-plugin#3673 [ commitID:023f638f ] 已完成
>>>代码风格自动修复执行成功(无修复内容)
阶段 任务名 状态 详情
编译构建 Build_master_ARM ✅ COMPLETED >>>
Build_v2_7_1_ARM ✅ COMPLETED >>>
Build_v2_9_0_ARM ✅ COMPLETED >>>
Build_v2_10_0_ARM ✅ COMPLETED >>>
Build_v2_11_0_ARM ✅ COMPLETED >>>
Build_v2_12_0_ARM ✅ COMPLETED >>>
Build_master_x86 ✅ COMPLETED >>>
Build_v2_7_1_x86 ✅ COMPLETED >>>
Build_v2_9_0_x86 ✅ COMPLETED >>>
Build_v2_10_0_x86 ✅ COMPLETED >>>
Build_v2_11_0_x86 ✅ COMPLETED >>>
Build_v2_12_0_x86 ✅ COMPLETED >>>
恶意代码检查 Antipoison ✅ COMPLETED >>>
编码安全与规范检查 codecheck_pre-commit ✅ COMPLETED >>>
pre-commit ✅ COMPLETED >>>
开源片段检查 SCA ✅ COMPLETED >>>
Only_doc_commit Only_doc_commit ✅ COMPLETED >>>
开发者测试 UT_master_ARM_01 ✅ COMPLETED >>>
UT_master_ARM_02 ✅ COMPLETED >>>
UT_v2_7_1_ARM ✅ COMPLETED >>>
UT_v2_9_0_ARM ✅ COMPLETED >>>
UT_v2_10_0_ARM ✅ COMPLETED >>>
UT_v2_11_0_ARM ✅ COMPLETED >>>
UT_v2_12_0_ARM ✅ COMPLETED >>>
UT_212_ARM_cpp ✅ COMPLETED >>>
流水线 PR-pipeline_op-plugin ✅ COMPLETED >>>
此流水线已支持下列评论快捷指令,仅PR创建者和白名单成员[wujinyuan1, Hhuangjingwei, Lliangsongwei, Yyashi999, Cculechan, DDring, Wwuyouqi1, LL1919_snow, Qqq_52711437, WW, wss_321]评论有效
  • compile : 运行流水线
  • retry : 重试流水线所有失败子任务
  • retry <任务名> : 仅重试指定失败子任务
  • stop : 停止流水线
likedislike
ascend-robotascend-robot成员
14 天前 关闭了关联的issue
ascend-robotascend-robot成员
14 天前 合入了pull request
ascend-robot
ascend-robot成员
14 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike
ascend-robot
ascend-robot成员
14 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike