已关闭
[Bug-Report|缺陷反馈]: aclnnInplaceQuantScatter/V2 的 reduction 不校验也不透传(硬编码update),axis/quantAxis 同样未校验 #6625
liuhanwen8创建于  23 天前关闭于  4 天前
liuhanwen8
liuhanwen8
23 天前 创建

Describe the current behavior / 问题描述

aclnnInplaceQuantScatter(及 V2)的 reduction 入参在 GetWorkspaceSize 内既不校验也不透传 l0op:l0op 调用使用硬编码 const std::string reduce = "update";。

index/quant_update_scatter/op_api/aclnn_quant_scatter.cpp:

  • :152-156 签名含 int64_t reduction;
  • :159 仅出现在 DFX_IN;
  • :199 const std::string reduce = "update";;
  • :202-204 l0op::QuantUpdateScatter(..., reduce, ...) 传硬编码值,用户传入的 reduction 从未被使用。

V2 同构:aclnn_quant_scatter_v2.cpp:177-181 / :185 / :225 / :228-230;且同文件的 roundMode 经 CheckRoundMode(:172)严格校验——同文件内两属性校验待遇不一致,佐证是遗漏而非设计。

文档 docs/aclnnInplaceQuantScatter.md 规定:reduction 取值支持 1(update)、axis 只支持 -2、quantAxis 取值支持 -1 或 len(updates.shape)-1。

Environment Information / 环境信息

  • 昇腾硬件型号:Atlas 800T A2(910B2)
  • CANN 版本:9.2.0-beta.2
  • Python 版本:3.10

Steps to reproduce the issue / 重现步骤

按文档示例构造:selfRef [1,1,32] INT8(预填 5)、indices [1] INT32(值 0)、updates [1,1,32] FP16(全 1.0)、quantScales [1,1,32] FLOAT(全 0.5)、quantZeroPoints [1,1,32] INT32(全 0);量化后 updates = round(1.0/0.5)+0 = 2,故 update 语义下 selfRef 首元素应变为 2(若按 add 语义则为 7)。

  1. 调用 aclnnInplaceQuantScatterGetWorkspaceSize(...);
  2. 执行 aclnnInplaceQuantScatter;
  3. 分别传 reduction=1(文档值)与 reduction=0/2/-1,以及 axis=0、quantAxis=0。

Describe the expected behavior / 预期结果

reduction 非 1(或 axis 非 -2、quantAxis 非 -1/rank-1)应返回 ACLNN_ERR_PARAM_INVALID(161002)。若设计上仅支持 update,也不应在签名暴露该入参并在文档声明取值。

910B2 + CANN 9.2.0-beta.2 实测:

用例 GetWorkspaceSize 执行段 selfRef 结果
对照 reduction=1, axis=-2, quantAxis=-1 0 0 首元素变为 2(update 语义确认)
reduction=0 0(静默放行) 0 首元素 2 —— 行为与 reduction=1 完全相同
reduction=2 0(静默放行) 0 同上
reduction=-1 0(静默放行) 0 同上
axis=0(文档仅 -2) 0(静默放行) 561103 未更新(执行段才失败)
quantAxis=0(文档仅 -1/rank-1) 0(静默放行) 561103 未更新(执行段才失败)

即:reduction 非法值静默成功且恒按 update 执行;axis/quantAxis 非法值第一段也放行,延迟到执行段才报错。

Special notes for this issue/备注

  1. 修复建议:在 CheckParams 中补 CHECK_RET(reduction == 1, ACLNN_ERR_PARAM_INVALID)(建议同时补 axis == -2、quantAxis ∈ {-1, rank-1}),并将校验后的值映射为字符串透传 l0op,使「声明—校验—透传」一致;
  2. 关联本仓 #6339(另一算子 sigmoid_cross_entropy_with_logits_v2 的 reduction 未注册);reduction 必校验并透传 在本仓 mse_loss / l1_loss / binary_cross_entropy_with_logits_target_backward 中已实现,本文件属遗漏;
  3. 提报来源:aclnn 接口Bug日报_20261009 卡片 ACLNN-20261009-01;本 issue 在原卡片基础上补充了 axis/quantAxis 同样未校验的实测证据。
likedislike
liuhanwen8liuhanwen8
23 天前 添加了label:bug-report
yuning_chen
yuning_chen成员
23 天前 评论:

初步分析

感谢反馈,我们已开始核对这个问题。

现象理解:aclnnInplaceQuantScatter 及其 V2 的 reduction、axis、quantAxis 可能没有校验,也没有传给下层,归约方式被写成固定的 update。
当前判断:初步判断,待复现确认。传入其他 reduction 仍按 update 执行的可能性存在,需对照当前实现核实。
涉及范围:aclnnInplaceQuantScatter 和 V2 的属性传递。
下一步:我们会核对这几个入参是否被使用,评估补上校验和透传。

likedislike
yuning_chenyuning_chen成员
23 天前 将 bartonfang 设为负责人
yuning_chen
yuning_chen成员
23 天前 评论:

您好,问题已收到,当前 @bartonfang 正在处理中。

likedislike
huang-jz成员
10 天前 评论:

/assign

likedislike
CANN-robotCANN-robot成员
10 天前 将 huang-jz 设为负责人
BartonFangBartonFang成员
10 天前 移除了负责人 bartonfang
Hhuang-jz成员
7 天前 关联了pull request:fix: 为QuantScatter及V2不支持属性增加兼容性warning
CANN-robotCANN-robot成员
4 天前 关闭了 issue
CANN-robotCANN-robot成员
4 天前 添加了label:resolved