| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
【fix】: fix GetAllIrAttrs logic Co-authored-by: kantao1<kantao1@huawei.com> # message auto-generated for no-merge-commit merge: !4794 merge refactoring into develop 【fix】: fix GetAllIrAttrs logic Created-by: kantao1 Commit-by: kantao1 Merged-by: cann-robot Description: # Pull Request ## 描述 ### 一、问题背景 gert::bg::GetAllIrAttrs(graph_metadef/exe_graph/lowering/bg_ir_attrs.cc)负责在 lowering/序列化阶段把节点声明的 IR 属性 (OpDesc::GetIrAttrNames(),按 IR 顺序)序列化为运行时属性区(RuntimeAttrsDef),是 tiling/kernel 按索引读取 属性的唯一数据源。 原实现中,若名单中某属性在属性 map(AttrUtils::GetAllAttrs)中找不到值,会**清空全部已收集属性并 return true**: 错误被静默吞掉,推迟到 tiling 阶段才暴露,报错点远离根因,且节点上其余真实属性一并失效。 经分析,"声明了 IR 属性但无值"共有 6 类来源,性质不同: | 来源 | 名值关系 | 典型场景 | |------|---------|---------| | proto .ATTR(name, type, default) 注册(Operator API 建图) | 名值俱全 | FE/ATC 正常建图 | | proto .REQUIRED_ATTR(name, type) 注册 | **有名无值**(无默认值,依赖用户显式 set) | 建模遗漏即为错误 | | 模型反序列化恢复(model_serialize.cc) | 随原节点 | om/图加载 | | IR 版本向后兼容恢复(ir_definitions_recover.cc kBackward) | **有名无值**(只补新增属性名) | 旧版本图 + 新版本算子 | | es 构图声明(CompliantNodeBuilder) | optional 属性等于默认值时**有名无值**(CreateFromIfNotEqual 省略,为 IR 层公开设计契约) | PyTorch/eager 建图,如 Gather validate_indices、Reshape axis | | 测试/工具手工登记(AppendIrAttrName) | 看写法 | UT 故意缺属性走默认值(如 Moe 系列用例) | 其中 **REQUIRED 缺值是建模错误**(必须报错);**可选属性缺值是 IR 设计允许的合法状态**(ir_definitions_recover.cc 中已有明确契约注释,框架在符号推导等路径也有对应的默认值回填机制 RecoverIrAttrDefaultValue,但 lowering 链路缺失 同等处理)。一刀切 return true(吞错)或一刀切 return false(误伤合法缺省,曾引发 ut_jit_execution/autofuse 等 ASan 崩溃与多处断言失败)都不正确。 ### 二、修改思路 GetAllIrAttrs 改为三分支分级语义: 1. **REQUIRED 属性缺值** → GELOGE + 清空 + return false:fail-fast,错误在 lowering 阶段暴露(此前被推迟到 tiling);该路径依赖 KernelContextHolder::context_ 初始化为 nullptr,保证调用方(如 symbolic_shape_inference.cc 的判空)能确定性地接住失败,消除野指针(流水线曾出现的 ASan heap-buffer-overflow/UAF 崩溃根因); 三个分支均不改变"只允许整体成功或整体失败"的索引对齐不变量(tiling 按索引读取,绝不能跳过单个属性)。 配套修改: - kernel_run_context_builder.h:KernelContextHolder 默认构造初始化 context_(nullptr)(REQUIRED 失败路径 的确定性保障,1 行); - exe_graph_serializer.cc:CreateComputeNodeInfo 返回 nullptr 时补判空断言,避免空指针进入 AddBuf; - 测试适配:ShapeRuleOp 的 REQUIRED_ATTR(N) 在 UT/ST 建图中显式补值;stub 的 ConstPlaceHolder 补齐 REQUIRED 属性(origin_format/storage_format/expand_dim_rules);符号推导用例显式补设被 es 构图省略的 默认值属性(Gather/Range/SoftmaxV2/Reshape);metadef UT 新增 2 个用例分别覆盖分支 1(REQUIRED 报错)与 分支 2(proto 默认值精确回填)。 ### 三、影响面说明 - 生产建图(FE/ATC 经 Operator API)属性名值俱全,主路径零行为变化; - es 建图的"等于默认值的可选属性"将从省略变为显式包含在属性区(语义等价,对 tiling 无影响); ## 变更类型 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 ## 关联的Issue 无 ## 如何测试 1. 本地 metadef UT:ut_exe_graph 全量 672 通过(含新增 CreateAttrBufferFailedWhenRequiredIrAttrLoss、 CreateAttrBufferFillOptionalIrAttrWithProtoDefault 两个用例); 2. 本地 GE UT 回归:ut_libge_symbol_infer_utest(512 通过,修复原 ASan 崩溃与 2 个断言失败)、 ut_jit_execution(121 通过,修复原 ASan 崩溃)、ut_fast_runtime2_test(1772 通过,修复原 ShapeRuleOpUT 4 个失败)、ut_libge_others_utest NodeMatcher/AutoFuse(33 通过); 3. 流水线重跑 ut_rt / st_rt / ut_ge_common / st_hetero / ut_fe 确认。 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 - 流水线 ut_fe_shape_common 的 heavy_format_distribution_fzg_01 SEGV 经分析为本 MR 无关的既有测试缺陷 (SetUp 中 GetOpStoreAdapter 可能返回 nullptr 未判空,ut_heavy_format_propagation_fzg.cc:65;崩溃点位于 OpStoreAdapter 注册层,与本 MR 无代码路径交集,且前置 12 个 suite 全部通过),属全局单例初始化顺序类 flaky,建议另行修复测试判空。 See merge request: cann/ge!4794 | 13 天前 | |
【feat】: HostCPU 融合 Codegen 迁移至标准 CustomOp Co-authored-by: @SeasonChu<zhuxincheng2@huawei.com> # message auto-generated for no-merge-commit merge: !4669 merge hostcpucodgen into develop 【feat】: HostCPU 融合 Codegen 迁移至标准 CustomOp Created-by: SeasonChu Commit-by: 19851937626;@SeasonChu Merged-by: cann-robot Description: # Pull Request ## 描述 将 HostCPU 融合 Codegen 从 RT2 私有 FusedHostCpuCompute ABI 迁移为标准 HostCPU CustomOp SO 链路。 - HostCpuFusionPass 筛选可融合的 SmallShape HostCPU 节点,按连通域和 sink 规划融合区域,并在全部 JIT 准备成 功后再提交图替换; - 生成实现 HostCpuExecuteOp / PortableOp 的 CustomOp SO,运行时通过 AicpuHostFindFunc 获取原始算子的 Gert HostKernel,按原拓扑执行; - 将生成 SO 以 kCustomOp 写入 root graph 的 bin_file_buffer,接入 CustomOp 注册、切图属性继承及 SO in OM 打包; - 移除旧的私有 SO 加载、RT2 私有 Compute 节点和私有 C ABI 路径,复用通用 CustomOp 生命周期。 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1. 2. ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/ge!4669 | 25 天前 | |
feat: part2 完善HostCPU自定义算子运行时与常量折叠支持 Co-authored-by: du-hua1024<duhua2@huawei.com> # message auto-generated for no-merge-commit merge: !4538 merge new into develop feat: part2 完善HostCPU自定义算子运行时与常量折叠支持 Created-by: du-hua1024 Commit-by: du-hua1024 Merged-by: cann-robot Description: # Pull Request ## 描述 本 PR 完善后端感知自定义算子的 HostCPU 执行链路,打通编译期识别与分流、Runtime V2 下沉执行、ShapeInfer、常量折叠及配套单元测试。HostCPU 自定义算子使用独立的 lowering 标识和执行上下文,避免被当作 Device 自定义算子编译或按 AI Core 归属分区。 ## 主要修改点 ### 1. HostCPU 自定义算子编译与分区 - 在 DNNEngineManager 中识别注册到 OpBackend::kHostCPU 的自定义算子,并将其设置为 Custom Engine、Custom Op Kernel Lib,同时写入 host_cpu_custom_op_lower_func lowering 属性。 - 在 HostcpuEngineUpdatePass 中保留 HostCPU 自定义算子的 Custom Engine 归属,避免被错误迁移到普通 HostCPU 或 Device 执行路径。 - 在 EnginePartitioner 二次分区时区分 Device 自定义算子和 HostCPU 自定义算子:前者跟随 AI Core,后者跟随 DNN_VM_HOST_CPU。 - 在动态 Shape 分区及未知 Shape 标记流程中,将 HostCPU 自定义算子按 HostCPU 节点处理。 - 在 Custom Engine 编译任务生成阶段跳过 HostCPU 自定义算子的 Device 编译;算子支持性检查改为使用后端感知注册信息。 ### 2. Runtime V2 HostCPU 自定义算子执行 - 新增 HostCPU 自定义算子 converter: - 从 Host 侧 lowering 结果构造输入 Tensor 和地址; - 使用 Host allocator 分配输出; - 注册 host_cpu_custom_op_lower_func 对应的节点 converter; - 增加输出内存释放及输入地址生命周期依赖。 - 新增 HostCPU 自定义算子 kernel: - 查找 HostCPU 自定义算子实例; - 支持 ExecuteHostCustomOp 和 ExecuteHostCustomOpWithInferShape; - 使用 HostCpuOpExecutionContext 调用 HostCpuExecuteOp::Execute; - 补充输出创建、Trace 和 Profiling 逻辑。 - ShapeInfer 链路改为通过 kShapeInfer 能力获取 ShapeInferOp,新增 FindCustomShapeInferOp kernel,避免先获取通用 BaseCustomOp 再转换。 - 抽取公共输出模板 Tensor 处理逻辑,兼容 Device 和 HostCPU 两类自定义算子执行路径。 ### 3. HostCPU 自定义算子常量折叠 - 在常量折叠阶段优先尝试执行注册为 HostCpuExecuteOp 的自定义算子。 - 新增 HostCPU 常量折叠专用内存分配器、TensorData 管理和 HostCpuOpExecutionContext 构造逻辑。 - 将 GE Tensor 转换为 GERT Tensor,执行 HostCPU 自定义算子后再转换回 GE Tensor。 - HostCPU 自定义算子执行失败时,继续回退到已有 HostCPU Kernel 和内置 Kernel 路径。 ### 4. 执行上下文、构建及可观测性 - 将 MakeOutputRefInput 调整为非 const 接口,移除内部 const_cast,同步更新实现、头文件及离线 stub。 - 增加 HostCPU 自定义算子 lowering 常量、Profiler 类型注册及 compiler 对 gert 的链接依赖。 - 更新相关 Runtime V2、编译器和 ShapeInfer 接口声明。 ### 5. 测试覆盖 新增或扩展以下单元测试: - HostCPU 自定义算子引擎更新、DNN Engine 选择及图分区; - 动态/未知 Shape 分区; - HostCPU 自定义算子常量折叠; - Runtime V2 custom converter、kernel 及 ShapeInfer; - 自定义算子 Kernel Info Store 后端感知检查。 ## 变更类型 - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 如何测试 - 编译 GE compiler、Runtime V2 及相关单元测试目标。 - 执行 HostCPU 自定义算子引擎更新、图分区、常量折叠、Runtime V2 converter/kernel 相关 UT。 - 验证 Device 自定义算子路径保持原有编译、分区和执行行为。 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已补充相关单元测试 - [x] 我已更新全部相关文档 - [x] 我在标题中使用了合适的类型标签(如:feat:、fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守其中的相关规定 ## 其他信息 本 PR 相对目标分支涉及 33 个文件,新增约 1384 行、删除约 50 行。Device 自定义算子与 HostCPU 自定义算子通过后端注册信息和 lowering 属性区分,HostCPU 路径不会进入 Device 自定义算子编译流程。 See merge request: cann/ge!4538 | 30 天前 | |
feat: 【part 1】支持自定义算子后端注册与 Host CPU 执行上下文 Co-authored-by: du-hua1024<duhua2@huawei.com> # message auto-generated for no-merge-commit merge: !4481 merge develop into develop feat: 【part 1】支持自定义算子后端注册与 Host CPU 执行上下文 Created-by: du-hua1024 Commit-by: du-hua1024 Merged-by: cann-robot Description: ## 描述 本 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 提交。 ## 变更类型 - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue 暂无关联 Issue。 ## 如何测试 - 修改ut正常运行,不影响已有功能 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已完成完整编译及 UT/ST 自测 - [x] 我已更新相关设计文档(本 PR 不包含文档改动) - [x] 我在标题中使用了合适的类型标签(feat:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md) ## 其他信息 本 PR 为拆分提交中的基础 PR,后续 PR 将在此基础上补充编译器/运行时路由、常量折叠以及样例和文档。 See merge request: cann/ge!4481 | 1 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 13 天前 | ||
| 25 天前 | ||
| 30 天前 | ||
| 1 个月前 |