| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix: 修复precommit误删的py引用 Co-authored-by: yelongjian<yelongjian1@huawei.com> # message auto-generated for no-merge-commit merge: !3885 merge dev-precommit0706 into develop fix: 修复precommit误删的py引用 Created-by: yelongjian Commit-by: yelongjian Merged-by: cann-robot Description: # Pull Request ## 描述 修复precommit误删的py引用 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1.NA ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/ge!3885 | 1 个月前 | |
feat:支持融合结果上报的 Python 化 Co-authored-by: lfz2812<220252399@seu.edu.cn> # message auto-generated for no-merge-commit merge: !4070 merge develop into develop feat:支持融合结果上报的 Python 化 Created-by: lfz2812 Commit-by: lfz2812 Merged-by: cann-robot Description: # Pull Request ## 描述 在 PR3996 完成 can_fuse Python 化的基础上,本 PR 继续补齐 GE 融合结果上报能力,使 Python 融合 Pass 能够完成融合可行性 检查、改图和融合结果上报的完整流程。 本次修改包括: 1. 新增 report_fuse Python native 绑定: - 接收融合前、融合后的 Python Node 可迭代对象。 - 统一将 Python Node 转换为 C++ GNode 集合。 - 调用 GraphFuseInspectorUtils::ReportFuse 上报融合结果。 - 上报失败时将错误信息写入 PassContext,并向 Python 抛出 RuntimeError。 - 在 ge.passes 中公开 report_fuse,并补充类型声明。 2. 为 SubgraphRewriter.replace 增加带 context 的调用方式: - 原有 SubgraphRewriter.replace(boundary, replacement) 行为保持不变。 - 新增 SubgraphRewriter.replace(boundary, replacement, context=context)。 - 传入 context 后,由底层自动完成融合可行性检查、子图替换和融合结果上报。 - 执行失败时将错误信息写入 PassContext,并向 Python 抛出 RuntimeError。 3. 支持两种 Python 融合 Pass 改图流程: - 传统直接改图方式:用户依次调用 can_fuse、自定义 Graph 改图接口和 report_fuse。 - 基于子图替换的方式:用户传入 context 调用 SubgraphRewriter.replace,由底层统一完成检查、替换和上报。 4. 优化 Python 与 native 层的职责划分: - 节点可迭代对象的遍历、类型校验和 GNode 转换统一在 native 层完成,避免 Python 与 native 重复处理。 - can_fuse 保留 Python 包装,用 FuseCheckResult 封装检查结果。 - report_fuse 无需适配返回值,直接重导出 native 实现。 5. 更新 Python 融合 Pass 样例: - move_relu_before_concat_pass 使用带 context 的 SubgraphRewriter.replace。 - modify_conv_data_format_pass 演示 can_fuse、直接改图、report_fuse 和旧节点删除的调用顺序。 - 同步更新相关中英文 README。 6. 补充接口和设计文档: - 新增 report_fuse API 文档。 - 更新 SubgraphRewriter.replace API 文档,说明传入和不传入 context 时的行为差异。 - 更新 GE Python 中英文设计文档和 API 索引。 7. 补充和更新测试: - 校验 report_fuse 非法 PassContext 入参。 - 验证 Python Pass 通过 pybind 调用 report_fuse。 - 验证带 context 的融合结果上报流程。 - 保留 can_fuse 正常、异常和边界场景覆盖。 调用示例: python from ge.passes import can_fuse, report_fuse # 传统直接改图方式 result = can_fuse(nodes_before) if not result.ok: context.set_error_message(result.reason) return False # 用户直接调用Graph接口完成自定义改图。 report_fuse(nodes_before, nodes_after, context) from ge.passes import SubgraphRewriter # 基于子图替换的方式 SubgraphRewriter.replace( boundary, replacement, context=context, ) ## 变更类型 - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue 关联 Issue:#299 ## 如何测试 1. 执行 Python UT: bash tests/run_test.sh --ut=python 2. 执行 ut_fusion_pass_executor_utest,验证 Python Pass 通过 pybind 调用 report_fuse,并检查 PythonFusionBasePass_PybindBridge_RunSuccess 用例。 3. 检查相关 Python 融合 Pass 样例和中英文文档。 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit 的合并等 ## 其他信息 - 原有 SubgraphRewriter.replace(boundary, replacement) 接口保持兼容。 - 传统直接改图场景必须在旧节点被删除或失效前调用 report_fuse。 - 本次仅新增 Python 融合结果上报和带 context 的标准化子图替换能力,不改变原有 Python Pass 注册及执行机制。 See merge request: cann/ge!4070 | 28 天前 | |
feat:支持融合结果上报的 Python 化 Co-authored-by: lfz2812<220252399@seu.edu.cn> # message auto-generated for no-merge-commit merge: !4070 merge develop into develop feat:支持融合结果上报的 Python 化 Created-by: lfz2812 Commit-by: lfz2812 Merged-by: cann-robot Description: # Pull Request ## 描述 在 PR3996 完成 can_fuse Python 化的基础上,本 PR 继续补齐 GE 融合结果上报能力,使 Python 融合 Pass 能够完成融合可行性 检查、改图和融合结果上报的完整流程。 本次修改包括: 1. 新增 report_fuse Python native 绑定: - 接收融合前、融合后的 Python Node 可迭代对象。 - 统一将 Python Node 转换为 C++ GNode 集合。 - 调用 GraphFuseInspectorUtils::ReportFuse 上报融合结果。 - 上报失败时将错误信息写入 PassContext,并向 Python 抛出 RuntimeError。 - 在 ge.passes 中公开 report_fuse,并补充类型声明。 2. 为 SubgraphRewriter.replace 增加带 context 的调用方式: - 原有 SubgraphRewriter.replace(boundary, replacement) 行为保持不变。 - 新增 SubgraphRewriter.replace(boundary, replacement, context=context)。 - 传入 context 后,由底层自动完成融合可行性检查、子图替换和融合结果上报。 - 执行失败时将错误信息写入 PassContext,并向 Python 抛出 RuntimeError。 3. 支持两种 Python 融合 Pass 改图流程: - 传统直接改图方式:用户依次调用 can_fuse、自定义 Graph 改图接口和 report_fuse。 - 基于子图替换的方式:用户传入 context 调用 SubgraphRewriter.replace,由底层统一完成检查、替换和上报。 4. 优化 Python 与 native 层的职责划分: - 节点可迭代对象的遍历、类型校验和 GNode 转换统一在 native 层完成,避免 Python 与 native 重复处理。 - can_fuse 保留 Python 包装,用 FuseCheckResult 封装检查结果。 - report_fuse 无需适配返回值,直接重导出 native 实现。 5. 更新 Python 融合 Pass 样例: - move_relu_before_concat_pass 使用带 context 的 SubgraphRewriter.replace。 - modify_conv_data_format_pass 演示 can_fuse、直接改图、report_fuse 和旧节点删除的调用顺序。 - 同步更新相关中英文 README。 6. 补充接口和设计文档: - 新增 report_fuse API 文档。 - 更新 SubgraphRewriter.replace API 文档,说明传入和不传入 context 时的行为差异。 - 更新 GE Python 中英文设计文档和 API 索引。 7. 补充和更新测试: - 校验 report_fuse 非法 PassContext 入参。 - 验证 Python Pass 通过 pybind 调用 report_fuse。 - 验证带 context 的融合结果上报流程。 - 保留 can_fuse 正常、异常和边界场景覆盖。 调用示例: python from ge.passes import can_fuse, report_fuse # 传统直接改图方式 result = can_fuse(nodes_before) if not result.ok: context.set_error_message(result.reason) return False # 用户直接调用Graph接口完成自定义改图。 report_fuse(nodes_before, nodes_after, context) from ge.passes import SubgraphRewriter # 基于子图替换的方式 SubgraphRewriter.replace( boundary, replacement, context=context, ) ## 变更类型 - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue 关联 Issue:#299 ## 如何测试 1. 执行 Python UT: bash tests/run_test.sh --ut=python 2. 执行 ut_fusion_pass_executor_utest,验证 Python Pass 通过 pybind 调用 report_fuse,并检查 PythonFusionBasePass_PybindBridge_RunSuccess 用例。 3. 检查相关 Python 融合 Pass 样例和中英文文档。 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit 的合并等 ## 其他信息 - 原有 SubgraphRewriter.replace(boundary, replacement) 接口保持兼容。 - 传统直接改图场景必须在旧节点被删除或失效前调用 report_fuse。 - 本次仅新增 Python 融合结果上报和带 context 的标准化子图替换能力,不改变原有 Python Pass 注册及执行机制。 See merge request: cann/ge!4070 | 28 天前 | |
feat: 新增4个融合pass样例 Co-authored-by: qq_45842700<caodazhou@huawei.com> # message auto-generated for no-merge-commit merge: !3999 merge feat/add-fusion-pass-examples into develop feat: 新增4个融合pass样例 Created-by: qq_45842700 Commit-by: qq_45842700 Merged-by: cann-robot Description: # Pull Request ## 描述 新增 4 个融合 pass 样例: - **graph_base_pass/4_mmoe_bmm_split_pass**:基于 REGISTER_CUSTOM_PASS 注册,针对 MMOE 网络非首层多个同源 MatMul,通过 Pack + BatchMatMulV2 + Split + Squeeze 合并为批量矩阵乘法 - **graph_base_pass/5_mmoe_matmul_pass**:基于 REGISTER_CUSTOM_PASS 注册,针对 MMOE 网络首层多个同源 MatMul,通过 Concat + MatMul + SplitV 合并为单个大尺寸 MatMul - **pattern_base_pass/8_bmm_tile_pass**:基于 PatternFusionPass 注册,消除共享权重场景下冗余的 Tile 算子,利用 BatchMatMulV2 首维广播能力替代显式数据扩展 - **pattern_base_pass/9_bmm_to_mul_reduce_pass**:基于 PatternFusionPass 注册,将 n=1 且 k<=16 的 BatchMatMulV2 改写为 Mul + ReduceSumD,利用 vector 单元提升性能 ## 变更类型 - [x] ✨ 新功能 - [x] 📝 文档内容更新 ## 关联的Issue ## 如何测试 1. 进入各 pass 的 cpp 目录,执行 mkdir build && cd build && cmake .. && make 验证编译通过 2. 执行 make install 安装 pass so,使用 quick_verify.sh 脚本验证融合效果 3. 执行 make clean_custom_pass 清理安装的 pass so ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定 ## 其他信息 4 个样例覆盖 graph_base_pass 和 pattern_base_pass 两种注册方式,均提供 C++ 源码、CMakeLists、中英文 README、ONNX 生成脚本和一键验证脚本。 See merge request: cann/ge!3999 | 1 个月前 | |
feat: 新增4个融合pass样例 Co-authored-by: qq_45842700<caodazhou@huawei.com> # message auto-generated for no-merge-commit merge: !3999 merge feat/add-fusion-pass-examples into develop feat: 新增4个融合pass样例 Created-by: qq_45842700 Commit-by: qq_45842700 Merged-by: cann-robot Description: # Pull Request ## 描述 新增 4 个融合 pass 样例: - **graph_base_pass/4_mmoe_bmm_split_pass**:基于 REGISTER_CUSTOM_PASS 注册,针对 MMOE 网络非首层多个同源 MatMul,通过 Pack + BatchMatMulV2 + Split + Squeeze 合并为批量矩阵乘法 - **graph_base_pass/5_mmoe_matmul_pass**:基于 REGISTER_CUSTOM_PASS 注册,针对 MMOE 网络首层多个同源 MatMul,通过 Concat + MatMul + SplitV 合并为单个大尺寸 MatMul - **pattern_base_pass/8_bmm_tile_pass**:基于 PatternFusionPass 注册,消除共享权重场景下冗余的 Tile 算子,利用 BatchMatMulV2 首维广播能力替代显式数据扩展 - **pattern_base_pass/9_bmm_to_mul_reduce_pass**:基于 PatternFusionPass 注册,将 n=1 且 k<=16 的 BatchMatMulV2 改写为 Mul + ReduceSumD,利用 vector 单元提升性能 ## 变更类型 - [x] ✨ 新功能 - [x] 📝 文档内容更新 ## 关联的Issue ## 如何测试 1. 进入各 pass 的 cpp 目录,执行 mkdir build && cd build && cmake .. && make 验证编译通过 2. 执行 make install 安装 pass so,使用 quick_verify.sh 脚本验证融合效果 3. 执行 make clean_custom_pass 清理安装的 pass so ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定 ## 其他信息 4 个样例覆盖 graph_base_pass 和 pattern_base_pass 两种注册方式,均提供 C++ 源码、CMakeLists、中英文 README、ONNX 生成脚本和一键验证脚本。 See merge request: cann/ge!3999 | 1 个月前 | |
fix: fix GraphNodeSettedFormatPass code data Co-authored-by: lushiming0<lushiming1@h-partners.com> # message auto-generated for no-merge-commit merge: !4442 merge lsmge_20260818 into develop fix: fix GraphNodeSettedFormatPass code data Created-by: lushiming0 Commit-by: lushiming0 Merged-by: cann-robot Description: # Pull Request ## 描述 修复 GraphNodeSettedFormatPass 的代码位置和资料中的一些错误描述。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. GraphNodeSettedFormatPass 测试方法相同,构造图,修改 format。 2. 通过 dump 图检查修改是否符合预期。 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/ge!4442 | 1 天前 | |
fix: fix GraphNodeSettedFormatPass code data Co-authored-by: lushiming0<lushiming1@h-partners.com> # message auto-generated for no-merge-commit merge: !4442 merge lsmge_20260818 into develop fix: fix GraphNodeSettedFormatPass code data Created-by: lushiming0 Commit-by: lushiming0 Merged-by: cann-robot Description: # Pull Request ## 描述 修复 GraphNodeSettedFormatPass 的代码位置和资料中的一些错误描述。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. GraphNodeSettedFormatPass 测试方法相同,构造图,修改 format。 2. 通过 dump 图检查修改是否符合预期。 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/ge!4442 | 1 天前 | |
fix: fix GraphNodeSettedFormatPass code data Co-authored-by: lushiming0<lushiming1@h-partners.com> # message auto-generated for no-merge-commit merge: !4442 merge lsmge_20260818 into develop fix: fix GraphNodeSettedFormatPass code data Created-by: lushiming0 Commit-by: lushiming0 Merged-by: cann-robot Description: # Pull Request ## 描述 修复 GraphNodeSettedFormatPass 的代码位置和资料中的一些错误描述。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. GraphNodeSettedFormatPass 测试方法相同,构造图,修改 format。 2. 通过 dump 图检查修改是否符合预期。 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/ge!4442 | 1 天前 |
融合Pass样例
本目录提供了继承GE提供的类并重写其方法来实现自定义融合pass的相关样例:
| 样例 | 样例链接 |
|---|---|
| MatMul+Add融合为GEMM自定义pass样例 | README |
| 移动Concat后ReLu至Concat前的自定义pass样例 | README |
| 移动Concat后ReLu至Concat前的自定义pass样例(Python 版本) | README |
| 修改卷积算子data format的自定义pass样例 | README |
| 修改卷积算子data format的自定义pass样例(Python 版本) | README |
| MMOE网络MatMul融合(Pack+BatchMatMulV2+Split)自定义pass样例 | README |
| MMOE网络首层MatMul融合(Concat+MatMul+SplitV)自定义pass样例 | README |
| Data+Transpose融合(NCHW→NHWC)及ExtendConv2D+Transpose融合的自定义pass样例 | README |
开发指南
如果要开发基于 pattern 匹配的融合 pass,推荐先阅读: