片段一 —— aclnnGroupNormSiluQuant.md / group_norm_silu_quant/README.md / aclnnGroupNormSilu.md 输出参数表的「非连续Tensor」列:
aclnnGroupNormSiluQuant.md
group_norm_silu_quant/README.md
aclnnGroupNormSilu.md
-
x
片段二 —— aclnnGroupNormSiluQuant.md 与 group_norm_silu_quant/README.md 中 self 的约束列:
支持空Tensor(任意维度为0)。此时out为空,meanOut填充为0,rstdOut填充为NAN。
片段三 —— aclnnScatterMin.md / aclnnScatterMax.md / aclnnScatterMul.md / aclnnScatterDiv.md 的「约束说明」节(以 ScatterMin 为例),仅有两条,无首维上限:
aclnnScatterMin.md
aclnnScatterMax.md
aclnnScatterMul.md
aclnnScatterDiv.md
varRef与updates的数据类型需一致。 需满足shape约束:updates.shape = indices.shape + varRef.shape[1:]。
问题一:输出 Tensor 的非连续标记与实现不符(片段一)
三篇资料把 out / meanOut / rstdOut 标成不支持或未标注,但实现是支持的:aclnnGroupNormSiluQuant 与 aclnnGroupNormSilu 的 op_api 中,每个输出均经 l0op::ViewCopy 写回,空 Tensor 分支的 FillScalar 同样经 ViewCopy。
aclnnGroupNormSiluQuant
aclnnGroupNormSilu
l0op::ViewCopy
Ascend 950PR 真机实测(CANN 9.2.0 发布包内置 kernel):构造末维 stride=2 的非连续输出,两个接口的结果均与全连续基线逐元素一致,且 storage 空隙中预置的哨兵值未被改写,确认是按 stride 散射写入而非连续覆盖。
三处应统一改为 √。
√
问题二:空 Tensor 支持范围声明过宽(片段二)
原文「任意维度为0」范围写宽。实现自首版 5d36b373b 起,CheckAttr 即拒收 N(第 0 维)或 C(第 1 维)为 0 的输入并返回 161002。
5d36b373b
CheckAttr
真机逐轴实测: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 作为补齐哨兵,首维再大将使合法索引与哨兵不可区分。
scatter_reduce_common
varFirstDim > INT32_MAX
该约束已在四个算子的 README「约束说明」中声明(2e6678836,与实现同笔提交),但四篇 aclnn 资料的「约束说明」节遗漏,使用者只看 aclnn 资料无法得知该上限。四篇均应补入「varRef的首维大小不超过INT32_MAX。」。
2e6678836
关联 PR:https://gitcode.com/cann/ops-nn/merge_requests/9399
Document Link(文档链接)
Issues Section(问题文档片段)
片段一 ——
aclnnGroupNormSiluQuant.md/group_norm_silu_quant/README.md/aclnnGroupNormSilu.md输出参数表的「非连续Tensor」列:-xx-xx-xx片段二 ——
aclnnGroupNormSiluQuant.md与group_norm_silu_quant/README.md中 self 的约束列:片段三 ——
aclnnScatterMin.md/aclnnScatterMax.md/aclnnScatterMul.md/aclnnScatterDiv.md的「约束说明」节(以 ScatterMin 为例),仅有两条,无首维上限:Existing Issues(存在的问题)
问题一:输出 Tensor 的非连续标记与实现不符(片段一)
三篇资料把 out / meanOut / rstdOut 标成不支持或未标注,但实现是支持的:
aclnnGroupNormSiluQuant与aclnnGroupNormSilu的 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_commontiling,其中varFirstDim > INT32_MAX即拒收——并行归并排序以 INT32_MAX 作为补齐哨兵,首维再大将使合法索引与哨兵不可区分。该约束已在四个算子的 README「约束说明」中声明(
2e6678836,与实现同笔提交),但四篇 aclnn 资料的「约束说明」节遗漏,使用者只看 aclnn 资料无法得知该上限。四篇均应补入「varRef的首维大小不超过INT32_MAX。」。关联 PR:https://gitcode.com/cann/ops-nn/merge_requests/9399