已合并
【feat】: om2 支持aipp #4082
lidaoming1创建于 7月20日
【feat】: om2 支持aipp #4082
已合并
lidaoming1创建于 7月20日
lidaoming1成员
7月20日

Pull Request

描述

变更摘要

本次 PR 为 OM2 模型执行模式实现了完整的动态 AIPP(AI 预处理)支持。此前 OM2 路径下的 AIPP 相关接口均返回 ACL_ERROR_API_NOT_SUPPORT,本次变更将这些接口全部实现,涵盖编译期元数据提取、运行时 AIPP 查询与设置、以及设备端参数下发。同时,将原 OM1 专属文件中定义的一组静态辅助函数(如 SetAippInfo、GetNpuArch、SetIODims 及调试字符串函数)抽取到 model_common 模块,供 OM1 与 OM2 路径共享。

主要改动

实现 OM2 AIPP 核心接口:aclmdlSetInputAIPPImplOm2、aclmdlSetAIPPByInputIndexImplOm2、aclmdlGetAippTypeImplOm2、aclmdlGetFirstAippInfoImplOm2 从返回 ACL_ERROR_API_NOT_SUPPORT 的桩函数变为完整实现,包含索引校验、AIPP 类型检查、参数验证、输出形状校验及通过 Om2ModelExecutor::SetDynamicAippData 将参数拷贝至设备端。

抽取共享 AIPP 工具函数至 model_common:将 SetAippInfo、GetNpuArch、SetIODims、AippInfoDebugString、DimsDebugString、AippDimsDebugString、AippParmsDebugString、AippBatchParaDebugString 从 acl_aipp.cpp 的匿名命名空间移至 model_common.cpp/.h 的 acl 命名空间,供 OM1 和 OM2 路径共用。

新增 AIPP 元数据结构与编译期序列化:在 om2_model_data.h 中定义 Om2AippMeta 结构体,在 Om2ModelMeta 中增加 aipp_infos、is_dynamic_aipp、has_aipp 字段;在 om2_package_helper.cc 中新增 FillAippModelMetaInfo 函数,从模型图中提取 AIPP 配置信息并写入 model_meta.json。

运行时 AIPP 元数据解析与查询:在 om2_model_executor.cc 中实现 ParseAippJson 等 JSON 解析函数,以及 GetAippInfo、GetAippType、GetOrigInputInfo、GetAllAippInputOutputDims、IsDynamicAipp、GetBatchInfoSize、SetDynamicAippData 方法,完整支持 AIPP 信息的运行时查询与动态参数下发。

移除 OM2 编译期对动态 AIPP 的拦截:删除 ge_ir_build.cc 中 InsertAippOpUtil::ValidateStaticAippOnly 调用,允许 OM2 构建模式使用动态 AIPP。

变更类型

请选择本次引入的变更类型:

关联的Issue

如何测试

描述测试此变更的步骤和前提条件:
1.
2.

核对清单

其他信息

在此添加任何其他关于本次 PR 的说明。

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 lidaoming1 的贡献)
Llidaoming1成员
7月20日 添加了label:enhancement
Llidaoming1成员
7月20日 创建了 pull request,commit f17347a3
atomgit-bot
atomgit-bot
7月20日 评论:

变更摘要

本次 PR 为 OM2 模型执行模式实现了完整的动态 AIPP(AI 预处理)支持。此前 OM2 路径下的 AIPP 相关接口均返回 ACL_ERROR_API_NOT_SUPPORT,本次变更将这些接口全部实现,涵盖编译期元数据提取、运行时 AIPP 查询与设置、以及设备端参数下发。同时,将原 OM1 专属文件中定义的一组静态辅助函数(如 SetAippInfoGetNpuArchSetIODims 及调试字符串函数)抽取到 model_common 模块,供 OM1 与 OM2 路径共享。

主要改动

  • 实现 OM2 AIPP 核心接口aclmdlSetInputAIPPImplOm2aclmdlSetAIPPByInputIndexImplOm2aclmdlGetAippTypeImplOm2aclmdlGetFirstAippInfoImplOm2 从返回 ACL_ERROR_API_NOT_SUPPORT 的桩函数变为完整实现,包含索引校验、AIPP 类型检查、参数验证、输出形状校验及通过 Om2ModelExecutor::SetDynamicAippData 将参数拷贝至设备端。

  • 抽取共享 AIPP 工具函数至 model_common:将 SetAippInfoGetNpuArchSetIODimsAippInfoDebugStringDimsDebugStringAippDimsDebugStringAippParmsDebugStringAippBatchParaDebugStringacl_aipp.cpp 的匿名命名空间移至 model_common.cpp/.hacl 命名空间,供 OM1 和 OM2 路径共用。

  • 新增 AIPP 元数据结构与编译期序列化:在 om2_model_data.h 中定义 Om2AippMeta 结构体,在 Om2ModelMeta 中增加 aipp_infosis_dynamic_aipphas_aipp 字段;在 om2_package_helper.cc 中新增 FillAippModelMetaInfo 函数,从模型图中提取 AIPP 配置信息并写入 model_meta.json

  • 运行时 AIPP 元数据解析与查询:在 om2_model_executor.cc 中实现 ParseAippJson 等 JSON 解析函数,以及 GetAippInfoGetAippTypeGetOrigInputInfoGetAllAippInputOutputDimsIsDynamicAippGetBatchInfoSizeSetDynamicAippData 方法,完整支持 AIPP 信息的运行时查询与动态参数下发。

  • 移除 OM2 编译期对动态 AIPP 的拦截:删除 ge_ir_build.ccInsertAippOpUtil::ValidateStaticAippOnly 调用,允许 OM2 构建模式使用动态 AIPP。

likedislike
atomgit-bot
atomgit-bot
7月20日 评论:

代码审查

现在让我检查确认没有遗漏其他关键问题。快速验证一下文档文件中没有安全隐患:

文档均为设计文档,经过快速扫描:

  • chmod 777、无 curl | bash、无硬编码密钥
  • 无禁用 TLS 或暴露 0.0.0.0 的命令
  • 仅包含架构描述、流程图、JSON 格式示例

文档文件:无问题。

现在撰写结束总结。


结束总结

按优先级统计发现问题

优先级 数量 说明
P0 0
P1 0
P2 1 GetAndCheckAippOutputShapeOm2is_get_dim 标志逻辑错误
P3 3 GetAippType 哨兵值不明确、strtol 无错误检查、FP16 代码重复

各变更文件审查结果

文件 结论
api/acl/acl_model/model/acl_aipp.cpp 已将静态函数迁移至 model_common.cpp;调用点正确使用 acl:: 前缀;与 model_common.cpp 存在 FP16 代码重复(P3,已报告)
api/acl/acl_model/model/acl_aipp_om2.cpp 4 个 stub 现已完整实现;发现 is_get_dim 标志错误(P2,已报告)
api/acl/acl_model/model/model_common.cpp 新增共享 AIPP 工具函数;FP16 辅助代码与 acl_aipp.cpp 重复(P3,已报告)
api/acl/acl_model/model/model_common.h 新增声明和常量;无问题
base/common/helper/om2_package_helper.cc 新增 FillAippModelMetaInfo JSON 序列化;无问题
base/common/om2/om2_model_data.h 新增 Om2AippMeta 结构体和字段;无问题
compiler/api/aclgrph/ge_ir_build.cc 移除了 OM2 模式动态 AIPP 拦截;无问题
docs/zh/design/features/aipp_in_om1.md 新增设计文档;无安全隐患
docs/zh/design/features/om2_aipp_adaptation.md 新增设计文档;无安全隐患
inc/framework/runtime/om2_model_executor.h 新增 AIPP 查询及 SetDynamicAippData 方法声明;无问题
runtime/om2/om2_model_executor.cc 新增 AIPP JSON 解析、查询方法及 SetDynamicAippData;发现哨兵值问题(P3)及 strtol 无错误检查问题(P3),均已报告
tests/acl_ut/ut/acl/testcase/acl_model_unittest.cpp 更新测试用例以匹配新实现;无问题

整体风险评估

中等风险。 代码变更量大(+2673/-256 行),跨越编译期、打包期、运行时和 ACL 接口层,触及 OM2 动态 AIPP 的完整数据流。核心问题为 GetAndCheckAippOutputShapeOm2is_get_dim 标志的设置错误:当输入张量维度数不等于 4 时,会导致合法的 shape 被误判为不匹配。该问题与 OM1 已有代码模式一致,但在 OM2 中属于新引入。其余问题(哨兵值、strtol 无错误检查、代码重复)严重程度较低,但建议在后续迭代中修复以提高代码健壮性。

类型 数量
🔴 阻塞 1
🟡 建议 2

⛔ 需要修改

likedislike
CANN-robotCANN-robot成员
7月20日 添加了label:cann-cla/yes
此处折叠了565条消息 查看更多
CANN-robotCANN-robot成员
7月27日 添加了label:lgtm
Llidaoming1成员
7月27日 解决了最后一个问题
zhanj
zhanj成员
7月27日 评论:

/approve

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