| 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 |
| docs: 新增编码红线 GE框架规则 18/19(释放接口需与申请接口匹配、禁止保存容器数据指针与解引用空/野指针) Co-authored-by: tangqunzhang<tangqunzhang@huawei.com> # message auto-generated for no-merge-commit merge: !5491 merge docs/coding-redline-mem-release-match into develop docs: 新增编码红线 GE框架规则 18/19(释放接口需与申请接口匹配、禁止保存容器数据指针与解引用空/野指针) Created-by: tangqunzhang Commit-by: tangqunzhang Merged-by: cann-robot Description: # Pull Request ## 描述 在 GE 框架规则中新增两条编码红线(均为中英文档同步): **第 18 条:内存/资源的释放接口必须与申请接口匹配** - 明确申请/释放接口必须成对使用:malloc/free、new/delete、new[]/delete[]、 mmMalloc/mmFree、rtMalloc/rtFree、rtMallocHost/rtFreeHost、 aclrtMalloc/aclrtFree、aclrtMallocHost/aclrtFreeHost - 同族接口之间也不可混用:device 与 host 内存、rt* 与 aclrt* 不可交叉释放;new[] 必须用 delete[] - GE 特化场景:经 MemManager 或**外置 allocator**(ge_api_v2.cc 注册)分配的内存,必须回调 对应 allocator 的释放接口,禁止用 aclrtFree 等底层接口直接释放 **第 19 条:禁止保存容器/临时对象的数据指针,禁止解引用空指针与野指针** - 保存 std::string::c_str()/data()、std::vector::data()、std::map 元素地址等容器内部数据指针后, 容器扩容/插入/赋值/移动/析构(含离开作用域)即失效,继续使用为野指针(UB) - 需长期保留内容时使用值语义(按值存 std::string、拷贝 std::vector 或 shared_ptr 持有) - 补充:禁止返回局部对象/元素指针或引用;解引用前判空;跨组件传入指针需校验生命周期(规则 13); 异步接口传入指针须在其真正执行时仍有效(规则 10、12) - **常见误报**:静态/全局常量 std::string(含函数内 static const)、字符串字面量、智能指针 get() 在对象存活期内使用、容器指针仅用于同一表达式/同步调用等 - **例外**:局部 const 变量不豁免;静态常量所在 SO 被卸载(dlclose)后静态存储被回收,指针同样失效 - **术语注解**:明确"解引用"指通过 *p、p->member、p[i] 等方式访问指针所指对象(含把指针交给 接口读写其指向内存) ## 变更类型 - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue 无 ## 如何测试 文档变更,无代码逻辑改动: 1. pre-commit run --files docs/zh/contributions/coding_red_lines.md docs/en/contributions/coding_red_lines.md (codespell / 格式检查通过) 2. 人工核对中英文条目编号与内容一致(GE框架规则第 18、19 条) ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 无 See merge request: cann/ge!5491 | 17 days ago |
| fix: 清理 AICPU Host 执行与引擎判定静态告警(#700) Co-authored-by: ayuemoon<15802951036@163.com> # message auto-generated for no-merge-commit merge: !5725 merge cherry-pick-mr-5716-1793609135201-auto into develop fix: 清理 AICPU Host 执行与引擎判定静态告警(#700) Created-by: ayuemoon Commit-by: ayuemoon Merged-by: cann-robot Description: # Pull Request ## 描述 清理 AICPU Host 执行与 Host CPU 引擎判定的 4 条静态告警。 | 规则 | 告警数 | 修改 | |---|---:|---| | G.EXP.15-CPP | 1 | AicpuHostExecFunc 使用仓内 PtrToPtr<KernelContext, ExtendedKernelContext> 工具访问扩展上下文 | | SecA_Ascend_GERecommandHighPerformanceInterface | 1 | lowering 属性改用返回 const std::string* 的 AttrUtils::GetStr 重载,判空后比较 | | 同上 | 2 | GetAllInputsDesc/GetAllOutputsDesc 改用对应的描述指针接口,判空后通过 -> 读取数据类型 | 描述指针接口避免复制 Tensor 描述对象,属性指针重载避免复制字符串。已核对输入接口保留对无效可选输入的过滤,并在输入、输出类型检查中显式跳过空描述指针;缺失或类型不匹配的 lowering 属性仍返回 false。沿用既有上下文布局和 Host 执行顺序。 ## 变更类型 - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue Closes #700 ## 如何测试 在 CANN 9.3 环境下,两个 UT 目标均编译成功: - UtestHostcpuEngineUpdatePass.*:29 个用例全部通过。 - AicpuKernelLaunchUT.*、AicpuNodeConverterUT.*:37 个用例全部通过。 共执行 66 个相关用例,无失败。 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测(本地静态检查,工程编译及 UT/ST 待 CI) - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat、fix) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 按 AGENTS.md 同步 compiler 模块、graph_splitter 和 unknown_shape_executor 特性文档。代码变更为 2 个源文件,文档变更为 3 个 Markdown 文件。 See merge request: cann/ge!5725 | 3 days ago |
| 【PR】: 新增中英文跳转链接 Co-authored-by: sophia1213<sophie.chen@huawei.com> # message auto-generated for no-merge-commit merge: !4750 merge develop into develop 【PR】: 新增中英文跳转链接 Created-by: sophia1213 Commit-by: sophia1213 Merged-by: cann-robot Description: # Pull Request ## 描述 RAEDME以及一级文件夹根目录添加中英文跳转链接。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue 不涉及 ## 如何测试 根据最新资料进行测试 ## 核对清单 <!-- [x] 表示选中 --> - [ ] 我的代码遵循了项目的代码风格 - [ ] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [ ] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [ ] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/ge!4750 | 1 month ago |
| feat: 支持HCCL自定义算子接入GE Co-authored-by: tangqunzhang<tangqunzhang@huawei.com> # message auto-generated for no-merge-commit merge: !5687 merge fix/request-attached-stream-overload-compat into develop feat: 支持HCCL自定义算子接入GE Created-by: tangqunzhang Commit-by: tangqunzhang Merged-by: cann-robot Description: # Pull Request ## 描述 本 PR 支持 HCCL 自定义算子接入 GE,并补充自定义算子运行期上下文查询接口。相对 develop 共 86 个文件、+1996/-339 行,单个提交。 ### 一、HCCL 自定义算子接入 GE - **引擎路由**:注册为 OpEngine::kHccl 的自定义算子经映射表路由到 DNN_HCCL,kernel lib 仍为 custom store,复用独立流等流分配特性。 - **kBottom 兜底注册**:认领族(GetAllRegisteredOps/GetOpEngine/三参 CreateOrGetCustomOp/打包收集)覆盖 kBottom;守卫族保持 (kTop, kCustom) 默认槽位语义。 - **地址刷新闭环**:custom kernel lib 算子按注册能力判定;IsHcomNodeNotSupportAddrRefresh 补齐 DNN_HCCL 判定。 ### 二、运行期上下文查询接口 - EagerOpExecutionContext 新增 GetContextValue(ContextParam, uint64_t&):布尔参数取 0/1,返回值区分查询成功与否;当前支持 kStaticModel / kAddressRefreshEnabled / kGraphId / kNodeId / kVectorCoreNum,并预埋 kAiCoreNum / kAiCpuNum。 - 新增 GetOption(option_key, option_value):运行期选项,全局/会话/图三级合并语义。 - 新增 RequestAttachedStream(key, flags):flags 为 RTS 流创建标志原值,不需要特殊标志时填 0;同时保留 RequestAttachedStream(key) 单参重载(转调两参、flags=0)以兼容跨仓调用。 - kGraphId 统一取根图 graph id:V1 下沉路径由 CustomTaskInfo::UpdateContextInfo 装载;RT2 动态路径由 lowering 将根图 graph id / node id / vector core 数量作为附加输入下发。 ### 三、伴生对象与枚举内聚 - 运行期/编译期共用的上下文伴生对象统一为 CustomOpContextInfo,承载上下文参数与辅流提供者,ArgsHandler 回归纯 args 内存管理。 - ContextParam 内聚到已有头文件 kernel_args.h,不新增头文件;kNum 保持为枚举数量哨兵且固定在最后。 - OpCompileContext 预埋 GetContextValue 与 AdditionalOutputIndex,当前 GetContextValue 为空实现(恒返回 false),编译期数据通路待后续版本实现。 ### 四、配套 - 新增/更新中文 API 文档、开发指南、sample(代码与中英 README)及 UT;精简新增文档示例与重复说明。 - 注册优先级语义(认领/守卫两族可见性规则)同步至 docs/zh/design/features/engine.md 与 docs/en/design/features/engine.md。 ## 变更类型 - [x] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [x] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue 无 ## 如何测试 1. 编译:bash build.sh --ge_executor、bash build.sh --ge_compiler(本地已通过,CANN toolkit 9.3.0) 2. UT: - ut_register(注册优先级/承载口径白名单) - ut_libge_multiparts_utest(引擎路由/kBottom 认领/自定义 store) - ut_libge_distinct_load_utest(V1 上下文填充等) - ut_fast_runtime2_test(RT2 lowering 注入/vector core 数量) - EagerOpExecutionContextTest.RequestAttachedStreamForwardsViaContextInfoSlot(含单参等价 flags=0) 3. pre-commit(codespell / clang-format / OAT 等)本地全部通过 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 - **兼容性**:GetContextValue / GetOption / OpCompileContext::GetContextValue 为新增方法,符合对外接口"扩展只加方法"规范;RequestAttachedStream 保留单参重载,旧符号与源码兼容;ContextParam 追加 kAiCoreNum / kAiCpuNum(尾部追加,既有枚举值不变)。 - **头文件收敛**:不新增 context_param.h,ContextParam 与 KernelArgs 同置于 exe_graph/runtime/kernel_args.h,编译期/运行期上下文各自 include,无循环依赖。 - **编译期接口**:OpCompileContext::GetContextValue 当前为占位空实现,AdditionalOutputIndex::kContextInfo 已预埋,后续实现时无需调整对外接口。 - 对外资料已同步:docs/zh/api/graph_engine_api/cpp/gert/EagerOpExecutionContext/、docs/zh/api/graph_engine_api/cpp/gert/OpCompileContext/;sample examples/custom_op/eager_attached_stream_add 同步 2 参签名。 - 外部 HCCL 流保序能力不在本 PR。 See merge request: cann/ge!5687 | 8 days ago |
| 【PR】: 更新资料中的链接 Co-authored-by: sophia1213<sophie.chen@huawei.com> # message auto-generated for no-merge-commit merge: !4550 merge develop into develop 【PR】: 更新资料中的链接 Created-by: sophia1213 Commit-by: sophia1213 Merged-by: cann-robot Description: # Pull Request ## 描述 1、更新资料中的跳转链接,修改为仓内跳转。 2、修改表格展示错乱问题。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue https://gitcode.com/cann/ge/issues/540 ## 如何测试 根据最新资料进行测试 ## 核对清单 <!-- [x] 表示选中 --> - [ ] 我的代码遵循了项目的代码风格 - [ ] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [ ] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [ ] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/ge!4550 | 2 months ago |
| fix: 修复EasyGraph边比较及构建安装路径 Co-authored-by: m0_50621083<hongyuecheng@huawei.com> Co-authored-by: dududu121<1595630181@qq.com> Co-authored-by: KaranocaVe<karanocave@qq.com> # message auto-generated for no-merge-commit merge: !5603 merge fix/ge-pr5190-5188-5184-combined-20261027 into develop fix: 修复EasyGraph边比较及构建安装路径 Created-by: m0_50621083 Commit-by: m0_50621083;dududu121;KaranocaVe Merged-by: cann-robot Description: # Pull Request ## 描述 基于 develop 整合原 PR #5188、#5184,保留原作者和 cherry-pick 来源记录。 - #5188:中英文构建指南的安装、卸载命令补齐 build_out/ 路径,关联 Issue #583。 - #5184:EasyGraph 测试框架的边比较器在端点相等时比较边类型,保留同端点 DATA/CTRL 边,关联 Issue #582。 ## 本轮回退说明 因属性读取返回值的接口兼容性仍需评估,按维护者要求,以 d0d50ac1b 完整撤销此前整合的 #5190:包括生产代码、回归测试及两个 API 文档的后续修订。本 PR 不再包含 Issue #584 的修复,不应据此关闭该 Issue。额外的中英文 AscendIR 说明此前也已回退。相关历史提交保留,不强推改写历史。 当前净差异仅 3 个文件:docs/en/build.md、docs/zh/build.md、tests/autofuse/framework/easy_graph/src/graph/edge.cc。 ## 变更类型 - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新 - [ ] ♻️ 重构 - [ ] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue Fixes #583 Fixes #582 ## 如何测试 - 本轮 pre-commit run --from-ref upstream/develop --to-ref HEAD 全部适用检查通过;git diff --check 通过。 - 核对当前净差异:#5190 的实现、测试及 API 文档不再有改动。 - 之前已用实际 EasyGraph 源文件在 Host C++17 ASan/UBSan 下验证两种边插入顺序,本轮未改该实现。 - 未执行完整 GE UT/ST、真实安装/卸载或 NPU 验证;最新 CI 需重新确认,不沿用旧提交结果。 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已完成上述本地检查 - [x] 我已更新相关中英文构建文档 - [x] 我在标题中使用了合适的类型标签 - [x] 我已阅读贡献指南并遵循提交规范 ## 其他信息 原作者 KaranocaVe、dududu121 信息保留;Codex 辅助整合及按维护者要求回退。未合入任何 PR。 See merge request: cann/ge!5603 | 9 days ago |
| 【PR】: 更新资料 Co-authored-by: sophia1213<sophie.chen@huawei.com> # message auto-generated for no-merge-commit merge: !4695 merge develop into develop 【PR】: 更新资料 Created-by: sophia1213 Commit-by: sophia1213 Merged-by: cann-robot Description: # Pull Request ## 描述 更新资料中的参考手册名称。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue 不涉及 ## 如何测试 根据最新资料测试 ## 核对清单 <!-- [x] 表示选中 --> - [ ] 我的代码遵循了项目的代码风格 - [ ] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [ ] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [ ] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/ge!4695 | 2 months ago |