已合并
refactor: 固定OM2模型API头文件 #4774
zhangfan_hanq创建于 9月7日
refactor: 固定OM2模型API头文件 #4774
已合并
zhangfan_hanq创建于 9月7日
zhangfan_hanq成员
9月7日

Pull Request

描述

将 OM2 模型对外 API 与每模型内部实现拆分:固定 API 头文件 om2_model_api.h 作为代码仓受控的唯一来源,在 ATC 代码生成阶段嵌入并写入 OM2;每模型头文件调整为 <model>_internal.h。

变更类型

关联的Issue

无。

如何测试

  1. 增量编译 ge_common,验证嵌入资源代码可编译。
  2. 执行 OM2 codegen UT:213 通过,1 个 x86 环境用例跳过。
  3. 执行 Om2PackageHelperUt.*:51/51 通过。
  4. 执行 Om2St.*:48/48 通过。
  5. 使用 ATC mode 7 转换 ResNet50,确认 OM2 包含 om2_model_api.h 与 resnet50_internal.h。

核对清单

其他信息

固定 API 头以 CMake 在构建阶段生成资源源文件并嵌入动态库,避免 ATC 运行时依赖安装路径上的头文件。

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 zhangfan_hanq 的贡献)
Zzhangfan_hanq成员
9月7日 创建了 pull request,commit 07f6fb42
atomgit-bot
atomgit-bot
9月7日 评论:

变更摘要

本 PR 对 OM2 模型的对外 API 与每模型内部实现进行拆分:新增固定 API 头文件 om2_model_api.h(inc/framework/om2/model_api/om2_model_api.h)作为代码仓受控的唯一来源,集中定义 GertModel* 结构体、回调类型与 GertModelLoad/GertModelRun 等 C 接口声明;在 ATC 代码生成阶段通过 CMake 构建期生成的资源文件 om2_model_api_resource.cc.in 将固定头内容嵌入动态库并写入 OM2,运行时头文件(model_dump_c_api.h、gert_model_executor_types.h 等)改为引用该固定头,各模型头文件则由 <model>_interface.h 调整为 <model>_internal.h,避免 ATC 运行时依赖安装路径上的头文件。

主要改动

  • 新增固定 API 头作为唯一来源:新增 inc/framework/om2/model_api/om2_model_api.h,集中声明全部 OM2 对外接口类型(GertModelTaskDesc、GertModelLoadCallbacks、GertModelRunCallbacks、GertModelLoadConfig 等)及 GertModelLoad、GertModelRunAsync、GertModelGetStreamNum 等函数;om2_model_executor.cc 删除本地重复定义的 GertModelLoadConfig/GertModelRunConfig 等结构体并改为 include 该头。

  • 运行时头文件收敛为引用固定头:model_dump_c_api.h 由内联约 190 行类型定义精简为 include om2_model_api.h(并将参数类型由 const struct GertModelTaskDesc * 改为 const GertModelTaskDesc *);gert_model_executor_types.h 退化为兼容 include 并注明 ABI 类型仅定义一次;gert_model_executor_callbacks.h 改引 om2_model_api.h,gert_model_executor_callbacks.cc 补引 model_dump_c_api.h。

  • codegen 输出文件拆分:GeneratedFileIndex 新增 kModelApiHeaderFile(om2_model_api.h),原 interface 头默认名由 <model>_interface.h 改为 <model>_internal.h;ProgramGenerator 新增 GenerateModelApiHeader 在生成流程中嵌入固定头内容,interface 头 include om2_model_api.h,_resources.cpp、_args_manager.cpp、_kernel_reg.cpp、_load_and_run.cpp 均改 include <model>_internal.h。

  • 移除 codegen 内联 API 声明:删除 InterfaceFileCodeGenerator::BuildExternalApiDecls() 及其在 ExternBlock("C", ...) 中的使用,StablePartId::kInterfaceDumpApis 更名 kInterfaceInternalTypes,stable_part_provider.cc 中对应的大段 dump API 类型字符串定义(load/launch/run 回调结构等)改为仅保留 GertModelExternalResources。

  • 构建期资源嵌入与编译装配改造:新增 CMake 模板 om2_model_api_resource.cc.in,以 GetOm2ModelApiHeader() 在构建阶段生成资源源文件并嵌入动态库(program_generator.cc 声明并调用该函数);om2_utils.cc 抽出可复用的 ReplaceInclude 辅助函数,CompileGeneratedCppToSo 改为同时查找 om2_model_api.h 与 <model>_internal.h artifact,通过 memfd 路径替换 include 后再编译。

likedislike
不准确?
atomgit-bot
atomgit-bot
9月7日 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
CANN-robotCANN-robot成员
9月7日 添加了label:cann-cla/no
CANN-robotCANN-robot成员
9月7日 添加了label:stat/needs-squash
此处折叠了73条消息 查看更多
yangyongqiang
yangyongqiang成员
9月9日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
9月9日 添加了label:lgtm
yangyongqiang
yangyongqiang成员
9月9日 评论:

/approve

likedislike
CANN-robotCANN-robot成员
9月9日 添加了label:approved
CANN-robotCANN-robot成员
9月9日 合入了pull request