已关闭
[Documentation|文档反馈]: GroupNormSiluQuant/GroupNormSilu 输出非连续标记与空Tensor范围有误,scatter 四算子 aclnn 资料缺 varRef 首维约束 #5270
TangPC创建于  9 天前关闭于  8 天前
TangPC
TangPC成员
9 天前 创建

Document Link(文档链接)

Issues Section(问题文档片段)

片段一 —— aclnnGroupNormSiluQuant.md / group_norm_silu_quant/README.md / aclnnGroupNormSilu.md 输出参数表的「非连续Tensor」列:

参数 aclnnGroupNormSiluQuant.md group_norm_silu_quant/README.md aclnnGroupNormSilu.md
out - x x
meanOut - x x
rstdOut - x x

片段二 —— aclnnGroupNormSiluQuant.mdgroup_norm_silu_quant/README.md 中 self 的约束列:

支持空Tensor(任意维度为0)。此时out为空,meanOut填充为0,rstdOut填充为NAN。

片段三 —— aclnnScatterMin.md / aclnnScatterMax.md / aclnnScatterMul.md / aclnnScatterDiv.md 的「约束说明」节(以 ScatterMin 为例),仅有两条,无首维上限:

  • varRef与updates的数据类型需一致。
  • 需满足shape约束:updates.shape = indices.shape + varRef.shape[1:]。

Existing Issues(存在的问题)

问题一:输出 Tensor 的非连续标记与实现不符(片段一)

三篇资料把 out / meanOut / rstdOut 标成不支持或未标注,但实现是支持的:aclnnGroupNormSiluQuantaclnnGroupNormSilu 的 op_api 中,每个输出均经 l0op::ViewCopy 写回,空 Tensor 分支的 FillScalar 同样经 ViewCopy。

Ascend 950PR 真机实测(CANN 9.2.0 发布包内置 kernel):构造末维 stride=2 的非连续输出,两个接口的结果均与全连续基线逐元素一致,且 storage 空隙中预置的哨兵值未被改写,确认是按 stride 散射写入而非连续覆盖。

三处应统一改为

问题二:空 Tensor 支持范围声明过宽(片段二)

原文「任意维度为0」范围写宽。实现自首版 5d36b373b 起,CheckAttr 即拒收 N(第 0 维)或 C(第 1 维)为 0 的输入并返回 161002。

真机逐轴实测:N=0、C=0 被拒收(161002);H=0、W=0 通过,且 meanOut 填 0、rstdOut 填 NAN,与原描述一致。

应收窄为「N 与 C 需大于 0,其余维度可为 0」,填充行为的描述保持不变。

问题三:scatter 四算子的 aclnn 资料缺少 varRef 首维上限约束(片段三)

ScatterMin / ScatterMax / ScatterMul / ScatterDiv 共用 scatter_reduce_common tiling,其中 varFirstDim > INT32_MAX 即拒收——并行归并排序以 INT32_MAX 作为补齐哨兵,首维再大将使合法索引与哨兵不可区分。

该约束已在四个算子的 README「约束说明」中声明(2e6678836,与实现同笔提交),但四篇 aclnn 资料的「约束说明」节遗漏,使用者只看 aclnn 资料无法得知该上限。四篇均应补入「varRef的首维大小不超过INT32_MAX。」。


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

likedislike
TangPCTangPC成员
9 天前 添加了label:documentation
Cchenqi317成员
9 天前 将 pingchuantang 设为负责人
CANN-robotCANN-robot成员
8 天前 关闭了 issue
CANN-robotCANN-robot成员
8 天前 添加了label:resolved