Pull Request已成功合入, 合并人@CANN-robot
(感谢 yanzhi2024 的贡献)变更摘要
本 PR 为多个 nn 算子补充 aclnn 测试用例对应的 golden 参考实现:在 activation/sigmoid、index/embedding_dense_grad_v2、index/repeat_interleave、index/scatter_elements_v2、pooling/avg_pool3_d 的 tests/assets/golden.py 中,将 __golden__ 注册表扩展出 "aclnn" 分组,把 aclnn 接口名映射到新增的 golden 函数,并基于 torch 算子实现各函数的期望结果计算逻辑;同时包含少量格式性调整(如 docstring 引号由 """ 改为 '''、import torch 移入函数内部)。
主要改动
-
扩展
__golden__注册表新增"aclnn"分组:在 5 个算子的golden.py中将 aclnn 接口名(如aclnnSigmoid、aclnnEmbeddingDenseBackward、aclnnRepeatInterleaveWithDim、aclnnScatter、aclnnAvgPool3d)映射到新增的aclnn_*_golden函数,与原有"kernel"分组并存。 -
新增 sigmoid 与 repeat_interleave 的 aclnn golden:
aclnn_sigmoid_golden、aclnn_inplace_sigmoid_golden基于torch.sigmoid/torch.nn.functional.sigmoid;repeat_interleave 提供 5 个变体(aclnn_repeat_interleave_golden、aclnn_repeat_interleave_int_golden、aclnn_repeat_interleave_int_with_dim_golden、aclnn_repeat_interleave_tensor_golden、aclnn_repeat_interleave_with_dim_golden),统一调用torch.repeat_interleave,其中repeats、dim从attributes中读取。 -
新增
aclnn_embedding_dense_backward_golden:调用torch.ops.aten.embedding_dense_backward,对 fp16/bf16 输入先提升到 fp32 计算后再回转原 dtype,并将indices统一转换为 int32/int64 后参与计算。 -
新增
aclnn_scatter_golden与aclnn_avg_pool3d_golden:scatter 依据attributes中的reduce(1/2)分别走torch.scatter_reduce的 sum/prod 分支,否则走torch.scatter;avg_pool3d 支持 NCDHW/ND 数据格式,处理kernelSize/stride/padding的展开与补齐,并兼容ceilMode、countIncludePad、divisorOverride等参数语义。 -
统一通过
kwargs的attributes传入算子属性:新增 golden 函数签名按各 aclnnGetWorkspaceSize接口的参数顺序定义(含self/repeats/outputSize/out等),而dim、reduce、kernelSize、stride、padding、ceilMode等属性从attributes字典读取,作为测试期望值的计算依据。


代码审查
我已完成对所有 10 个变更文件的逐一审查。最终结论如下。
审查发现汇总
P0 — index/embedding_dense_grad_v2/tests/assets/golden.py
新增的 aclnn_embedding_dense_backward_golden 整个函数体(第 75–98 行)被缩进 8 个空格,而函数体缩进层级已由第 70 行 docstring 的 4 个空格确立。Python 解析该文件时会直接抛出 IndentationError: unexpected indent,导致整个模块无法 import,连带使原有可用的 kernel golden embedding_dense_grad_v2_golden 一并失效。
P2 — index/repeat_interleave/tests/assets/golden.py 第 113 行
aclnn_repeat_interleave_tensor_golden 中 torch.repeat_interleave(repeats) 缺少必填参数 repeats,必然抛 TypeError;新增的 3 个 aclnnRepeatInterleaveTensor 用例(000012–000014)将全部失败。正确写法应为 torch.repeat_interleave(repeats, repeats)。
P2 — activation/sigmoid/tests/st/arch35/ttk_aclnn_inplace_sigmoid_st.csv 第 4–6 行
新增的 int32/int8/uint8 三个 inplace sigmoid 用例与注册的 golden(torch.sigmoid)不匹配:torch.sigmoid 对整型张量抛 RuntimeError,且 sigmoid 算子本身也无整型语义,用例配置无效,必然失败。
各文件审查确认
| 文件 | 结论 |
|---|---|
| activation/sigmoid/tests/assets/golden.py | 审查完毕,无独立问题(内部 import torch 冗余、selfRef 默认值移除均不构成缺陷) |
| activation/sigmoid/tests/st/arch35/ttk_aclnn_inplace_sigmoid_st.csv | 发现 P2(整型 dtype 用例) |
| index/embedding_dense_grad_v2/tests/assets/golden.py | 发现 P0(IndentationError) |
| index/embedding_dense_grad_v2/tests/st/arch35/ttk_aclnn_embedding_dense_backward_st.csv | no issues(已逐一核对 grad 行数=indices 元素数、embedding 维度、paddingIdx 均在合法区间) |
| index/repeat_interleave/tests/assets/golden.py | 发现 P2(tensor golden 缺参) |
| index/repeat_interleave/tests/st/arch35/ttk_aclnn_repeat_interleave_with_dim_st.csv | no issues(形状/属性一致,但其中 3 行依赖上述损坏的 golden) |
| index/scatter_elements_v2/tests/assets/golden.py | no issues(dim/reduce 从 attributes 读取与 CSV 一致,sum/prod/none 映射与 scatter 语义相符) |
| index/scatter_elements_v2/tests/st/arch35/ttk_aclnn_scatter_st.csv | no issues(末行空行无害) |
| pooling/avg_pool3_d/tests/assets/golden.py | no issues(逐一推演 ND 重塑、bf16 子串匹配、else 分支 padding 数学与输出形状,均与 CSV 一致) |
| pooling/avg_pool3_d/tests/st/arch35/ttk_aclnn_avg_pool3d_st.csv | no issues(输出形状与 kernel/stride/padding 计算一致) |
总体风险判断
共报告 3 个问题(1 个 P0、2 个 P2)。P0 为硬性缺陷:embedding_dense_grad_v2 的 golden.py 因缩进错误无法解析,会直接破坏该算子全部既有与新增测试,必须修复后才能合入。另两处 P2 均为测试资产自身缺陷,会导致本次新增的若干用例必然失败。其余变更(scatter、avg_pool3d 及其 CSV、embedding CSV)经推演未发现明确缺陷。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 3 |
| 🟡 建议 | 1 |
⛔ 需要修改


Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| activation | ✅ 苏跃明, 王星 (2/2) | ✅ 王星 (1/1) |
| index | ✅ 王星, 苏跃明 (2/2) | ✅ 王星 (1/1) |
| pooling | ✅ 王星, 苏跃明 (2/2) | ✅ 王星 (1/1) |
| quant | ✅ 王星, 苏跃明 (2/2) | ✅ 王星 (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
yanzhi2024, thanks for your pull request. All authors of the commits have signed the CLA. 👍


/lgtm
/approve


Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


描述
补充了一批算子的st用例 和 golden。
关联的Issue
https://gitcode.com/cann/ops-nn/issues/5587
测试
st用例均已通过
文档更新
不涉及
类型标签
AI/Agent生成声明