Pull Request已成功合入, 合并人@CANN-robot
(感谢 lidaoming1 的贡献)变更摘要
本次 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。


代码审查
现在让我检查确认没有遗漏其他关键问题。快速验证一下文档文件中没有安全隐患:
文档均为设计文档,经过快速扫描:
- 无
chmod 777、无curl | bash、无硬编码密钥 - 无禁用 TLS 或暴露
0.0.0.0的命令 - 仅包含架构描述、流程图、JSON 格式示例
文档文件:无问题。
现在撰写结束总结。
结束总结
按优先级统计发现问题
| 优先级 | 数量 | 说明 |
|---|---|---|
| P0 | 0 | — |
| P1 | 0 | — |
| P2 | 1 | GetAndCheckAippOutputShapeOm2 中 is_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 的完整数据流。核心问题为 GetAndCheckAippOutputShapeOm2 中 is_get_dim 标志的设置错误:当输入张量维度数不等于 4 时,会导致合法的 shape 被误判为不匹配。该问题与 OM1 已有代码模式一致,但在 OM2 中属于新引入。其余问题(哨兵值、strtol 无错误检查、代码重复)严重程度较低,但建议在后续迭代中修复以提高代码健壮性。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 1 |
| 🟡 建议 | 2 |
⛔ 需要修改


/approve


Pull Request
描述
变更摘要
本次 PR 为 OM2 模型执行模式实现了完整的动态 AIPP(AI 预处理)支持。此前 OM2 路径下的 AIPP 相关接口均返回 ACL_ERROR_API_NOT_SUPPORT,本次变更将这些接口全部实现,涵盖编译期元数据提取、运行时 AIPP 查询与设置、以及设备端参数下发。同时,将原 OM1 专属文件中定义的一组静态辅助函数(如 SetAippInfo、GetNpuArch、SetIODims 及调试字符串函数)抽取到 model_common 模块,供 OM1 与 OM2 路径共享。
主要改动
变更类型
请选择本次引入的变更类型:
关联的Issue
如何测试
描述测试此变更的步骤和前提条件:
1.
2.
核对清单
其他信息
在此添加任何其他关于本次 PR 的说明。