已合并
aclnnReplicationPad1dBackward在大paddings场景路由aicpu配置(9.1.0) #3871
sunhao_hw创建于 7月7日
aclnnReplicationPad1dBackward在大paddings场景路由aicpu配置(9.1.0) #3871
已合并
sunhao_hw创建于 7月7日
sunhao_hw成员
7月7日

描述

在paddings参数过大时(目前在910B1上测试为7200),aclnnReplicationPad1dBackward底层的padV3Grad当前不支持,需要切换到AICPU确保功能

关联的Issue

测试

算子泛化自验、蓝区冒烟通过

文档更新

类型标签

  • Bug修复
  • 新特性
  • 性能优化
  • 文档更新
  • 其他,请描述:
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 sunhao_hw 的贡献)
Ssunhao_hw成员
7月7日 创建了 pull request,commit 1c2fee9f
atomgit-bot
atomgit-bot
7月7日 评论:

变更摘要

此 PR 主要修复 aclnnReplicationPad1dBackward 在 padding 参数过大时底层 padV3Grad 不支持的问题。通过在 CheckPaddingValue 中增加对 fp32 类型 padding 值上限(7200)的检查,当 padding 超过阈值时,将 padFlag 置为 false,使计算路由至 AICPU 执行,确保大 padding 场景下的功能正确性。

主要改动

  • 新增 PADDING_FP32_MAX 常量:在 op_api/aclnn_replication_pad1d_backward.cpp 中新增 static const int64_t PADDING_FP32_MAX = 7200;,定义 fp32 类型下 Atlas A2 平台 padding 值的最大限制。
  • CheckPaddingValue 函数增强:函数签名新增 const aclTensor* gradOutput 参数;在原有 padding≥0 的校验基础上,增加对非 IsRegBase() 平台且 gradOutputDT_FLOAT 类型时 padding ≥ 7200 的检查,超限时返回 false 并输出告警日志。
  • 调用处适配CheckPaddingValue(padding) 调用更新为 CheckPaddingValue(padding, gradOutput),使 padFlag 能根据 padding 大小和数据类型正确决定是否走 AICPU 路径。
  • 新增头文件依赖:引入 opdev/platform.h(提供 IsRegBase())和 op_api/aclnn_check.h,支撑新增的平台判断逻辑。
likedislike
atomgit-bot
atomgit-bot
7月7日 评论:

代码审查

审查总结

已审查文件:

  • conversion/pad_v3_grad_replicate/op_host/op_api/aclnn_replication_pad1d_backward.cpp — 发现 1 个问题

按优先级统计:

  • P0: 0
  • P1: 1 — FP16/BF16 在大 padding 场景下未纳入 AICPU 路由,仍会触发 AICORE 失败
  • P2: 0
  • P3: 0

整体风险评估: 该变更正确地将 FP32 大 padding(≥7200)场景从 AICORE 路由到 AICPU,修复了 issue #2161 报告的核心问题。但修复范围不完整:FP16 和 BF16 输入经 Cast 变为 FP32 后,会走完全相同的 AICORE kernel 路径,却没有被新的 padding 阈值检查覆盖,在相同条件下仍会触发 507035 错误。建议在合入前扩展 dtype 检查范围以覆盖 FP16 和 BF16。

类型 数量
🔴 阻塞 1
🟡 建议 0

⛔ 需要修改

likedislike
CANN-robotCANN-robot成员
7月7日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
7月7日 评论:

CLA Signature Pass

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

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

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
** gcw_kUomxQ2l, 冯彤 (2/2) gcw_kUomxQ2l (1/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)
likedislike
Ssunhao_hw成员
7月7日 关联了issue:[Bug-Report|缺陷反馈]: aclnnReplicationPad1dBackward在padding过大时会507035
CANN-robotCANN-robot成员
7月7日 将zhou-qilong,wangrui_,rxtfeng,loov1,zhangzijie,jia0liang,songkai111,llimwang,gubaocheng,andong_hw,zhanw_coding,gcw_kUomxQ2l,Andy-lb设为评审人
CANN-robotCANN-robot成员
7月7日 将gcw_kUomxQ2l,Andy-lb设为审查人
sunhao_hw成员
7月7日 评论:

compile

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

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

任务名称状态日志下载链接
pre_comment ✅ SUCCESS >>>>>
Compile_harmony-infer ✅ 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 >>>>>
PreSmoke_ATK_Test_A2 ✅ SUCCESS >>>>>

[2026-07-07 16:39:15]    CI执行结束

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

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

任务名称状态日志下载链接
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 ✅ SUCCESS >>>>>
codecheck_precommit ⚠️ WARNING >>>>> >>>>>

[2026-07-07 16:36:06]    CI执行结束

likedislike
CANN-robotCANN-robot成员
7月7日 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
7月7日 添加了label:ci-pipeline-passed
atomgit-bot
atomgit-bot7月7日进行代码检视1
conversion/pad_v3_grad_replicate/op_host/op_api/aclnn_replication_pad1d_backward.cpp
@@ -152,1 +154,4 @@
152154 }
155+ // fp32类型下,AtlasA2 padding最多不超过7200
156+ if (!IsRegBase() && gradOutput->GetDataType() == op::DataType::DT_FLOAT &&
157+ ((*padding)[0] >= PADDING_FP32_MAX || (*padding)[1] >= PADDING_FP32_MAX)) {
atomgit-bot
atomgit-bot7月7日评论:

🟠 High Priority

变更后的 CheckPaddingValue(第 148-162 行)仅当 gradOutput->GetDataType() == op::DataType::DT_FLOAT 时检查 padding 阈值(>=7200),将 FP32 路由到 AICPU。但 FP16 和 BF16 输入在执行路径上同样会受影响:

  1. aclnnReplicationPad1dBackwardGetWorkspaceSize 第 235-237 行:当 padFlag == true 且原始 dtype 为 FP16/BF16 时,gradOutput 会被强制 Cast 为 FP32。
  2. 随后 l0op::PadV3Grad(..., padFlag=true) 被调用时,gradOutput 已是 FP32。
  3. PadV3Grad(padv3grad.cpp 第 283 行)中,IsPadV3GradReplicateAicoreSupport 检查的是 Cast 后的 dtype(FP32),而 FP32 在 REPLICATION_2D_AICORE_DTYPE_SUPPORT_LIST 中,因此会走 AICORE 路径 PadV3GradReplicateAiCore,以 FP32 数据 + 大 padding 执行 → 同样触发 507035 错误。

触发条件:910B1(A2) 平台,FP16 或 BF16 输入,padding[0] 或 padding[1] ≥ 7200。

修复方向:CheckPaddingValue 中应将 FP16 和 BF16 也纳入检查,或检查范围覆盖所有会经 Cast 变为 FP32 后走 AICORE replication 路径的 dtype(即 FP32、FP16、BF16)。

建议:将 dtype 检查从仅 DT_FLOAT 扩展为同时包含 DT_FLOAT16DT_BF16,使这三种经 AICORE FP32 kernel 执行的 dtype 在大 padding 场景下均能正确路由到 AICPU。

likedislike
liulun0308成员
7月8日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
7月8日 添加了label:approved
Ssunhao_hw成员
7月8日 解决了最后一个问题
rxtfeng成员
7月8日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
7月8日 添加了label:lgtm
CANN-robotCANN-robot成员
7月8日 关闭了关联的issue
CANN-robotCANN-robot成员
7月8日 合入了pull request