| feat: 支持Python自定义Fusion Pass开发能力
Co-authored-by: kobemini<gengchao4@huawei.com>
# message auto-generated for no-merge-commit merge:
!1892 merge python_pass_f_0002 into develop
feat: 支持Python自定义Fusion Pass开发能力
Created-by: kobemini
Commit-by: kobemini
Merged-by: cann-robot
Description: 20260326评审通过
# Pull Request
## 描述
本PR引入GE Python自定义Fusion Pass开发能力(V1),使用户可以通过纯Python编写FusionBasePass并通过装饰器@register_fusion_pass注册,GE编译器在初始化阶段自动发现并执行Python pass。
### 核心设计
- **独立bridge .so架构**:将Python版本敏感逻辑(pybind11、Python.h、libpython)收敛到独立的libge_python_pass_bridge.so中,ge_compiler.so保持Python ABI中立
- **复用现有执行框架**:Python pass注册到现有PassRegistry,由FusionPassExecutor统一调度执行,不新建第二套调度体系
- **环境变量发现机制**:通过ASCEND_GE_PY_PASS_PATH指定pass文件/目录路径,编译器自动扫描加载
### 主要变更模块
**Python侧(新增 ge.passes 包)**
- base.py:三类pass的纯Python基类(FusionBasePass、PatternFusionPass、DecomposePass)及PassStage、PassContext等数据类
- registry.py:Python侧pass注册表,提供@register_fusion_pass装饰器
- bootstrap.py:插件发现入口,从ASCEND_GE_PY_PASS_PATH扫描加载pass模块
- _bridge.py:Python与C++ bridge的协议层,管理pass holder生命周期
**C++侧(新增+修改)**
- pass_plugin_loader:统一pass插件加载入口
- pass_registry:扩展全局注册表,新增PythonPassDescriptor、RegisterPythonPass等
- python_fusion_base_pass_adapter:Python pass的C++ adapter
- python_fusion_base_pass_bridge_c_api:Bridge SO的稳定C ABI
- python_fusion_base_pass_bridge_loader:Bridge SO的运行时加载器(dlopen/dlsym)
- python_fusion_base_pass_pybind_bridge:Bridge SO的pybind11实现(嵌入式Python解释器)
**构建系统**
- 新增ge_python_pass_bridge共享库目标
- 重构Python依赖查找逻辑,新增ge_python_embed INTERFACE目标
**初始化入口改造**
- ge_api_v2.cc、ge_ir_build.cc、ge_generator.cc:统一替换为LoadPassPlugins()/ShutdownPassPluginsForProcess()
**测试**
- 新增7个C++单元测试(adapter生命周期、pybind bridge端到端、TLS上下文等)
- 新增Python侧集成测试(bootstrap发现、holder创建运行销毁)
**文档**
- 新增详细设计文档docs/ge_python/design/ge_python_pass_design.md(约1650行)
## 变更类型
- [ ] Bug 修复
- [x] 新功能
- [ ] 代码风格更新
- [ ] 重构
- [ ] 构建过程或辅助工具的变动
- [x] 文档内容更新
## 如何测试
1. 编译ge_compiler组件:bash build.sh --ge_compiler
2. 编译运行UT测试:bash tests/run_test.sh --ut=ge
3. 重点验证UT用例:PythonFusionBasePass_Run_CreateExecuteDestroy、PythonFusionBasePass_Run_Failed、PythonFusionBasePass_PybindBridge_RunSuccess等
4. 验证Python侧测试:python_pass_bootstrap_test.py
## 核对清单
- [x] 我的代码遵循了项目的代码风格
- [x] 我已对代码进行了自测
- [x] 我已更新了相关的文档
- [x] 我在标题中使用了合适的类型标签(feat:)
- [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md)
## 其他信息
本PR为"GE Pass Python化 V1"功能的首次提交,仅支持FusionBasePass类型。PatternFusionPass和DecomposePass的桥接将在后续PR中实现。
See merge request: cann/ge!1892 | 1 个月前 |