已合并
fix: 修复OM2在线编译执行路径中的多个缺陷 #4122
wuzheng创建于 7月23日
fix: 修复OM2在线编译执行路径中的多个缺陷 #4122
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 wuzheng 的贡献)atomgit-bot
7月23日 评论:
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_path、key、priority三个字段,并在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.json和ge_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。


atomgit-bot
7月23日 评论:
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 |
P3:priority == 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 |
⛔ 需要修改


7月23日 添加了label:cann-cla/yes
CANN-robot
7月23日 评论:
7月23日 评论:
此处折叠了341条消息 查看更多
GengChao
7月27日 评论:
7月27日 评论:
/lgtm


7月27日 添加了label:lgtm
zhanj
7月27日 评论:
7月27日 评论:
/approve


7月27日 添加了label:approved
7月27日 合入了pull request
描述
修复 OM2 在线编译执行路径(commit 5f0e4c3d)中发现的多个缺陷,包括输出回写缺失、错误码映射异常、性能优化和 JSON 访问规范化。
主要变更
std::abort()替换为throw std::runtime_errorif检查返回ACL_ERROR_GE_PARAM_INVALID(145000),替代GE_ASSERT_TRUE返回的PARAM_INVALID(1343225857) 导致 ACL 错误码映射为通用 500002weight_path/key/priority字段,完善从 ModelData 到 LoadArg 的字段透传ModelData&改为(weight_path, om_path)字符串,消除不必要的中间对象构造ParseTensorDescFromJson签名改为const JsonFile&,consts 解析统一使用JsonFile::Get()封装变更类型
如何测试
ut_libge_distinct_load_utesttarget核对清单