| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat: 支持Python自定义算子execute能力反射 Co-authored-by: kobemini<gengchao4@huawei.com> # message auto-generated for no-merge-commit merge: !4240 merge feat/python-custom-op-execute-reflection into develop feat: 支持Python自定义算子execute能力反射 Created-by: kobemini Commit-by: kobemini Merged-by: cann-robot Description: # Pull Request ## 描述 本 PR 完成 Python 自定义算子 execute 能力反射,并收敛 schema-bound execute 所需的 IR 元数据获取链路。 主要变更: - 注册阶段根据实现类上是否存在可调用的 execute 方法生成 eager_execute 接口描述,不再强制用户类继承 Python 自定义算子基类; - bridge holder 支持持有普通 Python 对象,并在调用前校验 execute 是否可调用; - 保留 BaseCustomOp 和 EagerExecuteOp,兼容现有继承方式以及 execute(ctx) 写法; - schema-bound execute 示例改为普通 Python 类实现,并移除不必要的继承; - 将 canonical IR 元数据收集从 custom_op_runtime 迁移至 Python bridge,通过 run 包正式公共接口 GetRegisteredIrDef 获取并在 bridge holder 中缓存; - 删除 runtime/bridge callback 间的私有 IR POD 投影,execute callback 恢复为 holder + ctx; - bridge 使用公开头文件约束 GetRegisteredIrDef 签名,通过 RTLD_NOLOAD 获取已加载的 runner handle 后调用 dlsym,兼容 RTLD_LOCAL 加载且不提升 runner 全局可见性,同时避免反向硬链接形成循环 SO 依赖; - 同步更新中英文设计文档及相关单元测试。 反射产生的接口描述仍为 eager_execute,现有 capability mask 映射和 CustomOpCast 过滤逻辑保持不变;EagerOpExecutionContext 未修改,bridge ABI 版本保持为 1。 ## 变更类型 - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [x] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [x] 📝 文档内容更新 ## 关联的Issue 无。 ## 如何测试 1. pre-commit 检查全部通过。 2. ge_python_custom_op_bridge 目标使用 -j4 构建通过。 3. ut_libge_multiparts_utest 目标使用 -j4 构建通过;相关 C++ 用例 5 个全部通过。 4. tests/ge/ut/ge/graph/pyge_tests/python_custom_op_test.py:38 passed。 5. ge_python_main_wheel 目标使用 -j4 构建通过,wheel 中 custom-op bridge SO 与编译产物一致。 6. 动态依赖检查确认 custom-op bridge 不直接依赖 libge_runner.so 或 libge_runner_v2.so。 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的中英文文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于 commit message 的格式、无效 commit 的合并等 ## 其他信息 本次 collector 迁移使用 run 包正式公共 API,不再维护 custom_op_runtime 与 Python bridge 之间的私有 IR 数据结构协议。 See merge request: cann/ge!4240 | 13 天前 | |
fix: 修复aclop与图模式混跑时Python Custom Op资源被提前释放的问题 Co-authored-by: qq_45842700<caodazhou@huawei.com> # message auto-generated for no-merge-commit merge: !4284 merge fix/custom-op-lifecycle into develop fix: 修复aclop与图模式混跑时Python Custom Op资源被提前释放的问题 Created-by: qq_45842700 Commit-by: qq_45842700 Merged-by: cann-robot Description: # Pull Request ## 描述 PR #4243 修复了 aclop 与图模式混跑时自定义 Pass 资源被提前释放的问题,但同一 GeGenerator::Finalize() 路径中 ShutdownCustomOpsForProcess() 仍被无条件调用,导致 Python Custom Op 存在同类生命周期缺陷(Issue #505)。 本 PR 参照 PR #4243 对 Pass 的修复方式,为 CustomOpLoader 引入 active_users_ 引用计数。 ### 核心修改 1. **runtime/custom_op/custom_op_loader.cc**:引入 active_users_ 引用计数 - Load():每次调用 active_users_++,首次(active_users_ == 0)才真正加载;同时重置 shutdown_done_ = false 以支持 reload 后完整 shutdown - Unload():每次调用 active_users_--,仅当 active_users_ 归零时才执行卸载(UnloadPythonCustomOps + ShutdownPythonCustomOpsForProcess) - 保留 ShutdownCustomOpsForProcess() 作为兼容 wrapper,内部调用 Unload() - 新增 cpp_custom_ops_loaded_ 标志和 RollbackCustomOpsLoad() 回滚方法 2. **调用点替换**(4 个文件):将 ShutdownCustomOpsForProcess() 替换为 UnloadCustomOps() - compiler/api/generator/ge_generator.cc:510(aclop 路径,最关键) - api/session/client/ge_api_v2.cc:267,405(GEInitialize guard + GEFinalize) - compiler/api/aclgrph/ge_ir_build.cc:443,490(aclgrphBuildInitialize guard + aclgrphBuildFinalize) - api/atc/main_impl.cc:2383(ATC 清理路径) ## 变更类型 - [x] 🐛 Bug 修复 ## 关联的Issue - Issue #505 - PR #4243(Pass 同类修复) ## 如何测试 ### Bug 复现条件 在同一 Python 进程内: 1. Phase 1:GEInitialize → Session.add_graph(含 Python Custom Op)→ Session.run_graph → Custom Op execute 成功 2. Phase 2:torch_npu.npu.set_compile_mode(jit_compile=True) → 执行 matmul 等 NPU 单算子 → aclop 创建临时 GeGenerator → Finalize → ShutdownCustomOpsForProcess 3. Phase 3:Session.run_graph(同一已编译图)→ Custom Op 裸指针悬空 ### 修复前 Phase 3 SIGSEGV (exit code 139),Custom Op 被 aclop Finalize 卸载后悬空指针导致段错误。 ### 修复后 - Phase 1:Custom Op 正常加载执行 ✅ - Phase 2:aclop 编译成功 ✅ - Phase 3:Custom Op 仍正常执行 ✅(不再崩溃) - 引用计数日志:LoadCustomOps active_users_=1 → =2(aclop Load)→ =1(aclop Unload,不卸载)→ =0(GEFinalize,真正卸载) ### 测试环境 - Ascend 910, CANN 9.2.0, Python 3.12 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我在标题中使用了合适的类型标签(fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定 ## 其他信息 修复方案完全对齐 PR #4243 对 Pass 的修复模式(active_users_ 引用计数),改动量小、风险可控。Pass 和 Custom Op 的修复模式一致,便于后续维护。 See merge request: cann/ge!4284 | 7 天前 | |
fix: 修复aclop与图模式混跑时Python Custom Op资源被提前释放的问题 Co-authored-by: qq_45842700<caodazhou@huawei.com> # message auto-generated for no-merge-commit merge: !4284 merge fix/custom-op-lifecycle into develop fix: 修复aclop与图模式混跑时Python Custom Op资源被提前释放的问题 Created-by: qq_45842700 Commit-by: qq_45842700 Merged-by: cann-robot Description: # Pull Request ## 描述 PR #4243 修复了 aclop 与图模式混跑时自定义 Pass 资源被提前释放的问题,但同一 GeGenerator::Finalize() 路径中 ShutdownCustomOpsForProcess() 仍被无条件调用,导致 Python Custom Op 存在同类生命周期缺陷(Issue #505)。 本 PR 参照 PR #4243 对 Pass 的修复方式,为 CustomOpLoader 引入 active_users_ 引用计数。 ### 核心修改 1. **runtime/custom_op/custom_op_loader.cc**:引入 active_users_ 引用计数 - Load():每次调用 active_users_++,首次(active_users_ == 0)才真正加载;同时重置 shutdown_done_ = false 以支持 reload 后完整 shutdown - Unload():每次调用 active_users_--,仅当 active_users_ 归零时才执行卸载(UnloadPythonCustomOps + ShutdownPythonCustomOpsForProcess) - 保留 ShutdownCustomOpsForProcess() 作为兼容 wrapper,内部调用 Unload() - 新增 cpp_custom_ops_loaded_ 标志和 RollbackCustomOpsLoad() 回滚方法 2. **调用点替换**(4 个文件):将 ShutdownCustomOpsForProcess() 替换为 UnloadCustomOps() - compiler/api/generator/ge_generator.cc:510(aclop 路径,最关键) - api/session/client/ge_api_v2.cc:267,405(GEInitialize guard + GEFinalize) - compiler/api/aclgrph/ge_ir_build.cc:443,490(aclgrphBuildInitialize guard + aclgrphBuildFinalize) - api/atc/main_impl.cc:2383(ATC 清理路径) ## 变更类型 - [x] 🐛 Bug 修复 ## 关联的Issue - Issue #505 - PR #4243(Pass 同类修复) ## 如何测试 ### Bug 复现条件 在同一 Python 进程内: 1. Phase 1:GEInitialize → Session.add_graph(含 Python Custom Op)→ Session.run_graph → Custom Op execute 成功 2. Phase 2:torch_npu.npu.set_compile_mode(jit_compile=True) → 执行 matmul 等 NPU 单算子 → aclop 创建临时 GeGenerator → Finalize → ShutdownCustomOpsForProcess 3. Phase 3:Session.run_graph(同一已编译图)→ Custom Op 裸指针悬空 ### 修复前 Phase 3 SIGSEGV (exit code 139),Custom Op 被 aclop Finalize 卸载后悬空指针导致段错误。 ### 修复后 - Phase 1:Custom Op 正常加载执行 ✅ - Phase 2:aclop 编译成功 ✅ - Phase 3:Custom Op 仍正常执行 ✅(不再崩溃) - 引用计数日志:LoadCustomOps active_users_=1 → =2(aclop Load)→ =1(aclop Unload,不卸载)→ =0(GEFinalize,真正卸载) ### 测试环境 - Ascend 910, CANN 9.2.0, Python 3.12 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我在标题中使用了合适的类型标签(fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定 ## 其他信息 修复方案完全对齐 PR #4243 对 Pass 的修复模式(active_users_ 引用计数),改动量小、风险可控。Pass 和 Custom Op 的修复模式一致,便于后续维护。 See merge request: cann/ge!4284 | 7 天前 | |
feat: 自定义算子 AnnotatedArgsOp 地址刷新接口 Python 化 Co-authored-by: shangdf<shangdongfang1@huawei.com> # message auto-generated for no-merge-commit merge: !4254 merge feature/address-refresh-pythonization-pr into develop feat: 自定义算子 AnnotatedArgsOp 地址刷新接口 Python 化 Created-by: shangdf Commit-by: shangdf Merged-by: cann-robot Description: # Pull Request ## 描述 完成 AnnotatedArgsOp 地址刷新接口 Python 化。本 PR 仅保留核心实现与测试: - Python 自定义算子通过 schema-bound declare_launch_args 生成 AnnotatedArgs TaskDef。 - 提供 AnnotatedArgsContext、Tensor、workspace、kernel args builder 等 Python 包装,覆盖作用域、签名校验、异常转换和 builder 消费语义。 - 编译期把最终选定的参数刷新方式写入 OpDesc 属性 _custom_task_args_mode;模型加载时以该显式模式为准。没有该属性的旧 OM 才使用 registry 查询和 args_format 兼容兜底。 - Python custom-op bridge C ABI 保持 v1;模型运行期只消费序列化模式和 TaskDef,不回调 Python。 - 提供显式 CustomTaskArgsMode,编译期记录最终刷新方式,运行期优先按该模式选择路径并兼容老 OM。 - 补充 Python、native binding、compiler builder 和静态模型加载路径的 UT/ST。 资料和可运行 example 已拆分至 PR 4316,本 PR 最终 diff 不再包含 docs/ 或 examples/: - https://gitcode.com/cann/ge/pull/4316 本 PR 直接复用 develop 已合入的两个前置任务,不再重复实现: - append_input / append_output 使用 input/output 实例平铺 index。 - workspace 使用两阶段申请及 task plan 缓存,后续任务物化复用缓存,不重复调用声明 callback。 ## 变更类型 - [x] ✨ 新功能 - [ ] ♻️ 无关重构 - [x] 📦 构建过程或辅助工具变动 - [ ] 📝 文档更新(已拆分到 PR 4316) ## 关联 Issue 无。 ## 验证结果 - 最新 develop 增量编译:ut_libge_multiparts_utest、graph_engine_test 构建通过。 - pre-commit:全部通过(clang-format、ruff、codespell、OAT 等)。 - C++ UT:2653 passed, 8 skipped。 - Python UT:651 passed, 1 skipped。 - Python AnnotatedArgs ST:5/5 通过,包含真实 Python -> pybind -> C++ callback 链路及异常分支校验。 - ASAN 定向用例:1/1 通过。 - build_fwk.sh 在 ASAN LD_PRELOAD 环境下的子进程 gcc 探测通过。 - 功能开发阶段已使用拆分前的相同核心实现和 example 完成 910B3 两轮真实 NPU 地址刷新验证;example 后续验证由 PR 4316 承载。 ## 核对清单 - [x] 代码遵循项目风格 - [x] 已补充并执行自测 - [x] 中英文文档已拆分到关联 PR 4316 - [x] 按要求保留 [wip] 标记 - [x] 已阅读并遵守贡献指南 ## 本轮检视修复 - 增加稳定序列化枚举 CustomTaskArgsMode,显式区分 None、AnnotatedArgs 和 UpdateCallback,保留旧 OM 兼容路径。 - 恢复原有不可调用方法的注册行为,避免无关语义变化。 - bridge ABI 保持 v1,统一 context import,签名校验函数改名为 _validate_args_signature。 - 移除通用 engine/known-shape 文档中的 Python 特例及过程性文档;长期资料和 example 已拆分到 PR 4316。 - input/output instance index 越界异常输出实际索引和实例数量,并由端到端 Python callback 用例覆盖。 - 修复 ASAN 环境下 gcc 子进程继承 LD_PRELOAD 导致 Python CI 在 pytest 前退出的问题。 - 同步最新 develop 的 Python 自定义算子原型类型定义和 workspace 两阶段申请逻辑,PR 冲突已消除。 See merge request: cann/ge!4254 | 6 天前 | |
feat: 自定义算子 AnnotatedArgsOp 地址刷新接口 Python 化 Co-authored-by: shangdf<shangdongfang1@huawei.com> # message auto-generated for no-merge-commit merge: !4254 merge feature/address-refresh-pythonization-pr into develop feat: 自定义算子 AnnotatedArgsOp 地址刷新接口 Python 化 Created-by: shangdf Commit-by: shangdf Merged-by: cann-robot Description: # Pull Request ## 描述 完成 AnnotatedArgsOp 地址刷新接口 Python 化。本 PR 仅保留核心实现与测试: - Python 自定义算子通过 schema-bound declare_launch_args 生成 AnnotatedArgs TaskDef。 - 提供 AnnotatedArgsContext、Tensor、workspace、kernel args builder 等 Python 包装,覆盖作用域、签名校验、异常转换和 builder 消费语义。 - 编译期把最终选定的参数刷新方式写入 OpDesc 属性 _custom_task_args_mode;模型加载时以该显式模式为准。没有该属性的旧 OM 才使用 registry 查询和 args_format 兼容兜底。 - Python custom-op bridge C ABI 保持 v1;模型运行期只消费序列化模式和 TaskDef,不回调 Python。 - 提供显式 CustomTaskArgsMode,编译期记录最终刷新方式,运行期优先按该模式选择路径并兼容老 OM。 - 补充 Python、native binding、compiler builder 和静态模型加载路径的 UT/ST。 资料和可运行 example 已拆分至 PR 4316,本 PR 最终 diff 不再包含 docs/ 或 examples/: - https://gitcode.com/cann/ge/pull/4316 本 PR 直接复用 develop 已合入的两个前置任务,不再重复实现: - append_input / append_output 使用 input/output 实例平铺 index。 - workspace 使用两阶段申请及 task plan 缓存,后续任务物化复用缓存,不重复调用声明 callback。 ## 变更类型 - [x] ✨ 新功能 - [ ] ♻️ 无关重构 - [x] 📦 构建过程或辅助工具变动 - [ ] 📝 文档更新(已拆分到 PR 4316) ## 关联 Issue 无。 ## 验证结果 - 最新 develop 增量编译:ut_libge_multiparts_utest、graph_engine_test 构建通过。 - pre-commit:全部通过(clang-format、ruff、codespell、OAT 等)。 - C++ UT:2653 passed, 8 skipped。 - Python UT:651 passed, 1 skipped。 - Python AnnotatedArgs ST:5/5 通过,包含真实 Python -> pybind -> C++ callback 链路及异常分支校验。 - ASAN 定向用例:1/1 通过。 - build_fwk.sh 在 ASAN LD_PRELOAD 环境下的子进程 gcc 探测通过。 - 功能开发阶段已使用拆分前的相同核心实现和 example 完成 910B3 两轮真实 NPU 地址刷新验证;example 后续验证由 PR 4316 承载。 ## 核对清单 - [x] 代码遵循项目风格 - [x] 已补充并执行自测 - [x] 中英文文档已拆分到关联 PR 4316 - [x] 按要求保留 [wip] 标记 - [x] 已阅读并遵守贡献指南 ## 本轮检视修复 - 增加稳定序列化枚举 CustomTaskArgsMode,显式区分 None、AnnotatedArgs 和 UpdateCallback,保留旧 OM 兼容路径。 - 恢复原有不可调用方法的注册行为,避免无关语义变化。 - bridge ABI 保持 v1,统一 context import,签名校验函数改名为 _validate_args_signature。 - 移除通用 engine/known-shape 文档中的 Python 特例及过程性文档;长期资料和 example 已拆分到 PR 4316。 - input/output instance index 越界异常输出实际索引和实例数量,并由端到端 Python callback 用例覆盖。 - 修复 ASAN 环境下 gcc 子进程继承 LD_PRELOAD 导致 Python CI 在 pytest 前退出的问题。 - 同步最新 develop 的 Python 自定义算子原型类型定义和 workspace 两阶段申请逻辑,PR 冲突已消除。 See merge request: cann/ge!4254 | 6 天前 | |
feat: 支持 Python 自定义算子桥接加载 Co-authored-by: du-hua1024<duhua2@huawei.com> # message auto-generated for no-merge-commit merge: !3974 merge op-cpp into develop feat: 支持 Python 自定义算子桥接加载 Created-by: du-hua1024 Commit-by: du-hua1024 Merged-by: cann-robot Description: # Pull Request ## 描述 支持 Python 自定义算子在编译与执行链路中的桥接加载和注册。主要变更如下: 1. 新增 runtime/custom_op 自定义算子加载能力,包括 custom op loader、Python bridge loader、pybind bridge 和桥接 C API。 2. 在 ATC、session、compiler、runtime v1 等入口接入 Python 自定义算子加载流程,覆盖编译前加载与执行侧注册。 3. 将 Python artifact 选择逻辑迁移到 base/common/python_runtime,新增通用 python_bridge_loader_utils.h,复用 Python bridge 动态加载能力。 4. 扩展 graph_metadef 自定义算子 factory/registry 能力,并调整 Python pass fallback、fusion pass loader 等相关调用。 5. 补充和调整 Python runtime artifact、fusion pass executor、custom op factory 相关 UT 构建与用例。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧“关联Issue”部分添加相应Issue链接,并勾选“合并后关闭已关联的 Issue”选项。 --> 未关联 Issue。 ## 如何测试 新增及历史UT ST任务正常执行 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 See merge request: cann/ge!3974 | 1 个月前 | |
fix: 区分自定义算子路径stat失败处理 Co-authored-by: du-hua1024<duhua2@huawei.com> # message auto-generated for no-merge-commit merge: !4144 merge develop into develop fix: 区分自定义算子路径stat失败处理 Created-by: du-hua1024 Commit-by: du-hua1024 Merged-by: cann-robot Description: # Pull Request ## 描述 修复 Python 自定义算子入口扫描时对 ASCEND_CUSTOM_OPP_PATH 中不可访问路径的一刀切失败处理: - 当不可访问路径是 .py 文件时,打印 ERROR 日志并返回 FAILED,明确暴露 Python 自定义算子入口缺失问题 - 当不可访问路径不是 Python 文件时,仅打印 WARNING 日志并继续扫描,避免 .so 等非 Python 自定义算子路径影响 Python 自定义算子加载判断 - 更新 ST 用例,覆盖缺失非 Python 路径跳过场景 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue 无 ## 如何测试 1. git diff --check -- runtime/custom_op/python_custom_op_bridge_loader.cc tests/ge/st/testcase/test_custom_op.cc 2. cmake --build cmake-build-debug --target graph_engine_test -j8 3. cmake-build-debug/tests/ge/st/testcase/graph_engine_test --gtest_filter="CustomOpFactoryStTest.load_python_custom_ops_if_needed_fails_for_missing_python_file:CustomOpFactoryStTest.check_need_load_python_custom_ops_skips_missing_non_python_path" --gtest_output=xml:/tmp/custom_op_loader_missing_path.xml ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档(本次行为与现有说明一致,无需额外文档变更) - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 PR 仅涉及 Python custom-op loader 对不可访问路径的分类处理,以及对应 ST 期望更新。 See merge request: cann/ge!4144 | 21 天前 | |
fix: 修复Python自定义算子和自定义pass加载失败清理 Co-authored-by: du-hua1024<duhua2@huawei.com> # message auto-generated for no-merge-commit merge: !3850 merge develop into develop fix: 修复Python自定义算子和自定义pass加载失败清理 Created-by: du-hua1024 Commit-by: du-hua1024 Merged-by: cann-robot Description: # Pull Request ## 描述 修复 Python 自定义算子和 Python 自定义融合 pass 在加载失败路径上的错误处理与资源清理问题,避免无效环境变量被静默忽略、加载失败后遗留半初始化状态,以及 Python runtime finalizing 阶段因 pybind 对象未清理导致 core。 ## 问题及修改方案 1. ASCEND_CUSTOM_OPP_PATH 中存在无效路径时,Python 自定义算子入口探测原先 stat 失败只返回 false,导致 LoadCustomOps 跳过 Python 加载,和 Python pass 的失败语义不一致。 修改方案:将探测接口调整为 CheckNeedLoadPythonCustomOps(bool &need_load),非空路径项 stat 失败统一返回 FAILED;已有普通 .py 文件、Python 包或一级 .py 文件仍判定为需要加载;已有非 Python 文件不作为 Python 入口加载。 2. Python 自定义算子加载失败后只返回错误,可能留下已注册或半初始化的 Python custom op 状态,随后失败路径关闭 Python runtime 时,可能在 CPython finalizing 阶段因残留 pybind 对象触发 core。 修改方案:在 LoadPythonCustomOps 失败路径调用 RollbackPythonCustomOpsLoad(),执行 UnloadPythonCustomOps() 并复位 python_custom_ops_loaded_。 3. Python 自定义 pass 注册重名或加载异常时,RegisterPythonPassesFromPlugin() 返回失败但 pass bridge/module 未回滚;随后 GEInitialize、IR build 或 ATC 失败路径关闭 Python runtime 时,可能在 CPython finalizing 阶段因残留 pybind 对象触发 core。 修改方案:pass 加载失败时调用 RollbackPythonPassesLoad();GEInitialize、aclgrphBuildInitialize 和 ATC 主流程失败清理中按 ShutdownPassPluginsForProcess() -> ShutdownCustomOpsForProcess() -> ShutdownProcess() 顺序释放。 4. ir_build_so_in_om_multi_customize_priroity 测试修改 ASCEND_CUSTOM_OPP_PATH 后未恢复,且 setenv(..., 0) 可能受外部环境影响。 修改方案:测试保存并恢复原始 ASCEND_CUSTOM_OPP_PATH,设置测试路径时允许覆盖。 ## 变更类型 - [x] Bug 修复 - [ ] 新功能 - [ ] 代码风格更新 - [ ] 重构 - [ ] 构建过程或辅助工具的变动 - [ ] 文档内容更新 ## 关联的Issue 无 ## 如何测试 - 使用重名python 自定义pass、自定义算子,正常失败退出,没有core dump - 自定义算子环境变量设置非法路径、文件时,显示报错 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档:本次为加载失败路径修复,未新增公开接口说明 - [x] 我在标题中使用了合适的类型标签 - [x] 我已经详细阅读了贡献指南,并遵守了其中的提交要求 ## 其他信息 See merge request: cann/ge!3850 | 23 天前 | |
feat: 自定义算子 AnnotatedArgsOp 地址刷新接口 Python 化 Co-authored-by: shangdf<shangdongfang1@huawei.com> # message auto-generated for no-merge-commit merge: !4254 merge feature/address-refresh-pythonization-pr into develop feat: 自定义算子 AnnotatedArgsOp 地址刷新接口 Python 化 Created-by: shangdf Commit-by: shangdf Merged-by: cann-robot Description: # Pull Request ## 描述 完成 AnnotatedArgsOp 地址刷新接口 Python 化。本 PR 仅保留核心实现与测试: - Python 自定义算子通过 schema-bound declare_launch_args 生成 AnnotatedArgs TaskDef。 - 提供 AnnotatedArgsContext、Tensor、workspace、kernel args builder 等 Python 包装,覆盖作用域、签名校验、异常转换和 builder 消费语义。 - 编译期把最终选定的参数刷新方式写入 OpDesc 属性 _custom_task_args_mode;模型加载时以该显式模式为准。没有该属性的旧 OM 才使用 registry 查询和 args_format 兼容兜底。 - Python custom-op bridge C ABI 保持 v1;模型运行期只消费序列化模式和 TaskDef,不回调 Python。 - 提供显式 CustomTaskArgsMode,编译期记录最终刷新方式,运行期优先按该模式选择路径并兼容老 OM。 - 补充 Python、native binding、compiler builder 和静态模型加载路径的 UT/ST。 资料和可运行 example 已拆分至 PR 4316,本 PR 最终 diff 不再包含 docs/ 或 examples/: - https://gitcode.com/cann/ge/pull/4316 本 PR 直接复用 develop 已合入的两个前置任务,不再重复实现: - append_input / append_output 使用 input/output 实例平铺 index。 - workspace 使用两阶段申请及 task plan 缓存,后续任务物化复用缓存,不重复调用声明 callback。 ## 变更类型 - [x] ✨ 新功能 - [ ] ♻️ 无关重构 - [x] 📦 构建过程或辅助工具变动 - [ ] 📝 文档更新(已拆分到 PR 4316) ## 关联 Issue 无。 ## 验证结果 - 最新 develop 增量编译:ut_libge_multiparts_utest、graph_engine_test 构建通过。 - pre-commit:全部通过(clang-format、ruff、codespell、OAT 等)。 - C++ UT:2653 passed, 8 skipped。 - Python UT:651 passed, 1 skipped。 - Python AnnotatedArgs ST:5/5 通过,包含真实 Python -> pybind -> C++ callback 链路及异常分支校验。 - ASAN 定向用例:1/1 通过。 - build_fwk.sh 在 ASAN LD_PRELOAD 环境下的子进程 gcc 探测通过。 - 功能开发阶段已使用拆分前的相同核心实现和 example 完成 910B3 两轮真实 NPU 地址刷新验证;example 后续验证由 PR 4316 承载。 ## 核对清单 - [x] 代码遵循项目风格 - [x] 已补充并执行自测 - [x] 中英文文档已拆分到关联 PR 4316 - [x] 按要求保留 [wip] 标记 - [x] 已阅读并遵守贡献指南 ## 本轮检视修复 - 增加稳定序列化枚举 CustomTaskArgsMode,显式区分 None、AnnotatedArgs 和 UpdateCallback,保留旧 OM 兼容路径。 - 恢复原有不可调用方法的注册行为,避免无关语义变化。 - bridge ABI 保持 v1,统一 context import,签名校验函数改名为 _validate_args_signature。 - 移除通用 engine/known-shape 文档中的 Python 特例及过程性文档;长期资料和 example 已拆分到 PR 4316。 - input/output instance index 越界异常输出实际索引和实例数量,并由端到端 Python callback 用例覆盖。 - 修复 ASAN 环境下 gcc 子进程继承 LD_PRELOAD 导致 Python CI 在 pytest 前退出的问题。 - 同步最新 develop 的 Python 自定义算子原型类型定义和 workspace 两阶段申请逻辑,PR 冲突已消除。 See merge request: cann/ge!4254 | 6 天前 | |
feat: 自定义算子 AnnotatedArgsOp 地址刷新接口 Python 化 Co-authored-by: shangdf<shangdongfang1@huawei.com> # message auto-generated for no-merge-commit merge: !4254 merge feature/address-refresh-pythonization-pr into develop feat: 自定义算子 AnnotatedArgsOp 地址刷新接口 Python 化 Created-by: shangdf Commit-by: shangdf Merged-by: cann-robot Description: # Pull Request ## 描述 完成 AnnotatedArgsOp 地址刷新接口 Python 化。本 PR 仅保留核心实现与测试: - Python 自定义算子通过 schema-bound declare_launch_args 生成 AnnotatedArgs TaskDef。 - 提供 AnnotatedArgsContext、Tensor、workspace、kernel args builder 等 Python 包装,覆盖作用域、签名校验、异常转换和 builder 消费语义。 - 编译期把最终选定的参数刷新方式写入 OpDesc 属性 _custom_task_args_mode;模型加载时以该显式模式为准。没有该属性的旧 OM 才使用 registry 查询和 args_format 兼容兜底。 - Python custom-op bridge C ABI 保持 v1;模型运行期只消费序列化模式和 TaskDef,不回调 Python。 - 提供显式 CustomTaskArgsMode,编译期记录最终刷新方式,运行期优先按该模式选择路径并兼容老 OM。 - 补充 Python、native binding、compiler builder 和静态模型加载路径的 UT/ST。 资料和可运行 example 已拆分至 PR 4316,本 PR 最终 diff 不再包含 docs/ 或 examples/: - https://gitcode.com/cann/ge/pull/4316 本 PR 直接复用 develop 已合入的两个前置任务,不再重复实现: - append_input / append_output 使用 input/output 实例平铺 index。 - workspace 使用两阶段申请及 task plan 缓存,后续任务物化复用缓存,不重复调用声明 callback。 ## 变更类型 - [x] ✨ 新功能 - [ ] ♻️ 无关重构 - [x] 📦 构建过程或辅助工具变动 - [ ] 📝 文档更新(已拆分到 PR 4316) ## 关联 Issue 无。 ## 验证结果 - 最新 develop 增量编译:ut_libge_multiparts_utest、graph_engine_test 构建通过。 - pre-commit:全部通过(clang-format、ruff、codespell、OAT 等)。 - C++ UT:2653 passed, 8 skipped。 - Python UT:651 passed, 1 skipped。 - Python AnnotatedArgs ST:5/5 通过,包含真实 Python -> pybind -> C++ callback 链路及异常分支校验。 - ASAN 定向用例:1/1 通过。 - build_fwk.sh 在 ASAN LD_PRELOAD 环境下的子进程 gcc 探测通过。 - 功能开发阶段已使用拆分前的相同核心实现和 example 完成 910B3 两轮真实 NPU 地址刷新验证;example 后续验证由 PR 4316 承载。 ## 核对清单 - [x] 代码遵循项目风格 - [x] 已补充并执行自测 - [x] 中英文文档已拆分到关联 PR 4316 - [x] 按要求保留 [wip] 标记 - [x] 已阅读并遵守贡献指南 ## 本轮检视修复 - 增加稳定序列化枚举 CustomTaskArgsMode,显式区分 None、AnnotatedArgs 和 UpdateCallback,保留旧 OM 兼容路径。 - 恢复原有不可调用方法的注册行为,避免无关语义变化。 - bridge ABI 保持 v1,统一 context import,签名校验函数改名为 _validate_args_signature。 - 移除通用 engine/known-shape 文档中的 Python 特例及过程性文档;长期资料和 example 已拆分到 PR 4316。 - input/output instance index 越界异常输出实际索引和实例数量,并由端到端 Python callback 用例覆盖。 - 修复 ASAN 环境下 gcc 子进程继承 LD_PRELOAD 导致 Python CI 在 pytest 前退出的问题。 - 同步最新 develop 的 Python 自定义算子原型类型定义和 workspace 两阶段申请逻辑,PR 冲突已消除。 See merge request: cann/ge!4254 | 6 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 13 天前 | ||
| 7 天前 | ||
| 7 天前 | ||
| 6 天前 | ||
| 6 天前 | ||
| 1 个月前 | ||
| 21 天前 | ||
| 23 天前 | ||
| 6 天前 | ||
| 6 天前 |