已合并
feat: 【part 1】支持自定义算子后端注册与 Host CPU 执行上下文 #4481
duhua创建于 6 天前
feat: 【part 1】支持自定义算子后端注册与 Host CPU 执行上下文 #4481
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 duhua 的贡献)6 天前 添加了label:enhancement
atomgit-bot
6 天前 评论:
6 天前 评论:
变更摘要
本 PR 为自定义算子体系引入 Host CPU 后端支持:新增 OpBackend(kDevice/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.h与cast.h新增CustomOpCapability::kHostCpuExecute及其对应 trait,CustomOpCreatorRegister/CustomOpFactory增加带 backend 的重载。 - 注册表按后端存储并新增公共能力查询:
CustomOpRegistry中creators_/custom_ops_改为op_type → backend → creator/op双层结构,RegisterCreator、CreateOrGetCustomOp、FindCustomOp、HasCreator、HasCustomOp均新增 backend 参数;新增GetCustomOpCommonCapability,按kShapeInfer/kPortable公共能力返回唯一提供者,跨后端同类型实例共享、不同类型则报错,DeserializeCustomKernelItem等改经该接口获取PortableOp。 - 自定义算子 SO 拉取注册升级为 V2 ABI:
custom_op_pull_registry.h/cc将导出符号升级为GetRegisteredCustomOpCreatorAbiVersionV2等,新增携带backend的CustomOpTypeToCreatorV2(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.cmake与GeExecutorInc.xml同步安装新头文件。 - 调用点与序列化/Shape 推理适配:
custom_graph_optimizer.cc、custom_ops_kernel_builder.cc、custom_task_info.cc、custom_op_kernel.cc、python_custom_op_bridge_loader.cc等改为按OpBackend::kDevice创建算子;op_desc_utils_ex.cc、bg_infer_shape.cc、model_custom_kernels_helper.cc、ge_root_model.cc改用GetCustomOpCommonCapability(ShapeInferOp/PortableOp)获取算子,Portable 序列化能力判定随之调整。


atomgit-bot
6 天前 评论:
6 天前 评论:
6 天前 添加了label:cann-cla/yes
此处折叠了395条消息 查看更多
1 天前 添加了label:approved
1 天前 合入了pull request
描述
本 PR 提供自定义算子后端感知注册的基础能力,并补充 Host CPU 算子执行上下文,为后续 Host CPU 自定义算子执行和后端扩展提供统一接口。
主要变更:
OpBackend区分 Device、Host CPU 等实现。OpExecutionContext公共接口及运行时实现,提供输入输出 Tensor、Workspace、Stream 和执行属性访问能力。本 PR 仅包含注册、接口和执行上下文基础改动;Host CPU 引擎路由、运行时执行流程、常量折叠、样例和文档将在后续 PR 提交。
变更类型
关联的Issue
暂无关联 Issue。
如何测试
核对清单
其他信息
本 PR 为拆分提交中的基础 PR,后续 PR 将在此基础上补充编译器/运行时路由、常量折叠以及样例和文档。