Pull Request已成功合入, 合并人@ascend-robot
(感谢 zzhongmin 的贡献)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 |
|---|---|---|
| repo-Ascend/pytorch | ✅ ffmh, liangsongwei (2/2) | ✅ liangsongwei (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
zzhongmin, thanks for your pull request. All authors of the commits have signed the CLA. 👍


当前仓库存在以下 保护分支 :
| Protected Branch | Version | Release |
|---|---|---|
| master | ||
| v2.7.1 | ||
| v2.7.1-26.1.0 | ||
| v2.9.0 | ||
| v2.10.0 | ||
| v2.11.0-26.1.0 | ||
| v2.11.0 | ||
| v2.12.0 | ||
| v2.9.0-26.1.0 | ||
| v2.12.0-26.1.0 | ||
| v2.10.0-26.1.0 | ||
| ci-test | ||
| sync-pr28113--to-v2.9.0 |
评论 /sync <branch1> <branch2> ... 可将当前 PR 修改同步到其它分支(创建同步 PR):
a) 如果当前 PR 是 Open 状态,同步操作将延迟到 PR 被合并时执行
b) 如果当前 PR 已经 Merged,将立即执行同步操作
注意:
- /sync 命令可以指定同步到多个分支,仅最后一个 /sync 命令生效
- 如果创建的同步 PR 不正确,可通过向同步 PR 的源分支提交轻量级 PR 完善,或使用 /close 命令关闭


ascend docs pipeline is running...


✅ 跳过 docs ci 检查,没有需要检查的文档文件


变更摘要
此 PR 针对 cat 和 cat.out 两个算子,在 parse_backend_yaml 函数中强制绕过 structured 自动代码生成链路,使其回退到原本的手写实现路径,以修复 BEVFusion 网络中出现的显存异常问题。
主要改动
is_structured计算逻辑修改:在torchnpugen/gen_backend_stubs.py的parse_backend_yaml函数中,对is_structured的赋值增加了对op_name的判断——当算子名称为"cat.out"时,直接将is_structured置为False,从而阻止其进入 structured 代码生成分支。has_structured_delegate计算逻辑修改:同样在parse_backend_yaml函数中,对has_structured_delegate的赋值增加了对op_name的判断——当算子名称为"cat"时,直接将has_structured_delegate置为False,使其不再走 structured delegate 路径。


| 阶段 | 任务名 | 状态 | 详情 |
|---|---|---|---|
| 编译构建 | Build_X86 | ❌ | >>> |
| Build_ARM | ❌ | >>> | |
| Build_LibTorch_x86 | ❌ | >>> | |
| Build_LibTorch_ARM | ❌ | >>> | |
| Build_X86_torchair | 🛑 | >>> | |
| Build_ARM_torchair | 🛑 | >>> | |
| patch_test | 🛑 | >>> | |
| 恶意代码检查 | Antipoison | ✅ | >>> |
| 编码安全与规范检查 | CodeCheck | ✅ | >>> |
| check_error | ✅ | >>> | |
| CodeCheck_lintrunner | ✅ | >>> | |
| 开源片段检查 | SCA | ✅ | >>> |
| 开发者测试 | UT_X86_Part_01 | 🕚 | >>> |
| UT_X86_Part_02 | 🕚 | >>> | |
| UT_ARM_A3_Part_01 | 🕚 | >>> | |
| UT_ARM_A3_Part_02 | 🕚 | >>> | |
| UT_ARM_A2_Part_01 | 🕚 | >>> | |
| UT_ARM_A2_Part_02 | 🕚 | >>> | |
| UT_ARM_A2_Part_03 | 🕚 | >>> | |
| UT_inductor_Part_01 | 🕚 | >>> | |
| UT_inductor_Part_02 | 🕚 | >>> | |
| UT_inductor_Part_03 | 🕚 | >>> | |
| UT_inductor_Part_04 | 🕚 | >>> | |
| UT_DIST_ARM_Part_01 | 🕚 | >>> | |
| UT_DIST_ARM_Part_02 | 🕚 | >>> | |
| UT_DIST_ARM_Part_03 | 🕚 | >>> | |
| UT_DIST_ARM_Part_04 | 🕚 | >>> | |
| UT_ARM_A2_Select_Part_01 | 🕚 | >>> | |
| UT_ARM_A2_Select_Part_02 | 🕚 | >>> | |
| 流水线 | PR-pipeline_pytorch | ❌ | >>> |
- compile、compile_inductor、compile_torchair : 运行流水线
- retry : 重试流水线所有失败子任务
- retry <任务名> : 仅重试指定失败子任务
- stop : 停止流水线


代码审查
经过对 diff 及相关代码上下文的深入审查,我得出的结论是:此更改在逻辑上是正确的,且达到了预期目标。以下是我的分析摘要:
审查结果
变更分析
torchnpugen/gen_backend_stubs.py 第 450–451 行:
# 修改前:
is_structured = bool(op.get('structured', False))
has_structured_delegate = op.get('structured_delegate') is not None
# 修改后:
is_structured = bool(op.get('structured', False)) if op_name != "cat.out" else False
has_structured_delegate = op.get('structured_delegate') is not None if op_name != "cat" else False
变更意图:阻止 cat 和 cat.out 算子进入 structured 自动代码生成路径,使其回退到手写实现。这与 issue #2597(修复 BEVFusion 显存劣化 700M 问题)的目标一致。
逻辑正确性验证
-
op_name的来源(第 444 行):由_get_backend_yaml_op_name(op)提取,对于 yaml 中的 dict 条目,会取func字段(之前的部分并 strip。对于cat(Tensor[] tensors, int dim=0) -> Tensor得到"cat",对于cat.out(...)得到"cat.out",与硬编码字符串完全匹配。 -
门控条件(第 452 行):
if is_structured or has_structured_delegate:—— 只有当两者之一为True时才进入 structured 路径。 -
cat.out处理:is_structured被强制设为Falsehas_structured_delegate正常检查(yaml 中cat.out不应有此字段)- 两者均为
False→ 跳过 structured 路径 ✅
-
cat处理:is_structured正常检查(yaml 中cat不应有structured: True)has_structured_delegate被强制设为False- 两者均为
False→ 跳过 structured 路径 ✅
-
下游影响:由于两者均不进入 structured 路径,
check_structured_group_consistency(第 495 行)不会对 cat/cat.out 进行一致性检查,不会引发异常。 -
Python 三元表达式优先级:解析正确,不存在结合性问题。
审查结论
未发现此 diff 引入的实际缺陷。该变更是针对特定算子(cat/cat.out)的定向回退方案,在当前的 yaml 配置下可正确生效。逻辑正确、语法无误、不影响其他算子的处理流程。
总结:审查了 1 个变更文件(torchnpugen/gen_backend_stubs.py),未发现问题。整体风险判断:低。该变更是针对特定场景的精确修复,逻辑正确,无副作用。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


compile


| 阶段 | 任务名 | 状态 | 详情 |
|---|---|---|---|
| 编译构建 | Build_X86 | 🕚 | >>> |
| Build_ARM | 🕚 | >>> | |
| Build_LibTorch_x86 | 🕚 | >>> | |
| Build_LibTorch_ARM | 🕚 | >>> | |
| Build_X86_torchair | 🕚 | >>> | |
| Build_ARM_torchair | 🕚 | >>> | |
| patch_test | 🕚 | >>> | |
| 恶意代码检查 | Antipoison | 🕚 | >>> |
| 编码安全与规范检查 | CodeCheck | 🕚 | >>> |
| check_error | 🕚 | >>> | |
| CodeCheck_lintrunner | 🕚 | >>> | |
| 开源片段检查 | SCA | 🕚 | >>> |
| 开发者测试 | UT_X86_Part_01 | 🕚 | >>> |
| UT_X86_Part_02 | 🕚 | >>> | |
| UT_ARM_A3_Part_01 | 🕚 | >>> | |
| UT_ARM_A3_Part_02 | 🕚 | >>> | |
| UT_ARM_A2_Part_01 | 🕚 | >>> | |
| UT_ARM_A2_Part_02 | 🕚 | >>> | |
| UT_ARM_A2_Part_03 | 🕚 | >>> | |
| UT_inductor_Part_01 | 🕚 | >>> | |
| UT_inductor_Part_02 | 🕚 | >>> | |
| UT_inductor_Part_03 | 🕚 | >>> | |
| UT_inductor_Part_04 | 🕚 | >>> | |
| UT_DIST_ARM_Part_01 | 🕚 | >>> | |
| UT_DIST_ARM_Part_02 | 🕚 | >>> | |
| UT_DIST_ARM_Part_03 | 🕚 | >>> | |
| UT_DIST_ARM_Part_04 | 🕚 | >>> | |
| UT_ARM_A2_Select_Part_01 | 🕚 | >>> | |
| UT_ARM_A2_Select_Part_02 | 🕚 | >>> | |
| 流水线 | PR-pipeline_pytorch | 🕚 | >>> |
- compile、compile_inductor、compile_torchair : 运行流水线
- retry : 重试流水线所有失败子任务
- retry <任务名> : 仅重试指定失败子任务
- stop : 停止流水线


ascend docs pipeline is running...


✅ 跳过 docs ci 检查,没有需要检查的文档文件


retry


重试流水线失败:PR-pipeline_pytorch 仅失败状态流水线支持重试操作。


| 阶段 | 任务名 | 状态 | 详情 |
|---|---|---|---|
| 编译构建 | Build_X86 | ✅ | >>> |
| Build_ARM | ✅ | >>> | |
| Build_LibTorch_x86 | ✅ | >>> | |
| Build_LibTorch_ARM | ✅ | >>> | |
| Build_X86_torchair | 🛑 | >>> | |
| Build_ARM_torchair | 🛑 | >>> | |
| patch_test | 🛑 | >>> | |
| 恶意代码检查 | Antipoison | ✅ | >>> |
| 编码安全与规范检查 | CodeCheck | ✅ | >>> |
| check_error | ✅ | >>> | |
| CodeCheck_lintrunner | ✅ | >>> | |
| 开源片段检查 | SCA | ✅ | >>> |
| 开发者测试 | UT_X86_Part_01 | 🛑 | >>> |
| UT_X86_Part_02 | 🛑 | >>> | |
| UT_ARM_A3_Part_01 | 🛑 | >>> | |
| UT_ARM_A3_Part_02 | 🛑 | >>> | |
| UT_ARM_A2_Part_01 | ✅ | >>> | |
| UT_ARM_A2_Part_02 | ✅ | >>> | |
| UT_ARM_A2_Part_03 | ✅ | >>> | |
| UT_inductor_Part_01 | 🛑 | >>> | |
| UT_inductor_Part_02 | 🛑 | >>> | |
| UT_inductor_Part_03 | 🛑 | >>> | |
| UT_inductor_Part_04 | 🛑 | >>> | |
| UT_DIST_ARM_Part_01 | 🛑 | >>> | |
| UT_DIST_ARM_Part_02 | 🛑 | >>> | |
| UT_DIST_ARM_Part_03 | 🛑 | >>> | |
| UT_DIST_ARM_Part_04 | 🛑 | >>> | |
| UT_ARM_A2_Select_Part_01 | ✅ | >>> | |
| UT_ARM_A2_Select_Part_02 | ✅ | >>> | |
| 流水线 | PR-pipeline_pytorch | ✅ | >>> |
- compile、compile_inductor、compile_torchair : 运行流水线
- retry : 重试流水线所有失败子任务
- retry <任务名> : 仅重试指定失败子任务
- stop : 停止流水线


/approve


/lgtm




【合入来源】
【修改方案】
不让 cat/cat.out 继续走 structured 自动代码生成链路,回到原本的手写实现路径
【资料变更】
不涉及
【接口变更】
不涉及
【功能验证】
BEVFusion网络显存正常
【CheckList】