已合并
fix(st): 修正 pad、pad_v3 测试用例 paddings dtype 为 int32 #3690
yefeicoding创建于 7月1日
fix(st): 修正 pad、pad_v3 测试用例 paddings dtype 为 int32 #3690
已合并
yefeicoding创建于 7月1日
yefeicoding
yefeicoding成员
7月1日

描述

关联的Issue

https://gitcode.com/cann/ops-math/issues/1961

测试

文档更新

类型标签

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 yefeicoding 的贡献)
yefeicodingyefeicoding成员
7月1日 创建了 pull request,commit 2de8e5ce
CANN-robotCANN-robot成员
7月1日 添加了label:stat/needs-squash
CANN-robotCANN-robot成员
7月1日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
7月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


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
conversion/circular_pad_grad zhanw_coding, 宋恺 (2/2) zhanw_coding (1/1)
conversion/mirror_pad zhanw_coding, 宋恺 (2/2) zhanw_coding (1/1)
repo-cann/ops-math zhanw_coding, 宋恺 (2/2) zhanw_coding (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

yefeicoding, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
yefeicodingyefeicoding成员
7月1日 update merge request[project id: 7649531, iid: 3690, commit_id: b48466654acb091575511dd2a2e0de4c49117c06] virtual merging success
yefeicodingyefeicoding成员
7月1日 推送  38 个提交:43ba6706-aclnnComplex资料问题修改,7ff81dea-修改math classify rule,862c6cce-算子新增st用例,03202cbb-feat: adapt multinomial with stateless_sample_multinomial,765e3bee-新增 SqrtBackward 生态算子,2aa4208f-aclnnAmpUpdateScale 调用示例代码修改,82bcf5b1-feat: add ascendc spence kernel,d7197c04-fix: FusedMulAddAdd infershape 适配 op_proto,输出取 x1 shape 且不支持动态 shape,dd61e474-bug fix: experimental 构建报错 'multiple definition of `ops::op_impl_register_infershape_ZerosLike` + gen_compile_option.sh awk 重复告警,08a32c0b-RandomUniformIntFusionPass开源开放要求融合Pass需要适配新框架,aacfd8f9-修复950上chunk_cat性能问题,53399235-修改log_add_exp小值域情况下精度误差,ea268310-[fix] fix anglev2 def,8f124891-merge_proto: 合并算子原型时保留REG_OP前的注释,d8d53837-新增stateless_truncated_normal_v2算子对标TF,51383d03-fix: 修复 add_example 头文件 include guard 宏名错误 (#1616),5dd9fd23-fix(padv3): 修复normal_width模板各模式SetFlag/WaitFlag数量不匹配,27a105c0-cleancode fix,07cb7bcd-op_ali_list.md确定性说明缺失修改,e33d1ca1-[fix] anglev2 bf16 use NPU_ARCH macro instead,bfbd5d14-修复div/mod算子int32数据类型在A2/A3下的精度损失,34935467-C++ Clean Code规范修改,46be6fe8-fix: pad_v3_grad_replication、transpose 等算子codecheck问题,a96dbcf5-修复reduce_log_sum 算子资料,4cb1fc0f-【社区任务】AscendC实现Sign算子贡献,67a96a92-aclnnLogAddExp2 950芯片私有数据格式拦截,bea5cd8b-修改Trace UT,5804fe2e-aclnnAddN删除broadcast操作并支持标量tensor,150cbb11-fix(cdist_grad): 修复反向梯度计算产生 NaN,de704825-资料与头文件接口不一致问题修复,20aa181f-fix: transpose codecheck,59ffe362-topkv2算子支持小轴NonTranspose实现,6a4c616f-aclnnLogSpace 精度问题修改,244d5092-simt最小核数校验,dcad8a95-修复bincount算子部分用例场景timeout问题,977bab23-clean code空文件删除,af175630-docs: fix code block language markers to pseudocode in READMEs,7d09d2c8-math仓文档规范性修改
yefeicodingyefeicoding成员
7月1日 update merge request[project id: 7649531, iid: 3690, commit_id: fa234d9e831b331998174c09f668bf935041a888] virtual merging success
yefeicodingyefeicoding成员
7月1日 update merge request[project id: 7649531, iid: 3690, commit_id: 72d93f4e30d75a5fc9661017e29402e9c8d3e0bc] virtual merging success
yefeicodingyefeicoding成员
7月1日 强制推送  42 个提交:4382c1fc-39 commits from branch master16626cff-feat(golden): 剥离 mirror_pad、pad、pad_v3、circular_pad_grad、pad_v3_grad_replication 算子 golden,9153ccef-feat(st): 补齐 pad、pad_v3、mirror_pad arch35 测试用例,41a5482a-fix(st): 修正 pad、pad_v3 测试用例 paddings dtype 为 int32
yefeicodingyefeicoding成员
7月1日 update merge request[project id: 7649531, iid: 3690, commit_id: 18d0c7b06eca7ee1c3657ff7508b7591e0fca756] virtual merging success
yefeicoding
yefeicoding成员
7月1日 评论:

/compile

likedislike
yefeicodingyefeicoding成员
7月1日 update merge request[project id: 7649531, iid: 3690, commit_id: e796f9480f6e46ed10c60732461df5b21230c56d] virtual merging success
yefeicodingyefeicoding成员
7月1日 修改了pull request 的描述
atomgit-bot
atomgit-bot
7月1日 评论:

变更摘要

此 PR 为 padpad_v3circular_pad_gradmirror_padpad_v3_grad_replication 五个算子新增了测试用 golden 参考实现文件,主要目的是在测试用例中将 paddings 参数的 dtype 统一修正为 int64,确保与算子定义一致。每个 golden 文件通过 __golden__ 字典注册算子名到 golden 函数的映射,golden 函数内部将输入的 paddings 显式转换为 np.int64 后再进行运算,并支持多种填充模式(constantreflectsymmetricedgecircular)以及 bfloat16uint8/16/32/64 等特殊数据类型的正确处理。

主要改动

  • 新增 pad golden 测试文件:在 conversion/pad/tests/assets/golden.py 中实现 pad_golden 函数,使用 torch.nn.functional.pad 作为参考实现,并将 paddingsnp.int64 传入 torch 进行前向对齐。

  • 新增 pad_v3 golden 测试文件:在 conversion/pad_v3/tests/assets/golden.py 中实现 pad_v3_golden 函数,支持 constant(含 constant_values)、reflect/symmetric/edge 四种模式,处理 paddings_contiguous 参数和 NC1HWC0 格式的边界情况,且所有模式下都将 paddings 转为 np.int64

  • 新增 circular_pad_grad 反向 golden 测试文件:在 conversion/circular_pad_grad/tests/assets/golden.py 中实现 circular_pad_grad_golden 函数,低维(≤3)情况调用 torch 反向计算,高维情况使用自定义 _numpy_pad_v3_grad_circular 逐元素累加梯度,paddings 统一转为 np.int64

  • 新增 mirror_pad golden 测试文件:在 conversion/mirror_pad/tests/assets/golden.py 中实现 mirror_pad_golden 函数,支持 REFLECTSYMMETRIC 两种模式,处理负 padding(裁剪)场景,通过 _pad_and_slice 辅助函数实现先填充后裁剪的逻辑。

  • 新增 pad_v3_grad_replication 反向 golden 测试文件:在 conversion/pad_v3_grad_replication/tests/assets/golden.py 中实现 pad_v3_grad_replication_golden 函数,通过逐元素索引映射(edge 复制模式)累加输入梯度,paddings 同样转为 np.int64

likedislike
atomgit-bot
atomgit-bot
7月1日 评论:

代码审查

我已逐文件审查完所有 8 个变更文件。以下是我的审查结论:


审查发现

发现 1(P1,confidence 0.95)

fix: golden.squeeze(0) 返回值被丢弃,导致 circular_pad_grad 低维输入(ndim≤3)的 golden 输出 shape 错误

  • 文件conversion/circular_pad_grad/tests/assets/golden.py
  • 位置:第 101 行,位于 _torch_direct_invoke_circular 函数内
  • 问题链
    1. 第 90-91 行通过 unsqueeze(0) 为 tensor 增加了 batch 维度(size=1)
    2. 第 101 行 golden.squeeze(0) 意图移除该 batch 维度
    3. 但 PyTorch 的 Tensor.squeeze(dim) 返回新 tensor,不原地修改(原地版本为 squeeze_(dim)
    4. 返回值被丢弃,golden 仍保持 (1, *y_shape_list) 的 shape
  • 触发条件circular_pad_grad_golden 第 142 行 if grad_output.ndim <= 3 分支走 _torch_direct_invoke_circular 路径时
  • 失败模式:golden 输出多一个 size=1 的维度,与框架预期 output shape 不匹配,测试比较失败
  • 修复:第 101 行改为 golden = golden.squeeze(0)

注:该 bug 同样存在于已有文件 conversion/pad_v3_grad/tests/assets/golden.py 第 164 行(不在本次 diff 范围内),新文件复制了同一错误。


逐文件审查结论

文件 结论
conversion/circular_pad_grad/tests/assets/golden.py 1 个 P1 问题(squeeze 返回值丢弃)
conversion/mirror_pad/tests/assets/golden.py 无问题
conversion/mirror_pad/tests/st/arch35/ttk_kernel_mirror_pad_st.csv 无问题
conversion/pad/tests/assets/golden.py 无问题
conversion/pad/tests/st/arch35/ttk_kernel_pad_st.csv 无问题
conversion/pad_v3/tests/assets/golden.py 无问题
conversion/pad_v3/tests/st/arch35/ttk_kernel_pad_v3_st.csv 无问题
conversion/pad_v3_grad_replication/tests/assets/golden.py 无问题

总体风险评估

  • P0:0 | P1:1 | P2:0 | P3:0
  • 总体风险:中等circular_pad_grad 的 low-dim(ndim≤3)golden 计算路径存在确定性 shape 错误,会导致该算子对应测试用例失败。修复方式明确且安全(一行改动),不影响其他算子。
类型 数量
🔴 阻塞 1
🟡 建议 0

⛔ 需要修改

likedislike
atomgit-bot
atomgit-bot7月1日进行代码检视1
conversion/circular_pad_grad/tests/assets/golden.py
@@ -0,0 +98,4 @@
98+ 
99+ golden = x.grad
100+ 
101+ golden.squeeze(0)
atomgit-bot
atomgit-bot7月1日评论:

🟠 High Priority

变更位置:conversion/circular_pad_grad/tests/assets/golden.py 第 101 行,函数 _torch_direct_invoke_circular 内部。

问题链:

  1. 第 90-91 行:grad_output.unsqueeze(0)x.unsqueeze(0) 为 tensor 增加了 batch 维度(size=1)。
  2. 第 101 行:golden.squeeze(0) 意图移除该 batch 维度,使输出 shape 恢复为 y_shape_list
  3. PyTorch 的 Tensor.squeeze(dim) 返回的是新的 tensor,不会原地修改 —— 原地版本是 squeeze_(dim)
  4. 返回值被丢弃,golden 仍然保持 (1, *y_shape_list) 的 shape。

触发条件:circular_pad_grad_golden 第 142 行 if grad_output.ndim <= 3 分支(低维输入)走 _torch_direct_invoke_circular 路径时。

失败模式:返回的 golden 值多一个 size=1 的维度,与框架预期的 output shape 不匹配,导致测试比较失败。

注:该 bug 模式同样存在于已有文件 conversion/pad_v3_grad/tests/assets/golden.py 第 164 行,该文件不在本次 diff 范围内,但新文件复制了同样的错误。

建议:将 golden.squeeze(0) 改为 golden = golden.squeeze(0),使 squeeze 返回的新 tensor 被正确赋值回 golden 变量。

改动建议
101
- golden.squeeze(0)
101
+ golden = golden.squeeze(0)
应用建议
likedislike
yefeicoding
yefeicoding成员
7月2日 评论:

/compile

likedislike
yefeicodingyefeicoding成员
7月2日 update merge request[project id: 7649531, iid: 3690, commit_id: 7887e2f17eb7e54da9174ce6fdb403a6de78fc87] virtual merging success
CANN-robotCANN-robot成员
7月2日 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
7月2日 评论:

流水线任务触发成功
任务链接 [d28f2f173d9c435f9cd17b4731efa534][流水线指导]

任务名称状态日志下载链接
pre_comment ✅ SUCCESS >>>>>
Compile_Ascend_X86_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_mobile_station_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_experimental_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_X86_A5_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_harmony-infer ✅ SUCCESS >>>>>
Compile_Ascend_ARM_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_experimental_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_single_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_A5_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_910b ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_910c ✅ SUCCESS >>>>> >>>>>
Compile_X86_monitor_950 ✅ SUCCESS >>>>> >>>>>
Compile_harmony-infer-chs-math ✅ SUCCESS >>>>>
Compile_kirin-harmony-infer-chs-math-1 ✅ SUCCESS >>>>>
UT_Test ✅ SUCCESS
UT_Test_experimental ✅ SUCCESS
UT_Test_kernel ✅ SUCCESS
PreSmoke_A900 ✅ SUCCESS >>>>>
API_Check ✅ SUCCESS >>>>>
PreSmoke_ATK_Test_A2 ✅ SUCCESS >>>>>

[2026-07-02 09:39:30]    CI执行结束

likedislike
CANN-robot
CANN-robot成员
7月2日 评论:

流水线任务触发成功
任务链接 [982704e8fcec4ed98064a0181129d08f][流水线指导]

任务名称状态日志下载链接
codecheck ✅ SUCCESS >>>>>
SCA ✅ SUCCESS >>>>>
antipoison ✅ SUCCESS >>>>>
codecheck_Pr ✅ SUCCESS
StaticCheck_codespell_check ✅ SUCCESS
StaticCheck_link_validity_check ✅ SUCCESS
StaticCheck_resource_existence_check ✅ SUCCESS
StaticCheck_tag_closed_check ✅ SUCCESS
StaticCheck_markdownlint ✅ SUCCESS
codecheck_codestyle ⚠️ WARNING >>>>>
codecheck_precommit ⚠️ WARNING >>>>> >>>>>

[2026-07-02 09:28:57]    CI执行结束

likedislike
CANN-robotCANN-robot成员
7月2日 添加了label:api-check-pass
CANN-robotCANN-robot成员
7月2日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
7月2日 添加了label:ci-pipeline-passed
zhanw_coding
zhanw_coding成员
7月2日 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
7月2日 添加了label:approved
songkai111成员
7月2日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
7月2日 添加了label:lgtm
CANN-robotCANN-robot成员
7月2日 解决了最后一个问题
CANN-robotCANN-robot成员
7月2日 合入了pull request