| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat: host cpu算子支持codegen融合 Co-authored-by: @SeasonChu<zhuxincheng2@huawei.com> # message auto-generated for no-merge-commit merge: !4246 merge hostcpu-private-cabi-poc into develop feat: host cpu算子支持codegen融合 Created-by: SeasonChu Commit-by: @SeasonChu Merged-by: cann-robot Description: ## 变更目的 在动态 Shape/小 Shape 场景下,将满足条件的 HostCPU 算子链融合为 FusedHostCpu,通过 JIT 生成融合编排 SO,并由 Runtime2 在 Host 上直接执行,减少逐算子调度和参数构造开销,打通 Compiler、HostCpuEngine、CPU Engine 与 Runtime2 的端到端融合链路。 ## 主要变更 ### 1. 融合区域识别与图改写 - 在最终 HostCPU 引擎归属刷新后执行 HostCpuFusionPass,递归处理根图及其子图。 - 仅选择 HostCPU engine/kernel store、SmallShapeHostcpu、输入输出合法且存在 CpuKernel 实现的节点作为候选。 - 基于候选数据边构建连通分量,支持汇聚 DAG 保持和非汇聚多 sink 分支的 Clone-and-Split。 - 先完成所有区域的代码生成与编译,再统一提交图修改;失败时保留原图,并同步维护 atomic/composite engine map。 - 将融合节点所需的注册名、SO key、原始节点信息和输出映射写入 FusedHostCpu 属性。 ### 2. HostCPU Fusion JIT Codegen - 根据融合区域生成 HostCPU 编排源码,保持外部输入、外部输出及内部节点的拓扑和绑定关系。 - 支持计算相关属性序列化、内部临时 Tensor 管理和多输出映射。 - 在内存中编译生成 SO,并校验 ELF 后再进入图提交阶段。 - 使用确定性 chain id/register name,将 SO 数据存储在根图属性中,避免节点迁移到子图后无法定位产物。 ### 3. HostCpuEngine 与 CPU Engine - 增加 IsCpuConstantFoldingFusedOpSupported 查询,仅允许已注册的 V1/V2 CpuKernel 进入融合。 - 增加融合链 plan 的创建、销毁、执行和 Tensor binding/rebind 能力。 - 对运行时地址、Shape、dtype 和 format 变化进行增量重绑,复用已创建的内部 CpuKernel plan。 - 统一 JIT SO 与 Runtime2 之间的 private C ABI,提供注册校验及 create/destroy/run 入口。 ### 4. Runtime2 加载与直接执行 - 从根图读取融合 SO,完成 ELF 校验、动态加载、注册校验和 private entry 解析。 - 将 FusedHostCpu lowering 为专用 FusedHostCpuCompute ExecuteGraph kernel。 - 在执行时构造 Host Tensor binding,调用融合入口完成 Host 侧直调,并回传输出地址和 Shape。 - 在模型 DeInit 阶段释放 kernel state 和模型引用,保留进程级安全缓存,避免注册回调悬空。 ## 变更类型 - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新 - [ ] ♻️ 重构 - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 如何测试 算子满足host执行,且hostcpu算子节点数大于等于2 ## 测试结果 连续的hostcpu算子融合为一个fused算子 ## 关联 Issue 无。 See merge request: cann/ge!4246 | 1 天前 | |
feat: host cpu算子支持codegen融合 Co-authored-by: @SeasonChu<zhuxincheng2@huawei.com> # message auto-generated for no-merge-commit merge: !4246 merge hostcpu-private-cabi-poc into develop feat: host cpu算子支持codegen融合 Created-by: SeasonChu Commit-by: @SeasonChu Merged-by: cann-robot Description: ## 变更目的 在动态 Shape/小 Shape 场景下,将满足条件的 HostCPU 算子链融合为 FusedHostCpu,通过 JIT 生成融合编排 SO,并由 Runtime2 在 Host 上直接执行,减少逐算子调度和参数构造开销,打通 Compiler、HostCpuEngine、CPU Engine 与 Runtime2 的端到端融合链路。 ## 主要变更 ### 1. 融合区域识别与图改写 - 在最终 HostCPU 引擎归属刷新后执行 HostCpuFusionPass,递归处理根图及其子图。 - 仅选择 HostCPU engine/kernel store、SmallShapeHostcpu、输入输出合法且存在 CpuKernel 实现的节点作为候选。 - 基于候选数据边构建连通分量,支持汇聚 DAG 保持和非汇聚多 sink 分支的 Clone-and-Split。 - 先完成所有区域的代码生成与编译,再统一提交图修改;失败时保留原图,并同步维护 atomic/composite engine map。 - 将融合节点所需的注册名、SO key、原始节点信息和输出映射写入 FusedHostCpu 属性。 ### 2. HostCPU Fusion JIT Codegen - 根据融合区域生成 HostCPU 编排源码,保持外部输入、外部输出及内部节点的拓扑和绑定关系。 - 支持计算相关属性序列化、内部临时 Tensor 管理和多输出映射。 - 在内存中编译生成 SO,并校验 ELF 后再进入图提交阶段。 - 使用确定性 chain id/register name,将 SO 数据存储在根图属性中,避免节点迁移到子图后无法定位产物。 ### 3. HostCpuEngine 与 CPU Engine - 增加 IsCpuConstantFoldingFusedOpSupported 查询,仅允许已注册的 V1/V2 CpuKernel 进入融合。 - 增加融合链 plan 的创建、销毁、执行和 Tensor binding/rebind 能力。 - 对运行时地址、Shape、dtype 和 format 变化进行增量重绑,复用已创建的内部 CpuKernel plan。 - 统一 JIT SO 与 Runtime2 之间的 private C ABI,提供注册校验及 create/destroy/run 入口。 ### 4. Runtime2 加载与直接执行 - 从根图读取融合 SO,完成 ELF 校验、动态加载、注册校验和 private entry 解析。 - 将 FusedHostCpu lowering 为专用 FusedHostCpuCompute ExecuteGraph kernel。 - 在执行时构造 Host Tensor binding,调用融合入口完成 Host 侧直调,并回传输出地址和 Shape。 - 在模型 DeInit 阶段释放 kernel state 和模型引用,保留进程级安全缓存,避免注册回调悬空。 ## 变更类型 - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新 - [ ] ♻️ 重构 - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 如何测试 算子满足host执行,且hostcpu算子节点数大于等于2 ## 测试结果 连续的hostcpu算子融合为一个fused算子 ## 关联 Issue 无。 See merge request: cann/ge!4246 | 1 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 天前 | ||
| 1 天前 |