已合并
feat: 【part 1】支持自定义算子后端注册与 Host CPU 执行上下文 #4481
duhua创建于 6 天前
feat: 【part 1】支持自定义算子后端注册与 Host CPU 执行上下文 #4481
已合并
duhua创建于 6 天前
duhua
duhua成员
6 天前

描述

本 PR 提供自定义算子后端感知注册的基础能力,并补充 Host CPU 算子执行上下文,为后续 Host CPU 自定义算子执行和后端扩展提供统一接口。

主要变更:

  • 为 CustomOp 注册、查询、Factory 和 Capability 增加后端维度,支持按 OpBackend 区分 Device、Host CPU 等实现。
  • 新增 Host CPU OpExecutionContext 公共接口及运行时实现,提供输入输出 Tensor、Workspace、Stream 和执行属性访问能力。
  • 迁移现有自定义算子注册及相关编译、加载、推导调用点,保持默认 Device 后端行为兼容。
  • 增加 Registry、Factory、执行上下文及相关调用链的 UT/ST 覆盖,并补充头文件安装导出。

本 PR 仅包含注册、接口和执行上下文基础改动;Host CPU 引擎路由、运行时执行流程、常量折叠、样例和文档将在后续 PR 提交。

变更类型

关联的Issue

暂无关联 Issue。

如何测试

  • 修改ut正常运行,不影响已有功能

核对清单

其他信息

本 PR 为拆分提交中的基础 PR,后续 PR 将在此基础上补充编译器/运行时路由、常量折叠以及样例和文档。

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 duhua 的贡献)
duhuaduhua成员
6 天前 添加了label:enhancement
duhuaduhua成员
6 天前 创建了 pull request,commit 0ca04ca7
atomgit-bot
atomgit-bot
6 天前 评论:

变更摘要

本 PR 为自定义算子体系引入 Host CPU 后端支持:新增 OpBackendkDevice/kHostCPU)枚举与 HostCpuExecuteOp 执行接口,将自定义算子注册表、工厂及 SO 拉取注册从「按算子类型唯一注册」扩展为「按类型+后端双层组织」,并新增 HostCpuOpExecutionContext 执行上下文用于 Host 侧内存分配与输出引用输入。同时将自定义算子 SO 的 C ABI 拉取协议升级为 V2(携带 backend 字段,V1 保留用于加载历史 SO),各引擎/运行时调用点相应增加后端参数或改用按公共能力(ShapeInfer/Portable)获取算子的方式,并同步更新打包配置与单元测试。

主要改动

  • 引入 OpBackend 枚举与 Host CPU 能力custom_op.h 新增 OpBackend 枚举(kDevice/kHostCPU)、HostCpuExecuteOp 接口及 REG_OP_BACKEND 注册宏;capability.hcast.h 新增 CustomOpCapability::kHostCpuExecute 及其对应 trait,CustomOpCreatorRegister/CustomOpFactory 增加带 backend 的重载。
  • 注册表按后端存储并新增公共能力查询CustomOpRegistrycreators_/custom_ops_ 改为 op_type → backend → creator/op 双层结构,RegisterCreatorCreateOrGetCustomOpFindCustomOpHasCreatorHasCustomOp 均新增 backend 参数;新增 GetCustomOpCommonCapability,按 kShapeInfer/kPortable 公共能力返回唯一提供者,跨后端同类型实例共享、不同类型则报错,DeserializeCustomKernelItem 等改经该接口获取 PortableOp
  • 自定义算子 SO 拉取注册升级为 V2 ABIcustom_op_pull_registry.h/cc 将导出符号升级为 GetRegisteredCustomOpCreatorAbiVersionV2 等,新增携带 backendCustomOpTypeToCreatorV2(V1 保留用于历史 SO);custom_op_registry_builder.cc 优先解析 V2 符号、校验 backend 合法性并以 (op_type, backend) 为键做重复注册检测。
  • 新增 HostCpuOpExecutionContext 执行上下文host_cpu_op_execution_context.h/cc 提供 GetInputTensor/GetOutputTensor 等访问接口及 MallocOutputTensor(经 host allocator 分配对齐内存)、MakeOutputRefInput(输出共享输入内存),并在 stub_offline_launch_runtime.cc 提供离线 stub 实现,cmake/package.cmakeGeExecutorInc.xml 同步安装新头文件。
  • 调用点与序列化/Shape 推理适配custom_graph_optimizer.cccustom_ops_kernel_builder.cccustom_task_info.cccustom_op_kernel.ccpython_custom_op_bridge_loader.cc 等改为按 OpBackend::kDevice 创建算子;op_desc_utils_ex.ccbg_infer_shape.ccmodel_custom_kernels_helper.ccge_root_model.cc 改用 GetCustomOpCommonCapabilityShapeInferOp/PortableOp)获取算子,Portable 序列化能力判定随之调整。
likedislike
atomgit-bot
atomgit-bot
6 天前 评论:

代码审查

✅ 未发现问题

likedislike
CANN-robotCANN-robot成员
6 天前 添加了label:cann-cla/yes
此处折叠了395条消息 查看更多
张德鹏成员
1 天前 评论:

/approve

likedislike
张德鹏成员
1 天前 评论:

/approve

likedislike
王涛成员
1 天前 评论:

/approve

likedislike
CANN-robotCANN-robot成员
1 天前 添加了label:approved
CANN-robotCANN-robot成员
1 天前 合入了pull request