Pull Request已成功合入, 合并人@CANN-robot
(感谢 wei_shi 的贡献)变更摘要
本 PR 主要针对 Concat split 场景下 Scalar 节点进入 ReplaceAxis 后轴属性断言失败的问题,在 autofuse/optimize/task_generator/concat_schedule_case_generator.cpp 中的 CloneNonConcatNodes、ReplaceAxis 和 UpdateOutputAttr 三处增加诊断日志,用于记录节点 API 类型、调度轴以及输出 TensorAttr 的 axis/repeats/strides 等信息。变更仅增加日志输出,不修改原有控制流和断言逻辑。
主要改动
CloneNonConcatNodes增加拷贝后诊断日志: 在拷贝节点TensorAttr后新增GELOGI日志,记录源/目标节点的名称、类型、api.type、sched.axis以及首个输出的axis,便于追踪克隆节点的属性状态。ReplaceAxis增加入口与逐输出诊断日志: 在函数入口新增GELOGI日志记录节点信息、api_type、新旧轴 ID 及sched.axis;并在遍历输出时逐条记录各输出的axis/repeats/strides,用于定位轴替换前后的属性变化。UpdateOutputAttr增加入口与失败诊断日志: 在函数入口新增GELOGI日志记录待处理的axis/repeats/strides;当axis_index未找到(等于std::numeric_limits<size_t>::max())时新增GELOGE错误日志,输出调度轴、张量轴及repeats/strides等完整信息,且保留原有断言不变。- 函数签名格式微调: 对
ReplaceAxis和UpdateOutputAttr的参数换行与缩进进行了对齐调整,不影响函数行为。


代码审查
关闭总结
审查了唯一变更文件 autofuse/optimize/task_generator/concat_schedule_case_generator.cpp:
- 三处
GELOGI诊断日志(CloneNonConcatNodes 行 564、ReplaceAxis 行 604/615、UpdateOutputAttr 行 628)格式串与实参个数匹配,af::ToString(...).c_str()临时对象生命周期覆盖整条调用表达式,%zu/%ld/%s与实参类型一致,未发现问题。 - 发现 1 个 P0 问题:行 643 的
GELOGE调用缺少ERROR_CODE首参(宏签名为GELOGE(ERROR_CODE, fmt, ...)),会导致该编译单元编译失败或格式串误用。
按优先级统计:P0 × 1,P1 × 0,P2 × 0,P3 × 0。
整体风险判断:本次变更仅新增诊断日志,除一处 GELOGE 宏调用参数错位(引入编译失败风险)外,其余改动风险较低;但该 P0 问题会直接阻断构建,需修复后才能合入。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 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.
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 |
|---|---|---|
| repo-cann/graph-autofusion | ✅ 张德鹏, wangxiaotian995, xchu42 (3/2) | ✅ 张德鹏 (1/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
wei_shi, thanks for your pull request. All authors of the commits have signed the CLA. 👍


描述
修复 Concat split 场景下 Scalar 节点错误进入 ReplaceAxis 导致断言失败的问题。
根因:
PowEquivSubstitutionPass通过CreateOneScalarBrc动态创建的 Scalar 节点发生在AscGraphInfoComplete::CompleteApiInfo()之后,api.type保持默认kAPITypeInvalid(2),导致CloneNonConcatNodes中IsBuffer()返回 false,Scalar 错误进入ReplaceAxis,在tensor_attr.axis=[5]中找不到 Concat 轴0→6,触发断言。修复:在
CreateOneScalarBrc中显式设置scalar_one.attr.api.type = kAPITypeBuffer,使IsBuffer()正确返回 true,Scalar 在CloneNonConcatNodes中被正确跳过,不进入ReplaceAxis。变更类型
关联的Issue
无
如何测试
optimize_ut测试目标通过(cmake --build build --target optimize_ut -j 8)PowScalarDtypeCheck测试通过,新增api.type == kAPITypeBuffer断言验证修复生效--gtest_filter='*Pow*')通过,无回归核对清单
其他信息
变更文件:
autofuse/optimize/graph_pass/pass_utils.cpp:CreateOneScalarBrc中设置api.type = kAPITypeBufferautofuse/tests/v35/ut/optimize/test_optimizer_v2.cpp:PowScalarDtypeCheck增加api.type == kAPITypeBuffer断言根因分析详见内部报告
013-ConcatFusionCaseGenerator Scalar轴替换断言失败分析报告.md。