已合并
feat:nn add aclnn testcase and golden again. #9634
yanzhi2024创建于 29 天前
feat:nn add aclnn testcase and golden again. #9634
已合并
yanzhi2024创建于 29 天前
yanzhi2024成员
29 天前

描述

补充了一批算子的st用例 和 golden。

关联的Issue

https://gitcode.com/cann/ops-nn/issues/5587

测试

st用例均已通过

文档更新

不涉及

类型标签

AI/Agent生成声明

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 yanzhi2024 的贡献)
Yyanzhi2024成员
29 天前 创建了 pull request,commit 333f4043
atomgit-bot
atomgit-bot
29 天前 评论:

变更摘要

本 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 函数签名按各 aclnn GetWorkspaceSize 接口的参数顺序定义(含 self/repeats/outputSize/out 等),而 dim、reduce、kernelSize、stride、padding、ceilMode 等属性从 attributes 字典读取,作为测试期望值的计算依据。

likedislike
不准确?
atomgit-bot
atomgit-bot
29 天前 评论:

代码审查

我已完成对所有 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

⛔ 需要修改

likedislike
不准确?
CANN-robotCANN-robot成员
29 天前 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
29 天前 评论:

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 /approve or /lgtm
  • Commenting /approve implies 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. 👍

likedislike
此处折叠了135条消息 查看更多
wang-xing001成员
23 天前 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
23 天前 添加了label:lgtmapproved
CANN-robotCANN-robot成员
23 天前 关闭了关联的issue
CANN-robotCANN-robot成员
23 天前 合入了pull request
CANN-robot
CANN-robot成员
23 天前 评论:

Pull Request 已合并或已关闭。

If you want to solve this problem, you can click here to do it in the FAQs.

likedislike