已合并
refactor(om2): 重构OM2序列化格式,优化存储结构 #4512
wuzheng创建于 15 天前
refactor(om2): 重构OM2序列化格式,优化存储结构 #4512
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 wuzheng 的贡献)atomgit-bot
15 天前 评论:
15 天前 评论:
变更摘要
本 PR 重构 OM2 文件中 model_meta.json 的序列化/反序列化格式,消除冗余字段:删除 root_graph_name(统一使用 model_name),将输入的 JSON key origin_input_dims 改名为 origin_shape(C++ 字段名不变),并把原先分散的 dynamic_batch_info、dynamic_output_shape、dynamic_type、user_designate_shape_order 四个字段整合为统一的 dynamic_dims 对象(含 gears 数组),非动态分档场景不再保存 dynamic_dims。同时将 OM2 归档版本号 OM2_ARCHIVE_VERSION_VALUE 由 "0" 升级为 "1.0",manifest.json 中的 model_num 改为以整数序列化。反序列化端(om2_model_executor.cc)按新格式重建内存结构,保持与原格式兼容。
主要改动
- 删除
root_graph_name字段:Om2ModelMeta结构体删除该字段,om2_package_helper.cc移除GetRootGraphName函数及其赋值逻辑,序列化端不再写入,执行器端LoadModelMetaFromStruct改用meta.model_name填充run_model_info_.root_graph_name。 origin_input_dims改名为origin_shape:om2_zip_saver.cc序列化与om2_model_executor.cc反序列化同步改用新 JSON key(C++ 字段名不变),保持内存结构兼容。- 动态分档信息重组为
dynamic_dims:序列化时仅在dynamic_batch_info非空时生成dynamic_dims,将dynamic_type、user_designate_shape_order纳入其中,各档位 inputs/outputs 整理为gears数组(outputs 由dynamic_output_shape字符串按档位解析还原);反序列化端从gears重建dynamic_batch_info与dynamic_output_shape,非动态场景不再序列化这些空字段。 - 版本号与 manifest 调整:
OM2_ARCHIVE_VERSION_VALUE由"0"改为"1.0",SerializeManifest将model_num由字符串改为整数(std::stoi)写入 JSON,相关单测/ST 用例同步更新。


atomgit-bot
15 天前 评论:
15 天前 评论:
代码审查
关闭总结
变更文件审查清单
| 文件 | 审查结果 |
|---|---|
base/common/helper/om2/om2_package_contants.h |
发现问题 — 版本号 "0"→"1.0" 导致 UT 期望值漂移(P2,见下) |
base/common/helper/om2/om2_zip_saver.cc |
发现问题 — dynamic_output_shape 解析错误导致动态输出形状丢失(P1);std::stoi 未捕获异常(P3) |
base/common/helper/om2_package_helper.cc |
no issues(删除 GetRootGraphName 及其赋值,无残留调用) |
base/common/om2/om2_model_data.h |
no issues(删除 root_graph_name 字段,全仓引用已同步更新) |
runtime/om2/om2_model_executor.cc |
发现问题 — 旧格式 model_meta.json 动态信息静默丢失(P2);root_graph_name 语义回归(P3) |
tests/ge/st/testcase/test_om2.cc |
no issues(新格式断言与序列化端一致) |
tests/ge/st/testcase/test_om2_online.cc |
no issues(仅删除 root_graph_name 赋值) |
tests/ge/ut/ge/common/om2_model_data_unittest.cc |
no issues |
tests/ge/ut/ge/executor/om2_model_executor_unittest.cc |
no issues(新格式数据与反序列化端一致) |
tests/ge/ut/ge/executor/om2_model_manager_unittest.cc |
no issues |
tests/ge/ut/ge/graph/execute/model_executor_unittest.cc |
no issues |
tests/ge/ut/ge/graph/load/om2_package_helper_unittest.cc |
发现问题 — 该文件 line 513 的 EXPECT_EQ(om2_version, "0") 未同步,UT 必失败(P2,锚定在常量变更行) |
tests/ge/ut/ge/graph/manager/graph_manager_unittest.cc |
no issues |
tests/ge/ut/ge/session/omg_omg_unittest.cc |
no issues |
发现统计
- P1 × 1:
om2_zip_saver.cc:381-395— 动态输出形状字符串解析错误,新 OM2 文件动态输出 dims 丢失/损坏 - P2 × 2: (a)
om2_model_executor.cc:463-494反序列化对旧格式文件静默丢数据;(b) 版本号 "1.0" 未同步到om2_package_helper_unittest.cc:513,UT 必然失败 - P3 × 2:
om2_zip_saver.cc:437std::stoi未捕获异常;om2_model_executor.cc:837root_graph_name 语义回归(dump 场景)
总体风险判断
本次重构的序列化/反序列化两端在同一 PR 内基本自洽,但存在两个实质性风险:序列化端对既有 dynamic_output_shape 字符串格式的解析错误(仓库内旧格式为 gear:out:dims 或纯 dims,均无法被按 , 拆分+stoll 的解析正确处理,动态模型输出形状信息会静默丢失,且该路径无测试覆盖),以及旧版本 OM2 文件加载时的静默数据丢失。另有一处确定的 UT 回归(om2_version 期望值未更新)。建议在合入前修复 P1/P2 问题并补充带动态输出形状的往返测试。
| 类型 | 数量 |
|---|---|
| 🔴 阻塞 | 0 |
| 🟡 建议 | 1 |
💬 仅评论


15 天前 添加了label:stat/needs-squash
15 天前 添加了label:cann-cla/yes
此处折叠了403条消息 查看更多
9 天前 添加了label:lgtm
9 天前 添加了label:approved
9 天前 合入了pull request
Pull Request
描述
重构 OM2 文件的序列化/反序列化格式,优化存储结构,消除冗余字段,统一动态分档信息的组织方式。
主要变更:
model_meta.json
root_graph_name字段:统一使用model_name,消除冗余dynamic_dims结构:将原来分散的dynamic_batch_info、dynamic_output_shape、dynamic_type、user_designate_shape_order四个字段整合为统一的dynamic_dims对象,包含gears数组dynamic_dims:避免空字段占用空间shape存储原始维度,max_gear_shape存储最大档位维度;静态场景shape存储实际维度shape_v2重命名为shape_aclmdlGetInputDimsV2:仅在has_aipp时序列化op_attr.json
data/model_N/debug/op_attr.json移到data/model_N/op_attr.jsonop_attr_map改为op_attr_json字符串,JSON 值增加type/value结构体其他
OM2_ARCHIVE_VERSION_VALUE从"0"改为"1.0"data/kernels_npu_arch/改为data/kernels/op_name字段,INTERNAL 类型使用constant_<index>作为 key,外部权重使用op_namemodel_num序列化为整数类型变更类型
关联的Issue
如何测试
bash build.sh --ge_compiler --ge_executor通过dynamic_dims、root_graph_namedynamic_dims.gears包含正确的 inputs/outputs 信息data/kernels/下正确存取核对清单
其他信息
涉及文件:
base/common/om2/om2_model_data.h- 删除root_graph_name,op_attr_map改为op_attr_jsonbase/common/helper/om2/om2_package_contants.h- 版本号、路径常量更新base/common/helper/om2/om2_zip_saver.cc- 序列化逻辑全面重构runtime/om2/om2_model_executor.cc- 反序列化逻辑全面重构base/common/helper/om2_package_helper.cc- 删除root_graph_name/GetRootGraphName,op_attr 构建逻辑重构base/common/om2/codegen/om2_codegen_model_builder.cc- INTERNAL 常量增加 file_name