| fix: SubgraphRewriter带ctx重载自动上报ReportMatch修复match/effect统计不对齐 Co-authored-by: DazhouCao<caodazhou@huawei.com> # message auto-generated for no-merge-commit merge: !5266 merge fix/fusion-sample-report-match into develop fix: SubgraphRewriter带ctx重载自动上报ReportMatch修复match/effect统计不对齐 Created-by: Dazhou_Cao Commit-by: DazhouCao;qq_45842700 Merged-by: cann-robot Description: # Pull Request ## 描述 复现 examples/fusion_pass/graph_base_pass/2_move_relu_before_concat_pass 样例时,fusion_result.json 中 match_times=0 而 effect_times=1,不符合 match_time(结构匹配全集)≥ effect_time(融合生效子集)的规律。进一步排查确认:**所有走带 ctx 的 SubgraphRewriter::Replace 路径的代码均存在 match_time 偏小问题**(包括 python SubgraphRewriter.replace(b, g, context=))。 **根因分析**: 1. 带 ctx 的 SubgraphRewriter::Replace 内部会自动调用 ReportFuse 累加 effect_time,但 match_time 的累加完全依赖调用方显式调用 GraphFuseInspectorUtils::ReportMatch(match_time 偏小的直接原因); 2. python binding 未暴露 report_match 接口,python 侧即使想手动上报也无接口可用; 3. PatternFusionPass/DecomposePass 走不带 ctx 的 2 参重载且统计自管理,不受影响。 **修复内容**: 1. **框架自动上报**:带 ctx 的 SubgraphRewriter::Replace 重载内部在 CanFuse 之前自动调用 ReportMatch(无论融合条件是否通过均计入 match_time,与 ReportMatch 接口语义对齐),彻底保证 match_time >= effect_time;上报失败仅告警不阻断替换流程; 2. **python 能力补齐**:binding 补齐 report_match 绑定及导出链路(_native.py/fuse_inspector.py/__init__.py/_ge_pass_native.pyi),供手动改图(不走 SubgraphRewriter)场景使用; 3. **样例对齐**:样例 2 回退手动上报(避免与框架自动上报双计),改为注释说明带 ctx 重载的自动上报行为; 4. **文档同步**:ReportMatch.md 约束说明、SubgraphRewriter/Replace.md 参数说明、compiler.md 机制描述均已更新,明确"带 ctx 重载自动上报,调用方不应重复手动调用"。 ## 变更类型 - [x] 🐛 Bug 修复 ## 关联的Issue 无 ## 如何测试 1. 单元测试:UtestMatchReplacer.ReplaceWithCtxReportsMatchAndEffectTimes(替换成功后 match=1/effect=1)、UtestMatchReplacer.ReplaceWithCtxReportsMatchWhenCanFuseFailed(CanFuse 失败时 match=1/effect=0) 2. 样例验证:编译安装样例 so → python es_gen_air.py 导出 air → atc --model=./graph.air --framework=1 --soc_version=xxx(或 torch_forward.py 在线推理)→ 查看 fusion_result.json,确认样例 pass 的 match_times=1、effect_times=1 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 - 本机验证情况:graph_rewriter.cc、graph_fuse_inspector_binding.cc、graph_rewriter_unittest.cc 均通过单文件编译验证(-Wall -Wextra -Werror);python 文件通过 py_compile 语法验证 - 本机无 NPU 环境,上板功能验证待 CI 或有环境时补充(预期 fusion_result.json 中 match_times=1, effect_times=1) See merge request: cann/ge!5266 | 29 days ago |