已关闭
[RFC]: 基于符号化推导结果通过codegen对host上shape计算类kernel进行优化 #473
hugo111创建于  6月26日关闭于  14 天前
hugo111成员
6月26日 创建

变更/设计描述

摘要

本 RFC 提出一种编译期 Host CPU 算子融合优化方案:利用 GE 已有的符号化推导能力,将动态 shape 场景下多个 host CPU shape 计算算子(如 Gather、Slice、Concat、Reshape 等)融合为单一的 codegen 计算函数,运行时一次函数调用完成原来多个 kernel 的调度工作,消除逐算子调度开销。

动机

在推荐网络等动态 shape 场景下,GE 通过 HostcpuEngineUpdatePass 已将小数据量(≤8 元素)的 shape 计算算子链从 device 迁移到 host CPU 执行,避免 device 调度开销。

然而,迁移后每个 host CPU 算子在运行时仍然独立调度。对于典型的 shape 计算链(如 Shape → Slice → Concat → Reshape,涉及 4-6 个算子),每次推理仍需 N 次 host kernel 调度。这些算子计算量极小(纳秒级),但每次调度的框架开销(微秒级)远大于计算本身,host kernel 调度成为新的性能瓶颈。

核心观察:这些 shape 计算算子的输入输出值在编译期可以通过符号化推导得到闭合表达式。如果能在编译期将整个计算链的端到端公式推导出来并生成一个融合的计算函数,运行时只需一次函数调用即可完成所有 shape 计算。

功能要点

目标

  1. 自动融合识别:编译期自动识别 host CPU 算子的连通子图(支持 DAG 拓扑,不限于线性链),确定可融合范围
  2. 符号推导与代码生成:利用已有的符号化推导系统(SymEngine + SymbolicKernelFactory),按拓扑序传播符号表达式,推导出端到端计算公式,codegen 为 C++ 函数并编译为 .so
  3. 运行时单次调用:融合后的计算以单一函数调用替代原来的 N 次 kernel 调度,消除调度开销
  4. 完善的降级回退:提供三级降级策略,确保任何异常场景下功能正确,不影响模型可用性

技术方案

later

相关文档

测试方案

later

验收标准

later

备注

likedislike
wangyuchen
wangyuchen成员
6月27日 评论:

/assign@hugo111

likedislike
CANN-robotCANN-robot成员
6月27日 将 hugo111 设为负责人
Hhugo111成员
9月18日 将 SeasonChu 设为负责人
ZhuXinchengZhuXincheng成员
14 天前 issue状态由 进行中 改变为 已完成
ZhuXinchengZhuXincheng成员
14 天前 关闭了 issue