Pull Request已成功合入, 合并人@CANN-robot
(感谢 sunhao_hw 的贡献)变更摘要
此 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()平台且gradOutput为DT_FLOAT类型时 padding ≥ 7200 的检查,超限时返回 false 并输出告警日志。- 调用处适配:
CheckPaddingValue(padding)调用更新为CheckPaddingValue(padding, gradOutput),使padFlag能根据 padding 大小和数据类型正确决定是否走 AICPU 路径。 - 新增头文件依赖:引入
opdev/platform.h(提供IsRegBase())和op_api/aclnn_check.h,支撑新增的平台判断逻辑。


代码审查
审查总结
已审查文件:
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 |
⛔ 需要修改


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
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)


流水线任务触发成功
任务链接 [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执行结束


流水线任务触发成功
任务链接 [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执行结束


🟠 High Priority
变更后的 CheckPaddingValue(第 148-162 行)仅当 gradOutput->GetDataType() == op::DataType::DT_FLOAT 时检查 padding 阈值(>=7200),将 FP32 路由到 AICPU。但 FP16 和 BF16 输入在执行路径上同样会受影响:
- 在
aclnnReplicationPad1dBackwardGetWorkspaceSize第 235-237 行:当padFlag == true且原始 dtype 为 FP16/BF16 时,gradOutput会被强制 Cast 为 FP32。 - 随后
l0op::PadV3Grad(..., padFlag=true)被调用时,gradOutput已是 FP32。 - 在
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_FLOAT16 和 DT_BF16,使这三种经 AICORE FP32 kernel 执行的 dtype 在大 padding 场景下均能正确路由到 AICPU。


/approve


描述
在paddings参数过大时(目前在910B1上测试为7200),aclnnReplicationPad1dBackward底层的padV3Grad当前不支持,需要切换到AICPU确保功能
关联的Issue
测试
算子泛化自验、蓝区冒烟通过
文档更新
类型标签