| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix: remove reshape skip checksupport Co-authored-by: lushiming0<lushiming1@h-partners.com> # message auto-generated for no-merge-commit merge: !4946 merge lsmge_20260914 into develop fix: remove reshape skip checksupport Created-by: lushiming0 Commit-by: lushiming0 Merged-by: cann-robot Description: # Pull Request ## 描述 删除 GraphNodeSettedFormatPass 中 reshape 跳过 checksupport 部分,reshape 不支持配置 format。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 配置 reshape 算子 format。 2. checksupport 报错。 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/ge!4946 | 6 天前 | |
fix: replace Chinese log messages with English in examples Co-authored-by: wangyuchen<wangyuchen38@huawei.com> # message auto-generated for no-merge-commit merge: !4883 merge fix/example_log into develop fix: replace Chinese log messages with English in examples Created-by: yuchen97 Commit-by: wangyuchen Merged-by: cann-robot Description: ## Description Replace Chinese log/print messages with English across all examples/ subdirectories to comply with the "no Chinese in logs" rule. Also fix one implicit string concatenation bug (missing space) and improve the English fluency of a previously awkward translation. ## Changes ### examples/es/ (183 issues, 30 files) - C++ main.cpp files (14 subdirs): "GE 初始化失败" → "GE initialization failed", "执行结束" → "Execution completed", "错误: 未知命令" → "Error: unknown command" - Python run_graph() (16 files): all Chinese print statements replaced with fluent English ("图运行成功" → "Graph executed successfully", "清理GE环境" → "Cleaning up GE environment", etc.) - hccl_ep/hccl_tp: "单卡模式"/"多卡模式" → "Single-card mode"/"Multi-card mode" ### examples/fusion_pass/ (68 issues, 12 files) - RuntimeError messages: ES API missing prompts translated from Chinese to English with proper README section references - Pass registration messages: "已注册" → "registered", "请通过 ASCEND_GE_PY_PASS_PATH 指向本文件" → "Please add this file to ASCEND_GE_PY_PASS_PATH" (improved translation per review feedback) - Graph base pass and pattern base pass: all Chinese print/log replaced ### examples/multi_stream_autotune/ (73 issues, 3 files) - ge_ms_autotune.py: ~110 Chinese log/error/print messages replaced; header and column labels in output table anglicized; docstrings updated - sample_run.py: Chinese comments and print statements replaced - README.md / README_en.md: example output section updated to match new English outputs - Fixed missing space bug in find_compiled_om() string concatenation ### examples/offline_compile_run/ (70 issues, 10 files) - C++ files: all std::cerr/std::cout Chinese messages replaced ("失败" → "failed", "初始化成功" → "initialized successfully", etc.) - Python files: all Chinese print/f-string messages replaced with English equivalents ## Change Statistics - **56 files** modified - **467 insertions**, **442 deletions** - **394 Chinese log messages** converted to English across 4 module directories ## Change Type - [ ] 🐛 Bug fix - [ ] ✨ New feature - [ ] 💄 Code style update - [ ] ♻️ Refactoring - [ ] 📦 Build process - [x] 📝 Documentation / example update ## How to Test 1. Build any example under examples/ and verify all output messages are in English 2. Check examples/multi_stream_autotune/ outputs for proper formatting ## Checklist - [x] My code follows the project's code style - [x] I have self-tested the changes - [x] I have updated related documentation - [x] I have used appropriate type label in the title - [x] I have read and followed the contributing guidelines See merge request: cann/ge!4883 | 10 天前 | |
refactor: 清理文档目录,更新配置文件 | 3 个月前 | |
提交英文文档 | 2 个月前 | |
feat: 融合Pass注册支持声明默认开关状态(PassSwitch) Co-authored-by: qq_45842700<caodazhou@huawei.com> # message auto-generated for no-merge-commit merge: !4383 merge feat/fusion-pass-default-switch into develop feat: 融合Pass注册支持声明默认开关状态(PassSwitch) Created-by: Dazhou_Cao Commit-by: qq_45842700 Merged-by: cann-robot Description: ## 描述 将融合Pass开关机制中硬编码的 return true 替换为注册时声明的 default_switch 值,作为四层开关优先级的最低层(第四层)。开发者可通过 REG_FUSION_PASS/REG_DECOMPOSE_PASS/REGISTER_CUSTOM_PASS 的变参宏声明 PassSwitch::kOff,使有精度风险或性能回退的pass默认关闭,仅当用户显式配置开启时才执行。 ### 背景与动机 GE 融合Pass原有三层运行时开关机制(graph option > JSON精确匹配 > JSON ALL通配 > **硬编码 return true**)。“默认true”是硬编码的,pass注册时无法声明自己的默认关闭状态。部分pass在特定条件下存在精度风险或性能回退,需要在注册时声明默认关闭,当前只能在pass内部 MeetRequirements 中做条件判断规避,不够直观,也无法在pass初始化阶段就跳过实例创建。 ### 变更内容 - 新增 PassSwitch 枚举(kOn=0, kOff=1),定义于 register_custom_pass.h - FusionPassRegistrationData / PassRegistrationData 新增 DefaultSwitch / GetDefaultSwitch 方法 - 三个注册宏采用变参宏重载:1参兼容(不调用 DefaultSwitch),2参带 switch - IsPassEnable 提取为 PassOptionUtils::IsPassEnable 公共方法,末尾 return true 改为 return default_switch == kOn - CustomPassHelper::Run 新增带 switch map 的重载 - Python Pass 桥接时隐式获得 kOn 默认值,行为不变 ### 兼容性 - **源码兼容**:变参宏分发,旧1参调用无需修改 - **ABI兼容**:PIMPL模式,新增非虚方法不影响布局 - **运行时兼容**:1参宏不调用 DefaultSwitch,旧GE运行时dlopen不受影响 ## 变更类型 - [x] ✨ 新功能 ## 如何测试 1. 编译 ge_compiler 包,验证编译通过 2. 运行 ut_fusion_pass_executor_utest 中新增的9个UT用例 3. 验证场景:kOff+无配置->跳过、kOff+option on->执行、kOff+JSON精确on->执行、kOff+JSON ALL on->执行、不传switch->默认执行 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签 - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定 ## 其他信息 四层开关优先级: 1. graph option (--optimization_switch) 最高,用户运行时覆盖 2. JSON 精确匹配 (fusion_switch.cfg) 用户/产品配置 3. JSON ALL 通配 一键开关 4. 注册默认值 (DefaultSwitch) 最低,开发者声明 ← 新增 See merge request: cann/ge!4383 | 3 天前 | |
feat: 融合Pass注册支持声明默认开关状态(PassSwitch) Co-authored-by: qq_45842700<caodazhou@huawei.com> # message auto-generated for no-merge-commit merge: !4383 merge feat/fusion-pass-default-switch into develop feat: 融合Pass注册支持声明默认开关状态(PassSwitch) Created-by: Dazhou_Cao Commit-by: qq_45842700 Merged-by: cann-robot Description: ## 描述 将融合Pass开关机制中硬编码的 return true 替换为注册时声明的 default_switch 值,作为四层开关优先级的最低层(第四层)。开发者可通过 REG_FUSION_PASS/REG_DECOMPOSE_PASS/REGISTER_CUSTOM_PASS 的变参宏声明 PassSwitch::kOff,使有精度风险或性能回退的pass默认关闭,仅当用户显式配置开启时才执行。 ### 背景与动机 GE 融合Pass原有三层运行时开关机制(graph option > JSON精确匹配 > JSON ALL通配 > **硬编码 return true**)。“默认true”是硬编码的,pass注册时无法声明自己的默认关闭状态。部分pass在特定条件下存在精度风险或性能回退,需要在注册时声明默认关闭,当前只能在pass内部 MeetRequirements 中做条件判断规避,不够直观,也无法在pass初始化阶段就跳过实例创建。 ### 变更内容 - 新增 PassSwitch 枚举(kOn=0, kOff=1),定义于 register_custom_pass.h - FusionPassRegistrationData / PassRegistrationData 新增 DefaultSwitch / GetDefaultSwitch 方法 - 三个注册宏采用变参宏重载:1参兼容(不调用 DefaultSwitch),2参带 switch - IsPassEnable 提取为 PassOptionUtils::IsPassEnable 公共方法,末尾 return true 改为 return default_switch == kOn - CustomPassHelper::Run 新增带 switch map 的重载 - Python Pass 桥接时隐式获得 kOn 默认值,行为不变 ### 兼容性 - **源码兼容**:变参宏分发,旧1参调用无需修改 - **ABI兼容**:PIMPL模式,新增非虚方法不影响布局 - **运行时兼容**:1参宏不调用 DefaultSwitch,旧GE运行时dlopen不受影响 ## 变更类型 - [x] ✨ 新功能 ## 如何测试 1. 编译 ge_compiler 包,验证编译通过 2. 运行 ut_fusion_pass_executor_utest 中新增的9个UT用例 3. 验证场景:kOff+无配置->跳过、kOff+option on->执行、kOff+JSON精确on->执行、kOff+JSON ALL on->执行、不传switch->默认执行 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签 - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定 ## 其他信息 四层开关优先级: 1. graph option (--optimization_switch) 最高,用户运行时覆盖 2. JSON 精确匹配 (fusion_switch.cfg) 用户/产品配置 3. JSON ALL 通配 一键开关 4. 注册默认值 (DefaultSwitch) 最低,开发者声明 ← 新增 See merge request: cann/ge!4383 | 3 天前 | |
feat: 支持 Python PatternFusionPass 和 DecomposePass 获取 PassContext Co-authored-by: lfz2812<220252399@seu.edu.cn> # message auto-generated for no-merge-commit merge: !4147 merge v2 into develop feat: 支持 Python PatternFusionPass 和 DecomposePass 获取 PassContext Created-by: lfz2812 Commit-by: lfz2812 Merged-by: cann-robot Description: # Pull Request ## 描述 将 C++ PatternFusionPassV2、DecomposePassV2中携带CustomPassContext的判断和替换能力开放至 Python,使 Python PatternFusionPass和DecomposePass可以在meet_requirements、replacement方法中按需接收PassContext。 本次修改支持以下写法: - PatternFusionPass graph-building style: - meet_requirements(self, match_result, context) - replacement(self, match_result, context) - PatternFusionPass expression style: - replacement(self, inputs, context) - replacement(self, inputs, match_result, context) - DecomposePass: - meet_requirements(self, node, context) - replacement(self, node, context) 未声明context的原有方法签名保持兼容,不新增 Python V2 类。 ## Python 化过程 1. C++ Adapter 接入 V2 Pass: - PythonPatternFusionPassAdapter改为继承PatternFusionPassV2。 - PythonDecomposePassAdapter改为继承DecomposePassV2。 - PatternFusionPass 和 DecomposePass 的判断、替换回调增加CustomPassContext&参数。 2. pybind bridge 透传上下文: - 将 C++ CustomPassContext转换为 Python PassContext视图。 - 调用 Python 的判断和替换方法时传入context。 - 捕获 Python 异常,将错误信息写入CustomPassContext,判断方法返回false,替换方法返回FAILED。 3. Python 层兼容新旧签名: - 在 Pass 子类定义阶段检查并适配meet_requirements、replacement方法签名。 - 未声明context时按原有参数调用;声明context时由引擎自动注入。 - 缓存方法是否接收context的判断结果,避免每次匹配重复解析签名。 - 为基类默认方法增加context标记,支持子类不重写meet_requirements的常见场景。 4. expression-style replacement 参数消歧: - replacement(self, inputs, context)的第三个参数只有命名为context时才按PassContext处理。 - 第三个参数不是context时保持原有match_result语义。 - 四参数形式必须为replacement(self, inputs, match_result, context)。 - 不支持的参数组合在类定义阶段抛出TypeError。 5. 接口与文档更新: - 更新 Python 类型声明和 PassContext 使用说明。 - 更新 PatternFusionPass、DecomposePass API 文档及 Python Fusion Pass 开发指南。 调用示例: python from ge.passes import PassContext, PatternFusionPass class MyPatternFusionPass(PatternFusionPass): def meet_requirements(self, match_result, context: PassContext): return context.get_option_value("ge.custom.enable_rule") == "1" def replacement(self, match_result, context: PassContext): return build_replacement_graph(match_result) python from ge.passes import DecomposePass, PassContext class MyDecomposePass(DecomposePass): def meet_requirements(self, node, context: PassContext): return node.get_attr("groups") != 1 def replacement(self, node, context: PassContext): return build_replacement_graph(node) ## 变更类型 - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue 关联 Issue:#299 ## 如何测试 1. 新增 Python UT,覆盖以下场景: - PatternFusionPass 和 DecomposePass 新签名能够接收context。 - 未声明context的旧签名保持兼容。 - 子类未重写meet_requirements时调用基类默认实现。 - expression-style replacement 的context、match_result参数消歧。 - 不支持的参数组合抛出TypeError。 - replacement 返回非法类型时正确报错。 2. 新增 C++ UT/ST,覆盖以下场景: - PatternFusionPass 和 DecomposePass Adapter 透传同一个CustomPassContext。 - Python 判断、替换方法抛出异常时,错误信息写入CustomPassContext。 - Python 异常分别转换为false和FAILED。 3. 执行以下检查: - Python 语法检查。 - Ruff 检查和格式检查。 - clang-format 检查。 - pre-commit 检查。 - Python Pass 相关 UT/ST。 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于 commit message 的格式、无效 commit 的合并等 ## 其他信息 1. Python 公开类仍为PatternFusionPass和DecomposePass,不暴露PatternFusionPassV2、DecomposePassV2,避免增加重复的 Python API。 2. 原有 Python Pass 方法签名和执行行为保持兼容。 3. 本次修改复用现有PassContext绑定,不修改 C++ CustomPassContext的原有实现。 See merge request: cann/ge!4147 | 1 个月前 | |
feat: 支持 Python PatternFusionPass 和 DecomposePass 获取 PassContext Co-authored-by: lfz2812<220252399@seu.edu.cn> # message auto-generated for no-merge-commit merge: !4147 merge v2 into develop feat: 支持 Python PatternFusionPass 和 DecomposePass 获取 PassContext Created-by: lfz2812 Commit-by: lfz2812 Merged-by: cann-robot Description: # Pull Request ## 描述 将 C++ PatternFusionPassV2、DecomposePassV2中携带CustomPassContext的判断和替换能力开放至 Python,使 Python PatternFusionPass和DecomposePass可以在meet_requirements、replacement方法中按需接收PassContext。 本次修改支持以下写法: - PatternFusionPass graph-building style: - meet_requirements(self, match_result, context) - replacement(self, match_result, context) - PatternFusionPass expression style: - replacement(self, inputs, context) - replacement(self, inputs, match_result, context) - DecomposePass: - meet_requirements(self, node, context) - replacement(self, node, context) 未声明context的原有方法签名保持兼容,不新增 Python V2 类。 ## Python 化过程 1. C++ Adapter 接入 V2 Pass: - PythonPatternFusionPassAdapter改为继承PatternFusionPassV2。 - PythonDecomposePassAdapter改为继承DecomposePassV2。 - PatternFusionPass 和 DecomposePass 的判断、替换回调增加CustomPassContext&参数。 2. pybind bridge 透传上下文: - 将 C++ CustomPassContext转换为 Python PassContext视图。 - 调用 Python 的判断和替换方法时传入context。 - 捕获 Python 异常,将错误信息写入CustomPassContext,判断方法返回false,替换方法返回FAILED。 3. Python 层兼容新旧签名: - 在 Pass 子类定义阶段检查并适配meet_requirements、replacement方法签名。 - 未声明context时按原有参数调用;声明context时由引擎自动注入。 - 缓存方法是否接收context的判断结果,避免每次匹配重复解析签名。 - 为基类默认方法增加context标记,支持子类不重写meet_requirements的常见场景。 4. expression-style replacement 参数消歧: - replacement(self, inputs, context)的第三个参数只有命名为context时才按PassContext处理。 - 第三个参数不是context时保持原有match_result语义。 - 四参数形式必须为replacement(self, inputs, match_result, context)。 - 不支持的参数组合在类定义阶段抛出TypeError。 5. 接口与文档更新: - 更新 Python 类型声明和 PassContext 使用说明。 - 更新 PatternFusionPass、DecomposePass API 文档及 Python Fusion Pass 开发指南。 调用示例: python from ge.passes import PassContext, PatternFusionPass class MyPatternFusionPass(PatternFusionPass): def meet_requirements(self, match_result, context: PassContext): return context.get_option_value("ge.custom.enable_rule") == "1" def replacement(self, match_result, context: PassContext): return build_replacement_graph(match_result) python from ge.passes import DecomposePass, PassContext class MyDecomposePass(DecomposePass): def meet_requirements(self, node, context: PassContext): return node.get_attr("groups") != 1 def replacement(self, node, context: PassContext): return build_replacement_graph(node) ## 变更类型 - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue 关联 Issue:#299 ## 如何测试 1. 新增 Python UT,覆盖以下场景: - PatternFusionPass 和 DecomposePass 新签名能够接收context。 - 未声明context的旧签名保持兼容。 - 子类未重写meet_requirements时调用基类默认实现。 - expression-style replacement 的context、match_result参数消歧。 - 不支持的参数组合抛出TypeError。 - replacement 返回非法类型时正确报错。 2. 新增 C++ UT/ST,覆盖以下场景: - PatternFusionPass 和 DecomposePass Adapter 透传同一个CustomPassContext。 - Python 判断、替换方法抛出异常时,错误信息写入CustomPassContext。 - Python 异常分别转换为false和FAILED。 3. 执行以下检查: - Python 语法检查。 - Ruff 检查和格式检查。 - clang-format 检查。 - pre-commit 检查。 - Python Pass 相关 UT/ST。 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于 commit message 的格式、无效 commit 的合并等 ## 其他信息 1. Python 公开类仍为PatternFusionPass和DecomposePass,不暴露PatternFusionPassV2、DecomposePassV2,避免增加重复的 Python API。 2. 原有 Python Pass 方法签名和执行行为保持兼容。 3. 本次修改复用现有PassContext绑定,不修改 C++ CustomPassContext的原有实现。 See merge request: cann/ge!4147 | 1 个月前 |
自定义融合 Pass
本目录提供 GE 自定义融合 pass 的开发文档和样例。
如果是第一次开发,建议按下面顺序阅读:
- 融合 Pattern Pass 机制:先理解 pattern、匹配、过滤、replacement 和边界规则。
- Python 融合 Pass 开发指南:支持运行时接入和
@pattern表达式写法。 - C++ 融合 Pass 开发指南:适合编译成
.so后产品化交付。
样例目录
| 目录 | 说明 |
|---|---|
| pattern_base_pass | 推荐优先参考。通过 PatternFusionPass 或 DecomposePass 开发 pattern 类融合规则 |
| graph_base_pass | 通过 graph 接口直接改图的样例,适合需要完全手动控制图修改的场景 |