已关闭
[Bug-Report|缺陷反馈]: QuantMatmul NZ 空输出、A4W4I 调度及 InplaceAdd yRef 文档标记 #5950
ddssz创建于  19 天前关闭于  18 天前
ddssz
ddssz成员
19 天前 创建

Describe the current behavior / 问题描述 (Mandatory / 必填)

源码检查发现以下问题:

  1. DAV_3510 全量化路径中,aclnnQuantMatmulGetWorkspaceSizeCommonProcess 对 NZ 格式只允许 m=0 的空输出,n=0 时仍会进入后续校验,导致合法空输出被拒绝。该公共路径涉及 aclnnQuantMatmulV3、aclnnQuantMatmulV4 和 aclnnQuantMatmulWeightNz。
  2. arch35 A4W4I 的 AIV 预处理后存在 SyncAll<false>,ASW PostTiling 仅设置 BlockDim,未为该路径配置批调度。Cube BasicAPI/Mix 的 IsCapable 还会将内部 INT4 类型改为 INT8,因此不能使用转换后的内部类型判断是否需要批调度。这是源码分析发现的同步调度风险,尚未在 NPU 上复现死锁。
  3. aclnnQuantBatchMatmulInplaceAdd 的参数表将 yRef 标记为支持非连续 Tensor,但原实现直接把 yRef 交给 l0 算子。本次将该栏改为 -,保持原有处理逻辑。

Environment Information / 环境信息 (Mandatory / 必填)

  • 分析基线:cann/ops-nn master,提交 2c446e74cf94a4448c5e5612d2f94cec971ac27f。
  • 涉及架构:DAV_3510 / arch35。
  • 本地分析环境:Windows、Python 3.13;缺少完整 CANN/opbase 依赖和 NPU 运行环境。
  • 证据类型:代码审查、参数化回归用例及本地静态检查;不包含实机死锁日志。

Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)

以下为待在完整 CANN 环境执行的回归步骤,以及可直接核对的源码位置:

  1. 在 DAV_3510 场景下调用 WeightNz,设置 INT8 x1 的 shape 为 [4, 32],INT8 NZ x2 的逻辑 shape 为 [32, 0]、storage shape 为 [0, 2, 16, 32],x2Scale shape 为 [1]、类型 UINT64,输出为 BF16 [4, 0],transposeX1/transposeX2 均为 false。检查 GetWorkspaceSize 是否返回成功和 workspace=0。对应新增用例:QuantBatchMatmulWeightNzEmptyTensor.ZeroNReturnsEmptyOutputWithoutWorkspace;V3/V4 也补充了同类用例。
  2. 检查 adaptive_sliding_window_cube_basic_api_tiling.cpp 和 adaptive_sliding_window_tiling.cpp 中的 IsCapable / PostTiling:原始输入均为 INT4 且 supportMmadS8S4=false 时,内部类型会转换为 INT8,但 A4W4I 预处理仍需要跨核同步。检查该路径是否配置 SetScheduleMode(1)。
  3. 对照 InplaceAdd 接口文档的 yRef 行与 aclnn_quant_batch_matmul_inplace_add.cpp 的 l0 调用,核对非连续支持声明与原实现是否一致。

Describe the expected behavior / 预期结果 (Mandatory / 必填)

  • DAV_3510 全量化 NZ 场景的 m=0 或 n=0 正常返回空 Tensor,workspace 为 0;公共接口和伪量化路径保持原有语义。
  • 需要 AIV 预处理及跨核同步的 A4W4I 路径根据原始输入类型正确设置批调度,设置失败时返回 tiling 失败。
  • InplaceAdd 参数表中 yRef 的非连续 Tensor 栏标为 -,不额外增加连续性限制。
  • git diff --check upstream/master...backup:通过。
  • 回退 InplaceAdd 实现并修正文档的提交:pre-commit 检查通过,包括 clang-format 和 OAT。
  • InplaceAdd 代码、UT、ST 相对 upstream/master 的差异:为空。
  • 完整 CANN UT、NPU ST:未执行;没有实机执行日志或死锁复现截图。

Special notes for this issue/备注 (Optional / 选填)

修复范围为 NZ 空输出处理、A4W4I 批调度和相关接口资料。InplaceAdd 仅修正文档标记。

关联 PR:https://gitcode.com/cann/ops-nn/merge_requests/10659

likedislike
ddsszddssz成员
19 天前 添加了label:bug-report
ddsszddssz成员
19 天前 关联了pull request:fix(matmul): 修复 NZ 空输出和 A4W4I 调度,纠正 yRef 约束
ddsszddssz成员
19 天前 修改了issue 的描述
yuning_chenyuning_chen成员
19 天前 将 smdbha 设为负责人
ddsszddssz成员
19 天前 修改标题为 “[Bug-Report|缺陷反馈]: QuantMatmul NZ 空输出、A4W4I 调度及 InplaceAdd yRef 文档标记”,原标题为“[Bug-Report|缺陷反馈]: QuantMatmul NZ 空输出、A4W4I 调度及 InplaceAdd yRef 约束问题”
ddsszddssz成员
19 天前 修改了issue 的描述
CANN-robotCANN-robot成员
18 天前 关闭了 issue
CANN-robotCANN-robot成员
18 天前 添加了label:resolved