已合并
fix: 修复OM2在线编译执行路径中的多个缺陷 #4122
wuzheng创建于 7月23日
fix: 修复OM2在线编译执行路径中的多个缺陷 #4122
已合并
wuzheng创建于 7月23日
wuzheng成员
7月23日

描述

修复 OM2 在线编译执行路径(commit 5f0e4c3d)中发现的多个缺陷,包括输出回写缺失、错误码映射异常、性能优化和 JSON 访问规范化。

主要变更

  1. RunGraphWithStream OM2 路径:添加 GertTensors2GeTensors 反向转换,修复输出未回写问题
  2. GetOm2ModelData:将 std::abort() 替换为 throw std::runtime_error
  3. Load(ModelData&) 错误码:使用显式 if 检查返回 ACL_ERROR_GE_PARAM_INVALID(145000),替代 GE_ASSERT_TRUE 返回的 PARAM_INVALID(1343225857) 导致 ACL 错误码映射为通用 500002
  4. Om2ModelLoadArg 字段扩展:新增 weight_path/key/priority 字段,完善从 ModelData 到 LoadArg 的字段透传
  5. ResolveFileConstWeightDir 签名优化:参数从 ModelData& 改为 (weight_path, om_path) 字符串,消除不必要的中间对象构造
  6. DeserializeDebugInfoFromArchive 性能优化:合并两个独立循环为单循环
  7. DeserializeOm2ModelDataFromArchive 性能优化:按目录前缀分类 entries,各子函数仅遍历自己目录下的文件,从 O(7N) 降为 O(N)
  8. JSON 访问规范化ParseTensorDescFromJson 签名改为 const JsonFile&,consts 解析统一使用 JsonFile::Get() 封装

变更类型

如何测试

  1. 编译 ut_libge_distinct_load_utest target
  2. 执行全部 1778 个用例,全部 PASSED(含 Om2ModelExecutorUt 55 cases、FileConstLoaderUt 18 cases)

核对清单

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 wuzheng 的贡献)
Wwuzheng成员
7月23日 创建了 pull request,commit 4d7ed7f2
atomgit-bot
atomgit-bot
7月23日 评论:

变更摘要

该 PR 修复了 OM2 在线编译执行路径中的多个缺陷,主要涉及:修复 RunGraphWithStream OM2 路径中输出张量未回写到上层 outputs 的问题;修正 Load(ModelData&)GE_ASSERT_TRUE 宏返回的通用错误码导致 ACL 错误码映射异常的问题;将 GetOm2ModelData 中的 std::abort() 替换为 throw std::runtime_error;在 Om2ModelLoadArg 中新增 weight_path/key/priority 字段并完善从 ModelData 的透传逻辑;重构 ParseTensorDescFromJson 及常量解析代码,统一使用 JsonFile::Get() 封装替代裸 JSON 访问;通过 ClassifyOm2Entries 对 ZIP entries 按目录前缀预分类,将反序列化从 O(7N) 降至 O(N),同时合并 DeserializeDebugInfoFromArchive 的双循环为单循环;优化 ResolveFileConstWeightDir 签名为 (weight_path, om_path) 字符串参数以消除不必要的临时 ModelData 对象构造。

主要改动

  • 输出回写修复: 在 ModelExecutor::RunGraphWithStream 的 OM2 执行路径末尾新增 GertTensors2GeTensors(gert_outputs, outputs) 调用,修复 OM2 在线编译执行后输出张量未正确回写到上层输出参数的问题。
  • 错误码映射修正: 在 Om2ModelExecutor::Load(ModelData&)DeserializeOm2ModelDataFromArchive 中将 GE_ASSERT_TRUE 宏替换为显式 if 检查并返回 ACL_ERROR_GE_PARAM_INVALID(145000),避免宏内部返回的 PARAM_INVALID(1343225857) 被 ACL 映射为通用错误码 500002。
  • Om2ModelLoadArg 字段扩展与透传: 在 Om2ModelLoadArg 结构体中新增 weight_pathkeypriority 三个字段,并在 Load(ModelData&) 中增加回退逻辑——当 load_arg 中这些字段为空/默认值时自动从 model_data 对应字段取值。
  • JSON 访问规范化与性能优化: 将 ParseTensorDescFromJson 签名从 const JsonFile::json& 改为 const JsonFile&,内部字段读取统一使用 JsonFile::Get() 封装;常量元数据解析同样改为 JsonFile::Get();新增 ClassifyOm2Entries/runtime//debug/data/constants/data/kernels_ 等前缀分类 entries,各子函数仅遍历自己的条目列表;合并 DeserializeDebugInfoFromArchive 中查找 op_attr.jsonge_visual_ 的两个独立循环为单循环。
  • 接口签名与异常处理优化: ResolveFileConstWeightDir 参数从 const ModelData& 改为 (const std::string &weight_path, const std::string &om_path),调用方不再需要构造临时 ModelData 对象;GetOm2ModelData 中将 std::abort() 替换为 throw std::runtime_error,对应单元测试从 EXPECT_DEATH 改为 EXPECT_THROW
likedislike
atomgit-bot
atomgit-bot
7月23日 评论:

代码审查

审查总结

优先级 数量
P0 1
P1 0
P2 0
P3 1

总体风险判断:高风险 — 存在一个 P0 链接错误,会导致任何调用 aclmdlLoadFromMemWithMem 的代码无法编译通过。


各文件审查结果

文件 结果
api/acl/acl_model/model/acl_model.cpp P0:函数重命名导致公共 API 无定义
base/common/model/ge_root_model.cc 无问题(std::abort()throw 正确)
inc/framework/runtime/om2_model_executor.h 无问题(字段扩展正确)
runtime/om2/file_const_loader.cc 无问题(签名重构正确)
runtime/om2/file_const_loader.h 无问题(声明更新正确)
runtime/om2/om2_model_executor.cc P3priority == 0 哨兵存在歧义;其余变更(JSON 规范化、条目分类、字段透传)正确
runtime/v1/graph/execute/model_executor.cc 无问题(输出回写修复正确)
tests/ge/ut/ge/common/ge_root_model_unittest.cc 无问题(测试更新匹配新行为)
tests/ge/ut/ge/executor/file_const_loader_unittest.cc 无问题(测试更新匹配新签名)
类型 数量
🔴 阻塞 1
🟡 建议 0

⛔ 需要修改

likedislike
CANN-robotCANN-robot成员
7月23日 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
7月23日 评论:

CLA Signature Pass

wuzheng-hw, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
此处折叠了341条消息 查看更多
GengChao
GengChao成员
7月27日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
7月27日 添加了label:lgtm
zhanj
zhanj成员
7月27日 评论:

/approve

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