| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat(om2): 新增OM2运行时变量管理器(RTVarManager) Co-authored-by: wuzheng-hw<wuzheng14@huawei.com> # message auto-generated for no-merge-commit merge: !4297 merge om2_varmanager into develop feat(om2): 新增OM2运行时变量管理器(RTVarManager) Created-by: wuzheng-hw Commit-by: wuzheng-hw Merged-by: cann-robot Description: # Pull Request ## 描述 新增OM2运行时变量管理器(RTVarManager),用于在运行时管理变量的内存分配、地址映射、格式转换及数据拷贝。 主要变更: - 新增 RTVarResource 数据结构,描述运行时变量条目(RTVarEntry),包含变量名、逻辑地址、tensor描述、格式转换路径等 - 新增 BuildRTVarResource 接口,从编译期 VarManager 构建运行时变量资源并序列化到 OM2 模型文件 - 新增 Om2RTVarManager,负责运行时变量内存分配、地址管理、格式转换及数据拷贝 - 新增 Om2RTVarManagerPool 单例池,按 session 管理 RTVarManager 实例 - OM2 codegen 侧新增变量元数据序列化 - 模型执行器集成 RTVarManager,支持从 OM2 文件解析变量资源并初始化 - 任务码构建适配变量地址刷新逻辑 - 新增完整的 UT/ST 测试用例 ## 变更类型 - [ ] 🐛 Bug 修复 - [x] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue ## 如何测试 1. 运行 UT 用例:om2_rt_var_manager_unittest、rt_var_resource_unittest、om2_var_resource_builder_unittest 2. 运行 ST 用例:test_om2、test_om2_online 3. 验证 OM2 模型编译和运行时变量管理功能正常 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定 ## 其他信息 涉及 57 个文件变更,新增约 4500 行代码。 See merge request: cann/ge!4297 | 2 个月前 | |
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 | 1 个月前 | |
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 个月前 | |
fix: precommit整改 Co-authored-by: yelongjian<yelongjian1@huawei.com> # message auto-generated for no-merge-commit merge: !3726 merge dev-precommit into develop fix: precommit整改 Created-by: yelongjian Commit-by: yelongjian Merged-by: cann-robot Description: # Pull Request ## 描述 precommit整改 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [x] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1.NA ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/ge!3726 | 3 个月前 | |
refactor: protobuf生成切换工程函数 Co-authored-by: Feiteng Zheng<zhengfeiteng1@h-partners.com> # message auto-generated for no-merge-commit merge: !4502 merge 20260821-switch-cmake-protobuf-generate into develop refactor: protobuf生成切换工程函数 Created-by: zhengfeiteng Commit-by: Feiteng Zheng Merged-by: cann-robot Description: # Pull Request ## 描述 protobuf生成切换工程函数。 ## 变更类型 请选择本次引入的变更类型: <!-- [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!4502 | 1 个月前 | |
fix: 静态编译子图读取OM模型级核数, 避免污染动态算子平台信息 Co-authored-by: KenChow<zhouchen53@huawei.com> # message auto-generated for no-merge-commit merge: !4581 merge fix/static-subgraph-model-core-num into develop fix: 静态编译子图读取OM模型级核数, 避免污染动态算子平台信息 Created-by: KenChow Commit-by: KenChow Merged-by: cann-robot Description: # Pull Request ## 描述 修复离线动态 Shape 场景下,OM 中同时存在 RT2 动态子图和静态编译子图时,动态算子实际核数被静态子图污染的问题。 **问题现象** 不带 --dynamic_batch_size/--dynamic_dims 编译的动态 Shape OM,DynamicShapePartitioner 会切出 <root>_sub_0_unknow(RT2 动态子图)和 <root>_sub_1_know(静态编译子图)。以 --aicore_num="8|16" 编译后执行: | OM | 动态算子 tiling 拿到的核数 | msprof Block Num | |----|---------------------------|--------------------| | 动态 + 静态子图 | Ai Core=20 / Vector Core=40 | 40 | | 纯动态(同样选项、同样动态分支) | Ai Core=8 / Vector Core=16 | 16 | 即"OM 里是否存在静态编译子图"会改变动态算子的实际核数。 **根本原因** 1. 模型级核数 ge.aicoreNum/ge.vectorcoreNum 由 PersistCoreNumOptionsToRootGraph 持久化在根图属性上。RT2 侧经 lowering 以 const 输入喂给 GetPlatformInfo kernel,调用的是 ModelHelper::HandleDeviceInfo 的 options 重载;而静态编译子图对应的 v1 DavinciModel::Init 调用的是不带 options 的重载,只回落 ThreadLocalContext(离线加载场景为空),因此拿到未受限的 ini/device 核数 20/40。 2. fe::PlatFormInfos 只是 shared_ptr<PlatFormInfosImpl> 的浅壳,ModelHelper::SetPlatformInfos 除了填出参还会写进程级 fe::PlatformInfoManager::GeInstance()/Instance(),同一 soc_version 只有一份 SoCInfo,**后写者覆盖先写者**。静态子图的 DavinciModel::Init 排在 RT2 GetPlatformInfo 之后,把共享 impl 从 8/16 刷回 20/40,其后做 TilingParse 的动态算子因此读到错误核数。 多 OM 场景不受影响,因为每个模型的 GetPlatformInfo 与 TilingParse 在各自 load 内连续执行,不存在交错。 **变更内容** - CoreNumUtils 新增 FillCoreNumOptions/GetCoreNumOptionsFromGraph,后者沿 parent 链上溯到根图读取模型级核数并转成 options;"负值表示未配置"的约定收敛到一处,runtime/v2/kernel/common_kernel_impl/platform.cc 改为复用。 - DavinciModel::Init 改用 HandleDeviceInfo 的 options 重载,传入从根图读到的核数。未配置时 options 为空,行为与修改前一致(回落 ThreadLocalContext),老 OM 兼容。 ## 变更类型 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue 无 ## 如何测试 环境:Ascend910_9362(ini ai_core_cnt=20、vector_core_cnt=40) 1. UT: bash cmake --build <build_dir> --target ut_register -j32 ./tests/graph_metadef/ut/register/ut_register --gtest_filter="CoreNumValidateUT.*" 结果 46/46 通过。新增 11 条覆盖 FillCoreNumOptions 与 GetCoreNumOptionsFromGraph(含子图上溯、子图属性不生效、非法值报错);davinci_model_unittest 新增 3 条(根图核数合法/非法、GeModel 持有子图时上溯)。 2. 端到端复现与回归: 构造一张同时含动态分支和静态分支的图:动态分支 data:[-1,4096] @ weight:[4096,4096] -> MatMul;静态分支 static_data:[4096,4096] @ static_weight:[4096,4096] -> MatMul -> Relu。 bash atc --model=dyn_static.air --framework=1 --output=dyn_static \ --soc_version=Ascend910_9362 --input_format=ND \ --input_shape="data:-1,4096;weight:4096,4096;static_data:4096,4096;static_weight:4096,4096" \ --aicore_num="8|16" --output_type=FP32 关键点:**不传** --dynamic_batch_size/--dynamic_dims,根图才会保持 unknown shape 并切出 _sub_0_unknow + _sub_1_know。 加载执行(aclmdlSetDatasetTensorDesc 喂真实 shape),开 INFO plog + msprof --task-time=on --ai-core=on,核对三项: - 运行期两条 GetPlatformInfo 日志(分属 RT2 kernel 与静态子图 DavinciModel::Init)应均为 aicore num: 8, vector core num: 16;修复前第二条是 20/40,并伴随 ge.aicoreNum in ThreadLocalContext, value: []。 - op_summary 中静态子图 static_matmul 的 Block Num=8,等于 atc --mode=1 反解 OM 得到的编译期 tvm_blockdim,证明编译期路径未受影响。 - op_summary 中执行期 tiling 的动态算子 trans_Cast_0 的 Block Num,混合 OM 与纯动态对照组 OM 应一致(均为 16);修复前分别是 40 与 16。 修复后上述三项全部符合预期;另回归了纯动态 OM、多 OM 顺序加载、分档动态+静态子图三个场景,均通过。 ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [ ] 我已更新了相关的文档(本次仅代码修复,未涉及文档变更) - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 以下两点属于同源但触发面不同的已知限制,**不在本次修改范围**: 1. 算子级控核(_op_aicore_num/_op_vectorcore_num)与模型级叠加时,v1 静态路径(DavinciModel::LaunchPlatformInfos/UpdatePlatformInfos)从 device 深拷贝重建平台信息、只叠加算子级,模型级配置在该算子上失效;RT2 侧 AppendCoreTypeToPlatform 行为正确。触发条件为"算子级控核 + tiling 下沉/super kernel",面较窄。 2. SetPlatformInfos 写进程级单例,并发 load 多个核数不同的 OM 仍存在竞争。 See merge request: cann/ge!4581 | 1 个月前 | |
fix: precommit整改 Co-authored-by: yelongjian<yelongjian1@huawei.com> # message auto-generated for no-merge-commit merge: !3726 merge dev-precommit into develop fix: precommit整改 Created-by: yelongjian Commit-by: yelongjian Merged-by: cann-robot Description: # Pull Request ## 描述 precommit整改 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [x] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1.NA ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/ge!3726 | 3 个月前 | |
【PR】: ge_error_codes.h重命名后修改ge仓引用 Co-authored-by: jikai-tyler<jikai5@huawei.com> # message auto-generated for no-merge-commit merge: !4039 merge ge_errorcode into develop 【PR】: ge_error_codes.h重命名后修改ge仓引用 Created-by: jikai-tyler Commit-by: jikai-tyler Merged-by: cann-robot Description: # Pull Request ## 描述 ge_error_codes.h重命名后修改ge仓引用。 ## 变更类型 请选择本次引入的变更类型: <!-- [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!4039 | 2 个月前 | |
fix: precommit整改 Co-authored-by: yelongjian<yelongjian1@huawei.com> # message auto-generated for no-merge-commit merge: !3726 merge dev-precommit into develop fix: precommit整改 Created-by: yelongjian Commit-by: yelongjian Merged-by: cann-robot Description: # Pull Request ## 描述 precommit整改 ## 变更类型 请选择本次引入的变更类型: <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新功能 - [x] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在当前页面的右侧'关联Issue'部分添加相应Issue链接,并勾选'合并后关闭已关联的 Issue'选项。 --> ## 如何测试 描述测试此变更的步骤和前提条件: 1.NA ## 核对清单 <!-- [x] 表示选中 --> - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如: feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 在此添加任何其他关于本次 PR 的说明。 See merge request: cann/ge!3726 | 3 个月前 |