已合并
refactor(om2): 重构OM2序列化格式,优化存储结构 #4512
wuzheng创建于 15 天前
refactor(om2): 重构OM2序列化格式,优化存储结构 #4512
已合并
wuzheng创建于 15 天前
wuzheng成员
15 天前

Pull Request

描述

重构 OM2 文件的序列化/反序列化格式,优化存储结构,消除冗余字段,统一动态分档信息的组织方式。

主要变更:

model_meta.json

  1. 删除 root_graph_name 字段:统一使用 model_name,消除冗余
  2. 动态分档信息重组为 dynamic_dims 结构:将原来分散的 dynamic_batch_infodynamic_output_shapedynamic_typeuser_designate_shape_order 四个字段整合为统一的 dynamic_dims 对象,包含 gears 数组
  3. 非动态分档场景不保存 dynamic_dims:避免空字段占用空间
  4. input shape 语义优化:动态分档场景下 shape 存储原始维度,max_gear_shape 存储最大档位维度;静态场景 shape 存储实际维度
  5. shape_v2 重命名为 shape_aclmdlGetInputDimsV2:仅在 has_aipp 时序列化

op_attr.json

  1. 路径变更:从 data/model_N/debug/op_attr.json 移到 data/model_N/op_attr.json
  2. 存储格式重构op_attr_map 改为 op_attr_json 字符串,JSON 值增加 type/value 结构体

其他

  1. OM2 版本号升级OM2_ARCHIVE_VERSION_VALUE"0" 改为 "1.0"
  2. kernels 目录简化:从 data/kernels_npu_arch/ 改为 data/kernels/
  3. constants config 优化:删除 op_name 字段,INTERNAL 类型使用 constant_<index> 作为 key,外部权重使用 op_name
  4. manifest.json 优化:4空格缩进格式化输出,model_num 序列化为整数类型

变更类型

关联的Issue

如何测试

  1. 编译验证:bash build.sh --ge_compiler --ge_executor 通过
  2. 静态模型序列化后 JSON 中不包含 dynamic_dimsroot_graph_name
  3. 动态分档模型序列化后 dynamic_dims.gears 包含正确的 inputs/outputs 信息
  4. 反序列化后内存结构与原格式兼容,消费侧无需修改
  5. op_attr.json 在新路径正确读写,JSON 格式包含 type/value 结构
  6. kernels 在新路径 data/kernels/ 下正确存取

核对清单

其他信息

涉及文件:

  • base/common/om2/om2_model_data.h - 删除 root_graph_nameop_attr_map 改为 op_attr_json
  • base/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
  • 10个测试文件更新
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 wuzheng 的贡献)
Wwuzheng成员
15 天前 创建了 pull request,commit ed3c983d
atomgit-bot
atomgit-bot
15 天前 评论:

变更摘要

本 PR 重构 OM2 文件中 model_meta.json 的序列化/反序列化格式,消除冗余字段:删除 root_graph_name(统一使用 model_name),将输入的 JSON key origin_input_dims 改名为 origin_shape(C++ 字段名不变),并把原先分散的 dynamic_batch_infodynamic_output_shapedynamic_typeuser_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_shapeom2_zip_saver.cc 序列化与 om2_model_executor.cc 反序列化同步改用新 JSON key(C++ 字段名不变),保持内存结构兼容。
  • 动态分档信息重组为 dynamic_dims:序列化时仅在 dynamic_batch_info 非空时生成 dynamic_dims,将 dynamic_typeuser_designate_shape_order 纳入其中,各档位 inputs/outputs 整理为 gears 数组(outputs 由 dynamic_output_shape 字符串按档位解析还原);反序列化端从 gears 重建 dynamic_batch_infodynamic_output_shape,非动态场景不再序列化这些空字段。
  • 版本号与 manifest 调整OM2_ARCHIVE_VERSION_VALUE"0" 改为 "1.0"SerializeManifestmodel_num 由字符串改为整数(std::stoi)写入 JSON,相关单测/ST 用例同步更新。
likedislike
atomgit-bot
atomgit-bot
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:437 std::stoi 未捕获异常;om2_model_executor.cc:837 root_graph_name 语义回归(dump 场景)

总体风险判断

本次重构的序列化/反序列化两端在同一 PR 内基本自洽,但存在两个实质性风险:序列化端对既有 dynamic_output_shape 字符串格式的解析错误(仓库内旧格式为 gear:out:dims 或纯 dims,均无法被按 , 拆分+stoll 的解析正确处理,动态模型输出形状信息会静默丢失,且该路径无测试覆盖),以及旧版本 OM2 文件加载时的静默数据丢失。另有一处确定的 UT 回归(om2_version 期望值未更新)。建议在合入前修复 P1/P2 问题并补充带动态输出形状的往返测试。

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

💬 仅评论

likedislike
CANN-robotCANN-robot成员
15 天前 添加了label:stat/needs-squash
CANN-robotCANN-robot成员
15 天前 添加了label:cann-cla/yes
此处折叠了403条消息 查看更多
ClarkXie成员
9 天前 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
9 天前 添加了label:lgtm
张德鹏成员
9 天前 评论:

/approve

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