已合并
refactor(om2): 重构OM2序列化格式,优化存储结构 #4512
wuzheng创建于 16 天前
refactor(om2): 重构OM2序列化格式,优化存储结构 #4512
已合并
共 18 个文件变更+722-356
| @@ -1688,7 +1688,7 @@ const char *aclmdlGetOpAttrImplOm2(aclmdlDesc *modelDesc, const char *opName, co | |||
| 1688 | return itAttr->second.c_str(); | 1688 | return itAttr->second.c_str(); |
| 1689 | } | 1689 | } |
| 1690 | } | 1690 | } |
| 1691 | - return nullptr; | 1691 | + return ""; |
| 1692 | } | 1692 | } |
| 1693 | 1693 | ||
| 1694 | const char *aclmdlGetInputNameByIndexImplOm2(const aclmdlDesc *modelDesc, size_t index) { | 1694 | const char *aclmdlGetInputNameByIndexImplOm2(const aclmdlDesc *modelDesc, size_t index) { |
| @@ -18,7 +18,7 @@ | |||
| 18 | namespace ge { | 18 | namespace ge { |
| 19 | 19 | ||
| 20 | DO(OM2_ARCHIVE_VERSION, "om2_version"); \ | 20 | DO(OM2_ARCHIVE_VERSION, "om2_version"); \ |
| 21 | - DO(OM2_ARCHIVE_VERSION_VALUE, "0"); \ | 21 | + DO(OM2_ARCHIVE_VERSION_VALUE, "1.0"); \ |
| 22 | DO(OM2_MODEL_NUM, "model_num"); \ | 22 | DO(OM2_MODEL_NUM, "model_num"); \ |
| 23 | DO(OM2_ATC_COMMAND, "atc_command"); \ | 23 | DO(OM2_ATC_COMMAND, "atc_command"); \ |
| 24 | DO(OM2_MANIFEST_PATH, "manifest.json"); \ | 24 | DO(OM2_MANIFEST_PATH, "manifest.json"); \ |
| @@ -27,9 +27,9 @@ namespace ge { | |||
| 27 | DO(OM2_MODEL_META_PATH_FORMAT, "data/model_%s/model_meta.json"); \ | 27 | DO(OM2_MODEL_META_PATH_FORMAT, "data/model_%s/model_meta.json"); \ |
| 28 | DO(OM2_RUNTIME_DIR_FORMAT, "data/model_%s/runtime/"); \ | 28 | DO(OM2_RUNTIME_DIR_FORMAT, "data/model_%s/runtime/"); \ |
| 29 | DO(OM2_DEBUG_DIR_FORMAT, "data/model_%s/debug/"); \ | 29 | DO(OM2_DEBUG_DIR_FORMAT, "data/model_%s/debug/"); \ |
| 30 | - DO(OM2_OP_ATTR_PATH_FORMAT, "data/model_%s/debug/op_attr.json"); \ | 30 | + DO(OM2_OP_ATTR_PATH_FORMAT, "data/model_%s/op_attr.json"); \ |
| 31 | DO(OM2_CUSTOM_KERNELS_DIR_FORMAT, "data/custom_ops/%s/"); \ | 31 | DO(OM2_CUSTOM_KERNELS_DIR_FORMAT, "data/custom_ops/%s/"); \ |
| 32 | - DO(OM2_KERNELS_DIR_FORMAT, "data/kernels_%s/"); \ | 32 | + DO(OM2_KERNELS_DIR, "data/kernels/"); \ |
| 33 | DO(OM2_CONSTANTS_DIR, "data/constants/"); \ | 33 | DO(OM2_CONSTANTS_DIR, "data/constants/"); \ |
| 34 | DO(OM2_CONSTANTS_FILE_PREFIX, "constant_"); \ | 34 | DO(OM2_CONSTANTS_FILE_PREFIX, "constant_"); \ |
| 35 | DO(OM2_CONSTANTS_CONFIG_PATH_FORMAT, "data/constants/model_%s_constants_config.json"); \ | 35 | DO(OM2_CONSTANTS_CONFIG_PATH_FORMAT, "data/constants/model_%s_constants_config.json"); \ |
| @@ -11,6 +11,7 @@ | |||
| 11 | 11 | ||
| 12 | 12 | ||
| 13 | 13 | ||
| 14 | + | ||
| 14 | 15 | ||
| 15 | 16 | ||
| 16 | 17 | ||
| @@ -29,20 +30,6 @@ bool EndsWith(const std::string &str, const std::string &suffix) { | |||
| 29 | return (str.size() >= suffix.size()) && (str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0); | 30 | return (str.size() >= suffix.size()) && (str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0); |
| 30 | } | 31 | } |
| 31 | 32 | ||
| 32 | -std::string SerializeOpAttrMapToJson(const std::map<std::string, std::map<std::string, std::string>> &op_attr_map) { | ||
| 33 | - nlohmann::json json_obj = nlohmann::json::object(); | ||
| 34 | - | ||
| 35 | - for (const auto &[op_name, attrs] : op_attr_map) { | ||
| 36 | - nlohmann::json op_attrs = nlohmann::json::object(); | ||
| 37 | - for (const auto &[attr_name, value] : attrs) { | ||
| 38 | - op_attrs[attr_name] = value; | ||
| 39 | - } | ||
| 40 | - json_obj[op_name] = op_attrs; | ||
| 41 | - } | ||
| 42 | - | ||
| 43 | - return json_obj.dump(); | ||
| 44 | -} | ||
| 45 | - | ||
| 46 | JsonFile SerializeTensorDesc(const ge::Om2TensorDesc &desc) { | 33 | JsonFile SerializeTensorDesc(const ge::Om2TensorDesc &desc) { |
| 47 | JsonFile json; | 34 | JsonFile json; |
| 48 | (void)json.Set("name", desc.GetName()); | 35 | (void)json.Set("name", desc.GetName()); |
| @@ -94,10 +81,8 @@ Status SerializeConstantsConfig(const gert::Om2ModelData &model_data, | |||
| 94 | (void)json_file.Set("internal_weight_size", model_data.constants_data.internal_weight_size); | 81 | (void)json_file.Set("internal_weight_size", model_data.constants_data.internal_weight_size); |
| 95 | auto const_json_object = JsonFile::json::object(); | 82 | auto const_json_object = JsonFile::json::object(); |
| 96 | for (const auto &const_meta : model_data.constants_data.consts) { | 83 | for (const auto &const_meta : model_data.constants_data.consts) { |
| 97 | - std::string const_key = const_meta.op_name.empty() ? const_meta.file_name : const_meta.op_name; | 84 | + const std::string const_key = |
| 98 | - if (const_key.empty()) { | 85 | + (const_meta.type == "INTERNAL") ? "constant_" + std::to_string(const_meta.index) : const_meta.op_name; |
| 99 | - const_key = "constant_" + std::to_string(const_meta.index); | ||
| 100 | - } | ||
| 101 | JsonFile const_info; | 86 | JsonFile const_info; |
| 102 | (void)const_info.Set("index", const_meta.index); | 87 | (void)const_info.Set("index", const_meta.index); |
| 103 | (void)const_info.Set("type", const_meta.type); | 88 | (void)const_info.Set("type", const_meta.type); |
| @@ -107,7 +92,6 @@ Status SerializeConstantsConfig(const gert::Om2ModelData &model_data, | |||
| 107 | } | 92 | } |
| 108 | (void)const_info.Set("offset", const_meta.offset); | 93 | (void)const_info.Set("offset", const_meta.offset); |
| 109 | (void)const_info.Set("size", const_meta.size); | 94 | (void)const_info.Set("size", const_meta.size); |
| 110 | - (void)const_info.Set("op_name", const_meta.op_name); | ||
| 111 | const_json_object[const_key] = const_info.Raw(); | 95 | const_json_object[const_key] = const_info.Raw(); |
| 112 | } | 96 | } |
| 113 | (void)json_file.Set("consts", const_json_object); | 97 | (void)json_file.Set("consts", const_json_object); |
| @@ -200,7 +184,7 @@ Status SerializeVarMetas(const gert::Om2ModelData &model_data, const std::shared | |||
| 200 | 184 | ||
| 201 | Status SerializeKernelBinaries(const gert::Om2ModelData &model_data, | 185 | Status SerializeKernelBinaries(const gert::Om2ModelData &model_data, |
| 202 | const std::shared_ptr<ZipArchiveWriter> &zip_writer) { | 186 | const std::shared_ptr<ZipArchiveWriter> &zip_writer) { |
| 203 | - const auto kernel_bin_dir = FormatOm2Path(OM2_KERNELS_DIR_FORMAT, "npu_arch"); | 187 | + const auto kernel_bin_dir = OM2_KERNELS_DIR; |
| 204 | for (const auto &kb : model_data.kernel_binaries) { | 188 | for (const auto &kb : model_data.kernel_binaries) { |
| 205 | const auto entry_path = kernel_bin_dir + kb.name; | 189 | const auto entry_path = kernel_bin_dir + kb.name; |
| 206 | GE_ASSERT_TRUE(zip_writer->WriteBytes(entry_path, kb.data.get(), kb.data_size, false)); | 190 | GE_ASSERT_TRUE(zip_writer->WriteBytes(entry_path, kb.data.get(), kb.data_size, false)); |
| @@ -336,16 +320,19 @@ Status SerializeModelMeta(const gert::Om2ModelData &model_data, const std::share | |||
| 336 | JsonFile input_info; | 320 | JsonFile input_info; |
| 337 | (void)input_info.Set("name", desc.GetName()); | 321 | (void)input_info.Set("name", desc.GetName()); |
| 338 | (void)input_info.Set("index", i); | 322 | (void)input_info.Set("index", i); |
| 339 | - (void)input_info.Set("shape", desc.GetShape()); | 323 | + if (!model_data.model_meta.dynamic_batch_info.empty()) { |
| 340 | - (void)input_info.Set("shape_v2", desc_v2.GetShape()); | 324 | + (void)input_info.Set("shape", model_data.model_meta.origin_input_dims[i]); |
| 325 | + (void)input_info.Set("max_gear_shape", desc.GetShape()); | ||
| 326 | + } else { | ||
| 327 | + (void)input_info.Set("shape", desc.GetShape()); | ||
| 328 | + } | ||
| 329 | + if (model_data.model_meta.has_aipp) { | ||
| 330 | + (void)input_info.Set("shape_aclmdlGetInputDimsV2", desc_v2.GetShape()); | ||
| 331 | + } | ||
| 341 | (void)input_info.Set("data_type", TypeUtils::DataTypeToSerialString(desc.GetDataType())); | 332 | (void)input_info.Set("data_type", TypeUtils::DataTypeToSerialString(desc.GetDataType())); |
| 342 | (void)input_info.Set("format", TypeUtils::FormatToSerialString(desc.GetFormat())); | 333 | (void)input_info.Set("format", TypeUtils::FormatToSerialString(desc.GetFormat())); |
| 343 | (void)input_info.Set("size", desc.GetSize()); | 334 | (void)input_info.Set("size", desc.GetSize()); |
| 344 | (void)input_info.Set("shape_range", desc.GetShapeRange()); | 335 | (void)input_info.Set("shape_range", desc.GetShapeRange()); |
| 345 | - const auto origin_dims = (i < model_data.model_meta.origin_input_dims.size()) | ||
| 346 | - ? model_data.model_meta.origin_input_dims[i] | ||
| 347 | - : desc.GetShape(); | ||
| 348 | - (void)input_info.Set("origin_input_dims", origin_dims); | ||
| 349 | input_json_array.push_back(input_info.Raw()); | 336 | input_json_array.push_back(input_info.Raw()); |
| 350 | } | 337 | } |
| 351 | 338 | ||
| @@ -365,14 +352,51 @@ Status SerializeModelMeta(const gert::Om2ModelData &model_data, const std::share | |||
| 365 | 352 | ||
| 366 | (void)model_meta_info.Set("inputs", input_json_array); | 353 | (void)model_meta_info.Set("inputs", input_json_array); |
| 367 | (void)model_meta_info.Set("outputs", output_json_array); | 354 | (void)model_meta_info.Set("outputs", output_json_array); |
| 368 | - (void)model_meta_info.Set("dynamic_output_shape", model_data.model_meta.dynamic_output_shape); | 355 | + |
| 369 | - (void)model_meta_info.Set("dynamic_batch_info", model_data.model_meta.dynamic_batch_info); | 356 | + if (!model_data.model_meta.dynamic_batch_info.empty()) { |
| 370 | - (void)model_meta_info.Set("user_designate_shape_order", model_data.model_meta.user_designate_shape_order); | 357 | + JsonFile dynamic_dims_json; |
| 371 | - (void)model_meta_info.Set("dynamic_type", model_data.model_meta.dynamic_type); | 358 | + (void)dynamic_dims_json.Set("dynamic_type", model_data.model_meta.dynamic_type); |
| 359 | + (void)dynamic_dims_json.Set("user_designate_shape_order", model_data.model_meta.user_designate_shape_order); | ||
| 360 | + | ||
| 361 | + std::map<size_t, std::vector<JsonFile::json>> gear_outputs; | ||
| 362 | + for (const auto &shape_str : model_data.model_meta.dynamic_output_shape) { | ||
| 363 | + std::vector<int64_t> values; | ||
| 364 | + std::istringstream iss(shape_str); | ||
| 365 | + std::string token; | ||
| 366 | + while (std::getline(iss, token, ',')) { | ||
| 367 | + values.push_back(std::stoll(token)); | ||
| 368 | + } | ||
| 369 | + if (values.size() >= 2UL && values[0] >= 0) { | ||
| 370 | + auto dims = JsonFile::json::array(); | ||
| 371 | + for (size_t i = 2UL; i < values.size(); ++i) { | ||
| 372 | + dims.push_back(values[i]); | ||
| 373 | + } | ||
| 374 | + gear_outputs[static_cast<size_t>(values[0])].push_back(std::move(dims)); | ||
| 375 | + } | ||
| 376 | + } | ||
| 377 | + | ||
| 378 | + auto gears_array = JsonFile::json::array(); | ||
| 379 | + for (size_t gear_idx = 0UL; gear_idx < model_data.model_meta.dynamic_batch_info.size(); ++gear_idx) { | ||
| 380 | + JsonFile gear_json; | ||
| 381 | + (void)gear_json.Set("inputs", model_data.model_meta.dynamic_batch_info[gear_idx]); | ||
| 382 | + | ||
| 383 | + auto outputs_array = JsonFile::json::array(); | ||
| 384 | + auto it = gear_outputs.find(gear_idx); | ||
| 385 | + if (it != gear_outputs.end()) { | ||
| 386 | + for (const auto &dims : it->second) { | ||
| 387 | + outputs_array.push_back(dims); | ||
| 388 | + } | ||
| 389 | + } | ||
| 390 | + (void)gear_json.Set("outputs", outputs_array); | ||
| 391 | + gears_array.push_back(gear_json.Raw()); | ||
| 392 | + } | ||
| 393 | + (void)dynamic_dims_json.Set("gears", gears_array); | ||
| 394 | + (void)model_meta_info.Set("dynamic_dims", dynamic_dims_json); | ||
| 395 | + } | ||
| 396 | + | ||
| 372 | (void)model_meta_info.Set("work_size", model_data.model_meta.work_size); | 397 | (void)model_meta_info.Set("work_size", model_data.model_meta.work_size); |
| 373 | (void)model_meta_info.Set("zero_copy_size", model_data.model_meta.zero_copy_size); | 398 | (void)model_meta_info.Set("zero_copy_size", model_data.model_meta.zero_copy_size); |
| 374 | (void)model_meta_info.Set("name", model_data.model_meta.model_name); | 399 | (void)model_meta_info.Set("name", model_data.model_meta.model_name); |
| 375 | - (void)model_meta_info.Set("root_graph_name", model_data.model_meta.root_graph_name); | ||
| 376 | 400 | ||
| 377 | // 序列化 AIPP 元数据 | 401 | // 序列化 AIPP 元数据 |
| 378 | SerializeAippMeta(model_data.model_meta, model_meta_info); | 402 | SerializeAippMeta(model_data.model_meta, model_meta_info); |
| @@ -387,9 +411,8 @@ Status SerializeModelMeta(const gert::Om2ModelData &model_data, const std::share | |||
| 387 | Status SerializeDebugInfo(const gert::Om2ModelData &model_data, const std::shared_ptr<ZipArchiveWriter> &zip_writer) { | 411 | Status SerializeDebugInfo(const gert::Om2ModelData &model_data, const std::shared_ptr<ZipArchiveWriter> &zip_writer) { |
| 388 | const size_t model_index = 0UL; | 412 | const size_t model_index = 0UL; |
| 389 | // op_attr.json | 413 | // op_attr.json |
| 390 | - const auto op_attr_json_str = model_data.debug_info.op_attr_map.empty() | 414 | + const auto &op_attr_json_str = |
| 391 | - ? std::string("{}") | 415 | + model_data.debug_info.op_attr_json.empty() ? std::string("{}") : model_data.debug_info.op_attr_json; |
W | |||
| 392 | - : SerializeOpAttrMapToJson(model_data.debug_info.op_attr_map); | ||
| 393 | const auto op_attr_entry_path = FormatOm2Path(OM2_OP_ATTR_PATH_FORMAT, std::to_string(model_index).c_str()); | 416 | const auto op_attr_entry_path = FormatOm2Path(OM2_OP_ATTR_PATH_FORMAT, std::to_string(model_index).c_str()); |
| 394 | GE_ASSERT_TRUE(zip_writer->WriteBytes(op_attr_entry_path, op_attr_json_str.data(), op_attr_json_str.size(), false)); | 417 | GE_ASSERT_TRUE(zip_writer->WriteBytes(op_attr_entry_path, op_attr_json_str.data(), op_attr_json_str.size(), false)); |
| 395 | 418 | ||
| @@ -403,9 +426,17 @@ Status SerializeDebugInfo(const gert::Om2ModelData &model_data, const std::share | |||
| 403 | Status SerializeManifest(const gert::Om2ModelData &model_data, const std::shared_ptr<ZipArchiveWriter> &zip_writer) { | 426 | Status SerializeManifest(const gert::Om2ModelData &model_data, const std::shared_ptr<ZipArchiveWriter> &zip_writer) { |
| 404 | nlohmann::json manifest_json = nlohmann::json::object(); | 427 | nlohmann::json manifest_json = nlohmann::json::object(); |
| 405 | for (const auto &[key, value] : model_data.manifest) { | 428 | for (const auto &[key, value] : model_data.manifest) { |
| 406 | - manifest_json[key] = value; | 429 | + if (key == OM2_MODEL_NUM) { |
| 430 | + try { | ||
| 431 | + manifest_json[key] = std::stoi(value); | ||
| 432 | + } catch (const std::exception &) { | ||
| 433 | + manifest_json[key] = value; | ||
| 434 | + } | ||
| 435 | + } else { | ||
| 436 | + manifest_json[key] = value; | ||
| 437 | + } | ||
| 407 | } | 438 | } |
| 408 | - const auto manifest_str = manifest_json.dump(); | 439 | + const auto manifest_str = manifest_json.dump(4); |
| 409 | GE_ASSERT_TRUE(zip_writer->WriteBytes(OM2_MANIFEST_PATH, manifest_str.data(), manifest_str.size(), false)); | 440 | GE_ASSERT_TRUE(zip_writer->WriteBytes(OM2_MANIFEST_PATH, manifest_str.data(), manifest_str.size(), false)); |
| 410 | return SUCCESS; | 441 | return SUCCESS; |
| 411 | } | 442 | } |
| @@ -415,12 +446,11 @@ Status SerializeManifest(const gert::Om2ModelData &model_data, const std::shared | |||
| 415 | Status Om2ZipSaver::Save(const gert::Om2ModelData &model_data, ModelBufferData &model, const bool is_offline, | 446 | Status Om2ZipSaver::Save(const gert::Om2ModelData &model_data, ModelBufferData &model, const bool is_offline, |
| 416 | const std::string &writer_path) { | 447 | const std::string &writer_path) { |
| 417 | GELOGI( | 448 | GELOGI( |
| 418 | - "[OM2] Begin to serialize Om2ModelData to ZIP, model_name:%s, root_graph:%s, " | 449 | + "[OM2] Begin to serialize Om2ModelData to ZIP, model_name:%s, " |
| 419 | "inputs:%zu, outputs:%zu, kernels:%zu, custom kernels: %zu, weight_size:%zu", | 450 | "inputs:%zu, outputs:%zu, kernels:%zu, custom kernels: %zu, weight_size:%zu", |
| 420 | - model_data.model_meta.model_name.c_str(), model_data.model_meta.root_graph_name.c_str(), | 451 | + model_data.model_meta.model_name.c_str(), model_data.model_meta.input_desc.size(), |
| 421 | - model_data.model_meta.input_desc.size(), model_data.model_meta.output_desc.size(), | 452 | + model_data.model_meta.output_desc.size(), model_data.kernel_binaries.size(), |
| 422 | - model_data.kernel_binaries.size(), model_data.custom_kernel_binaries.size(), | 453 | + model_data.custom_kernel_binaries.size(), model_data.constants_data.internal_weight_size); |
| 423 | - model_data.constants_data.internal_weight_size); | ||
| 424 | const std::string path = writer_path.empty() ? "om2_model" : writer_path; | 454 | const std::string path = writer_path.empty() ? "om2_model" : writer_path; |
| 425 | auto zip_writer = std::make_shared<ZipArchiveWriter>(path); | 455 | auto zip_writer = std::make_shared<ZipArchiveWriter>(path); |
| 426 | GE_ASSERT_NOTNULL(zip_writer); | 456 | GE_ASSERT_NOTNULL(zip_writer); |
| @@ -248,17 +248,6 @@ Status CollectDynamicBatchInfo(const std::vector<OpDescPtr> &case_ops, ModelMeta | |||
| 248 | return SUCCESS; | 248 | return SUCCESS; |
| 249 | } | 249 | } |
| 250 | 250 | ||
| 251 | -std::string GetRootGraphName(const GeModelPtr &ge_model) { | ||
| 252 | - if (ge_model == nullptr) { | ||
| 253 | - return ""; | ||
| 254 | - } | ||
| 255 | - auto graph = ge_model->GetGraph(); | ||
| 256 | - while ((graph != nullptr) && (graph->GetParentGraph() != nullptr)) { | ||
| 257 | - graph = graph->GetParentGraph(); | ||
| 258 | - } | ||
| 259 | - return (graph == nullptr) ? "" : graph->GetName(); | ||
| 260 | -} | ||
| 261 | - | ||
| 262 | Status SetOm2CompatibleOmInfoList(const GeModelPtr &ge_model) { | 251 | Status SetOm2CompatibleOmInfoList(const GeModelPtr &ge_model) { |
| 263 | std::vector<int64_t> om_info; | 252 | std::vector<int64_t> om_info; |
| 264 | om_info.push_back(static_cast<int64_t>(ge_model->GetWeightSize())); | 253 | om_info.push_back(static_cast<int64_t>(ge_model->GetWeightSize())); |
| @@ -937,7 +926,6 @@ Status Om2PackageHelper::BuildModelMeta(const GeModelPtr &ge_model, gert::Om2Mod | |||
| 937 | GE_ASSERT_SUCCESS(CollectDynamicBatchInfo(io_nodes.case_ops, extra_info)); | 926 | GE_ASSERT_SUCCESS(CollectDynamicBatchInfo(io_nodes.case_ops, extra_info)); |
| 938 | 927 | ||
| 939 | model_meta.model_name = ge_model->GetName(); | 928 | model_meta.model_name = ge_model->GetName(); |
| 940 | - model_meta.root_graph_name = GetRootGraphName(ge_model); | ||
| 941 | int64_t work_size = 0; | 929 | int64_t work_size = 0; |
| 942 | (void)AttrUtils::GetInt(ge_model, ATTR_MODEL_MEMORY_SIZE, work_size); | 930 | (void)AttrUtils::GetInt(ge_model, ATTR_MODEL_MEMORY_SIZE, work_size); |
| 943 | model_meta.work_size = static_cast<size_t>(work_size); | 931 | model_meta.work_size = static_cast<size_t>(work_size); |
| @@ -986,26 +974,28 @@ Status Om2PackageHelper::BuildDebugInfo(const GeModelPtr &ge_model, gert::Om2Mod | |||
| 986 | GE_ASSERT_NOTNULL(graph); | 974 | GE_ASSERT_NOTNULL(graph); |
| 987 | gert::Om2DebugInfo &debug_info = model_data.debug_info; | 975 | gert::Om2DebugInfo &debug_info = model_data.debug_info; |
| 988 | 976 | ||
| 989 | - // Build op_attr_map | 977 | + auto op_attr_object = JsonFile::json::object(); |
| 978 | + | ||
| 990 | for (const auto &node : graph->GetNodes(graph->GetGraphUnknownFlag())) { | 979 | for (const auto &node : graph->GetNodes(graph->GetGraphUnknownFlag())) { |
| 991 | const auto &op_desc = node->GetOpDesc(); | 980 | const auto &op_desc = node->GetOpDesc(); |
| 992 | GE_ASSERT_NOTNULL(op_desc); | 981 | GE_ASSERT_NOTNULL(op_desc); |
| 993 | std::vector<std::string> original_op_names; | 982 | std::vector<std::string> original_op_names; |
| 994 | - if (AttrUtils::GetListStr(op_desc, ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_op_names)) { | 983 | + if (AttrUtils::GetListStr(op_desc, ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, original_op_names) && |
| 995 | - std::map<std::string, std::string> op_attrs; | 984 | + !original_op_names.empty()) { |
| 996 | - // Serialize the LIST_STRING value as "[N]value[N]value..." format | 985 | + auto attr_value_object = JsonFile::json::object(); |
| 997 | - std::string serialized_value; | 986 | + attr_value_object["type"] = "LIST_STRING"; |
| 998 | - for (const auto &op_name : original_op_names) { | 987 | + attr_value_object["value"] = original_op_names; |
| 999 | - serialized_value += "[" + std::to_string(op_name.size()) + "]" + op_name; | 988 | + |
| 1000 | - } | 989 | + auto op_attr_entry = JsonFile::json::object(); |
| 1001 | - if (!serialized_value.empty()) { | 990 | + op_attr_entry[ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES] = attr_value_object; |
| 1002 | - op_attrs[ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES] = serialized_value; | 991 | + |
| 1003 | - debug_info.op_attr_map[op_desc->GetName()] = op_attrs; | 992 | + op_attr_object[op_desc->GetName()] = op_attr_entry; |
| 1004 | - } | ||
| 1005 | } | 993 | } |
| 1006 | } | 994 | } |
| 1007 | 995 | ||
| 1008 | - // Build visual json | 996 | + JsonFile op_attr_json(op_attr_object); |
| 997 | + debug_info.op_attr_json = op_attr_json.Dump(); | ||
| 998 | + | ||
| 1009 | GE_ASSERT_SUCCESS(SetOm2CompatibleOmInfoList(ge_model)); | 999 | GE_ASSERT_SUCCESS(SetOm2CompatibleOmInfoList(ge_model)); |
| 1010 | GE_ASSERT_SUCCESS(VisualJsonConverter::SerializeFromGeModel(ge_model, debug_info.visual_json)); | 1000 | GE_ASSERT_SUCCESS(VisualJsonConverter::SerializeFromGeModel(ge_model, debug_info.visual_json)); |
| 1011 | GELOGI("[OM2] Successfully built debug info"); | 1001 | GELOGI("[OM2] Successfully built debug info"); |
| @@ -17,6 +17,7 @@ | |||
| 17 | 17 | ||
| 18 | 18 | ||
| 19 | 19 | ||
| 20 | + | ||
| 20 | 21 | ||
| 21 | 22 | ||
| 22 | 23 | ||
| @@ -97,7 +98,9 @@ Status Om2CodegenModelBuilder::CollectConstInputsFromOp(const OpDescPtr &op_desc | |||
| 97 | GE_ASSERT_SUCCESS(Om2ModelUtils::BuildInputTensorInfo(tensor_desc, entry.tensor_info)); | 98 | GE_ASSERT_SUCCESS(Om2ModelUtils::BuildInputTensorInfo(tensor_desc, entry.tensor_info)); |
| 98 | codegen_model.const_inputs.push_back(std::move(entry)); | 99 | codegen_model.const_inputs.push_back(std::move(entry)); |
| 99 | (void)weight_offset_to_varname_.emplace(data_offset, var_name); | 100 | (void)weight_offset_to_varname_.emplace(data_offset, var_name); |
| 100 | - const_metas.push_back(Om2ConstMeta{const_index, "INTERNAL", "", "", data_offset, tensor_size, ""}); | 101 | + const size_t model_index = 0UL; |
| 102 | + const auto file_name = FormatOm2Path("%s%zu", OM2_CONSTANTS_FILE_PREFIX, model_index); | ||
| 103 | + const_metas.push_back(Om2ConstMeta{const_index, "INTERNAL", file_name, "", data_offset, tensor_size, ""}); | ||
| 101 | } | 104 | } |
| 102 | return SUCCESS; | 105 | return SUCCESS; |
| 103 | } | 106 | } |
| @@ -52,7 +52,6 @@ using Om2AippInfo = Om2AippMeta; | |||
| 52 | /// 模型元数据 | 52 | /// 模型元数据 |
| 53 | struct Om2ModelMeta { | 53 | struct Om2ModelMeta { |
| 54 | std::string model_name; | 54 | std::string model_name; |
| 55 | - std::string root_graph_name; | ||
| 56 | size_t work_size = 0U; | 55 | size_t work_size = 0U; |
| 57 | int64_t zero_copy_size = 0; | 56 | int64_t zero_copy_size = 0; |
| 58 | std::vector<ge::Om2TensorDesc> input_desc; | 57 | std::vector<ge::Om2TensorDesc> input_desc; |
| @@ -76,7 +75,7 @@ struct Om2ConstantsData { | |||
| 76 | 75 | ||
| 77 | /// Debug 信息 | 76 | /// Debug 信息 |
| 78 | struct Om2DebugInfo { | 77 | struct Om2DebugInfo { |
| 79 | - std::map<std::string, std::map<std::string, std::string>> op_attr_map; // 使用 map 直接存储,避免 JSON 解析开销 | 78 | + std::string op_attr_json; |
| 80 | std::string visual_json; | 79 | std::string visual_json; |
| 81 | }; | 80 | }; |
| 82 | 81 | ||
| @@ -13,6 +13,7 @@ | |||
| 13 | 13 | ||
| 14 | 14 | ||
| 15 | 15 | ||
| 16 | + | ||
| 16 | 17 | ||
| 17 | 18 | ||
| 18 | 19 | ||
| @@ -117,7 +118,7 @@ struct CustSharedLibInfo { | |||
| 117 | struct RunModelInfo { | 118 | struct RunModelInfo { |
| 118 | std::string so_file; | 119 | std::string so_file; |
| 119 | int32_t so_fd = -1; | 120 | int32_t so_fd = -1; |
| 120 | - std::map<std::string, std::map<std::string, std::string>> op_attr_map; // 直接使用 map,避免 JSON 序列化开销 | 121 | + ge::JsonFile op_attr_json; |
| 121 | void *so_handle = nullptr; | 122 | void *so_handle = nullptr; |
| 122 | std::string model_name; | 123 | std::string model_name; |
| 123 | std::string root_graph_name; | 124 | std::string root_graph_name; |
| @@ -228,34 +229,62 @@ ge::Status ParseTensorDescFromJson(const ge::JsonFile &json_file, ge::Om2TensorD | |||
| 228 | return ge::SUCCESS; | 229 | return ge::SUCCESS; |
| 229 | } | 230 | } |
| 230 | 231 | ||
| 231 | -ge::Status ParseOpAttrMapJson(const uint8_t *data, size_t data_size, | 232 | +void ParseOpAttrJsonToMapInternal(const ge::JsonFile &op_attr_json, |
| 232 | - std::map<std::string, std::map<std::string, std::string>> &op_attr_map) { | 233 | + std::map<std::string, std::map<std::string, std::string>> &attr_map) { |
| 233 | - try { | 234 | + attr_map.clear(); |
| 234 | - const auto json_obj = ge::JsonFile::json::parse(data, data + data_size); | 235 | + if (!op_attr_json.IsValid()) { |
| 235 | - if (!json_obj.is_object()) { | 236 | + return; |
| 236 | - GELOGW("[OM2] op_attr.json root is not an object"); | 237 | + } |
| 237 | - return ge::FAILED; | 238 | + |
| 239 | + const auto &json_data = op_attr_json.Raw(); | ||
| 240 | + if (!json_data.is_object()) { | ||
| 241 | + GELOGW("[OM2] op_attr.json root is not an object"); | ||
| 242 | + return; | ||
| 243 | + } | ||
| 244 | + | ||
| 245 | + for (auto it_op = json_data.begin(); it_op != json_data.end(); ++it_op) { | ||
| 246 | + const std::string op_name = it_op.key(); | ||
| 247 | + if (!it_op.value().is_object()) { | ||
| 248 | + continue; | ||
| 238 | } | 249 | } |
| 239 | 250 | ||
| 240 | - for (auto &[op_name, attrs] : json_obj.items()) { | 251 | + for (auto it_attr = it_op.value().begin(); it_attr != it_op.value().end(); ++it_attr) { |
| 241 | - if (!attrs.is_object()) { | 252 | + const std::string attr_name = it_attr.key(); |
| 242 | - GELOGW("[OM2] op_attr for %s is not an object", op_name.c_str()); | 253 | + if (!it_attr.value().is_object()) { |
| 243 | continue; | 254 | continue; |
| 244 | } | 255 | } |
| 245 | - std::map<std::string, std::string> op_attrs; | 256 | + |
| 246 | - for (auto &[attr_name, value] : attrs.items()) { | 257 | + ge::JsonFile attr_obj(it_attr.value()); |
| 247 | - if (value.is_string()) { | 258 | + |
| 248 | - op_attrs[attr_name] = value.get<std::string>(); | 259 | + std::string type; |
| 249 | - } else { | 260 | + if (!attr_obj.Get("type", type)) { |
| 250 | - op_attrs[attr_name] = value.dump(); | 261 | + continue; |
| 251 | - } | 262 | + } |
| 263 | + | ||
| 264 | + if (!attr_obj.Raw().contains("value")) { | ||
| 265 | + continue; | ||
| 266 | + } | ||
| 267 | + | ||
| 268 | + try { | ||
| 269 | + std::string value_str; | ||
| 270 | + if (type == "LIST_STRING") { | ||
| 271 | + const auto &value_array = attr_obj.Raw()["value"]; | ||
| 272 | + if (value_array.is_array()) { | ||
| 273 | + for (const auto &elem : value_array) { | ||
| 274 | + const std::string s = elem.get<std::string>(); | ||
| 275 | + value_str += "[" + std::to_string(s.size()) + "]" + s; | ||
| 276 | + } | ||
| 277 | + } | ||
| 278 | + } else { | ||
| 279 | + value_str = attr_obj.Raw()["value"].dump(); | ||
| 280 | + } | ||
| 281 | + | ||
| 282 | + attr_map[op_name][attr_name] = value_str; | ||
| 283 | + } catch (const std::exception &e) { | ||
| 284 | + GELOGW("[OM2] Failed to serialize attr value for op[%s] attr[%s]: %s", op_name.c_str(), attr_name.c_str(), | ||
| 285 | + e.what()); | ||
| 252 | } | 286 | } |
| 253 | - op_attr_map[op_name] = op_attrs; | ||
| 254 | } | 287 | } |
| 255 | - return ge::SUCCESS; | ||
| 256 | - } catch (const ge::JsonFile::json::exception &e) { | ||
| 257 | - GELOGE(ge::FAILED, "[OM2] Failed to parse op_attr.json: %s", e.what()); | ||
| 258 | - return ge::FAILED; | ||
| 259 | } | 288 | } |
| 260 | } | 289 | } |
| 261 | 290 | ||
| @@ -305,7 +334,6 @@ ge::Status DeserializeConstantsConfigEntry(const ge::RAIIZipArchive &archive, co | |||
| 305 | (void)val_file.Get("file_path", meta.file_path); | 334 | (void)val_file.Get("file_path", meta.file_path); |
| 306 | (void)val_file.Get("offset", meta.offset); | 335 | (void)val_file.Get("offset", meta.offset); |
| 307 | (void)val_file.Get("size", meta.size); | 336 | (void)val_file.Get("size", meta.size); |
| 308 | - (void)val_file.Get("op_name", meta.op_name); | ||
| 309 | (void)model_data.constants_data.consts.emplace_back(std::move(meta)); | 337 | (void)model_data.constants_data.consts.emplace_back(std::move(meta)); |
| 310 | } | 338 | } |
| 311 | } | 339 | } |
| @@ -479,22 +507,23 @@ ge::Status DeserializeModelMetaEntry(const ge::RAIIZipArchive &archive, const st | |||
| 479 | 507 | ||
| 480 | ge::JsonFile::json inputs_json; | 508 | ge::JsonFile::json inputs_json; |
| 481 | if (json_file.Get("inputs", inputs_json) && inputs_json.is_array()) { | 509 | if (json_file.Get("inputs", inputs_json) && inputs_json.is_array()) { |
| 482 | - for (const auto &input_json : inputs_json) { | 510 | + for (size_t i = 0UL; i < inputs_json.size(); ++i) { |
| 483 | - const ge::JsonFile input_file(input_json); | 511 | + const ge::JsonFile input_file(inputs_json[i]); |
| 484 | - std::vector<int64_t> shape_v2; | ||
| 485 | - GE_ASSERT_TRUE(input_file.Get("shape_v2", shape_v2), "[OM2] input shape_v2 not found in model_meta.json"); | ||
| 486 | ge::Om2TensorDesc desc; | 512 | ge::Om2TensorDesc desc; |
| 487 | GE_ASSERT_SUCCESS(ParseTensorDescFromJson(input_file, desc)); | 513 | GE_ASSERT_SUCCESS(ParseTensorDescFromJson(input_file, desc)); |
| 514 | + GE_ASSERT_TRUE(!desc.GetShape().empty(), "[OM2] Input tensor at index %zu is missing 'shape' field", i); | ||
| 515 | + std::vector<int64_t> max_gear_shape; | ||
| 516 | + if (input_file.Get("max_gear_shape", max_gear_shape)) { | ||
| 517 | + model_data.model_meta.origin_input_dims.emplace_back(desc.GetShape()); | ||
| 518 | + desc.SetShape(max_gear_shape); | ||
| 519 | + } | ||
| 488 | model_data.model_meta.input_desc.emplace_back(desc); | 520 | model_data.model_meta.input_desc.emplace_back(desc); |
| 489 | ge::Om2TensorDesc desc_v2 = desc; | 521 | ge::Om2TensorDesc desc_v2 = desc; |
| 490 | - desc_v2.SetShape(shape_v2); | 522 | + std::vector<int64_t> shape_v2; |
| 491 | - model_data.model_meta.input_desc_v2.emplace_back(desc_v2); | 523 | + if (input_file.Get("shape_aclmdlGetInputDimsV2", shape_v2)) { |
| 492 | - std::vector<int64_t> origin_input_dims; | 524 | + desc_v2.SetShape(shape_v2); |
| 493 | - if (input_file.Get("origin_input_dims", origin_input_dims)) { | ||
| 494 | - model_data.model_meta.origin_input_dims.emplace_back(std::move(origin_input_dims)); | ||
| 495 | - } else { | ||
| 496 | - (void)model_data.model_meta.origin_input_dims.emplace_back(desc.GetShape()); | ||
| 497 | } | 525 | } |
| 526 | + model_data.model_meta.input_desc_v2.emplace_back(desc_v2); | ||
| 498 | } | 527 | } |
| 499 | } | 528 | } |
| 500 | 529 | ||
| @@ -509,14 +538,42 @@ ge::Status DeserializeModelMetaEntry(const ge::RAIIZipArchive &archive, const st | |||
| 509 | } | 538 | } |
| 510 | } | 539 | } |
| 511 | 540 | ||
| 512 | - (void)json_file.Get("dynamic_output_shape", model_data.model_meta.dynamic_output_shape); | 541 | + ge::JsonFile dynamic_dims_file; |
| 513 | - (void)json_file.Get("dynamic_batch_info", model_data.model_meta.dynamic_batch_info); | 542 | + if (json_file.Get("dynamic_dims", dynamic_dims_file) && dynamic_dims_file.IsValid()) { |
| 514 | - (void)json_file.Get("user_designate_shape_order", model_data.model_meta.user_designate_shape_order); | 543 | + (void)dynamic_dims_file.Get("dynamic_type", model_data.model_meta.dynamic_type); |
| 515 | - (void)json_file.Get("dynamic_type", model_data.model_meta.dynamic_type); | 544 | + (void)dynamic_dims_file.Get("user_designate_shape_order", model_data.model_meta.user_designate_shape_order); |
| 545 | + | ||
| 546 | + ge::JsonFile::json gears_json; | ||
| 547 | + if (dynamic_dims_file.Get("gears", gears_json) && gears_json.is_array()) { | ||
| 548 | + for (size_t gear_idx = 0UL; gear_idx < gears_json.size(); ++gear_idx) { | ||
| 549 | + const ge::JsonFile gear_file(gears_json[gear_idx]); | ||
| 550 | + | ||
| 551 | + std::vector<int64_t> inputs; | ||
| 552 | + if (gear_file.Get("inputs", inputs)) { | ||
| 553 | + model_data.model_meta.dynamic_batch_info.push_back(std::move(inputs)); | ||
| 554 | + } | ||
| 555 | + | ||
| 556 | + ge::JsonFile::json outputs_json; | ||
| 557 | + if (gear_file.Get("outputs", outputs_json) && outputs_json.is_array()) { | ||
| 558 | + for (size_t out_idx = 0UL; out_idx < outputs_json.size(); ++out_idx) { | ||
| 559 | + const auto &dims = outputs_json[out_idx]; | ||
| 560 | + if (dims.is_array()) { | ||
| 561 | + std::string shape_str = std::to_string(gear_idx) + "," + std::to_string(out_idx); | ||
| 562 | + for (size_t i = 0UL; i < dims.size(); ++i) { | ||
| 563 | + shape_str += ","; | ||
| 564 | + shape_str += std::to_string(dims[i].get<int64_t>()); | ||
| 565 | + } | ||
| 566 | + model_data.model_meta.dynamic_output_shape.push_back(std::move(shape_str)); | ||
| 567 | + } | ||
| 568 | + } | ||
| 569 | + } | ||
| 570 | + } | ||
| 571 | + } | ||
| 572 | + } | ||
| 573 | + | ||
| 516 | (void)json_file.Get("work_size", model_data.model_meta.work_size); | 574 | (void)json_file.Get("work_size", model_data.model_meta.work_size); |
| 517 | (void)json_file.Get("zero_copy_size", model_data.model_meta.zero_copy_size); | 575 | (void)json_file.Get("zero_copy_size", model_data.model_meta.zero_copy_size); |
| 518 | (void)json_file.Get("name", model_data.model_meta.model_name); | 576 | (void)json_file.Get("name", model_data.model_meta.model_name); |
| 519 | - (void)json_file.Get("root_graph_name", model_data.model_meta.root_graph_name); | ||
| 520 | 577 | ||
| 521 | // 读取 aipp 字段 | 578 | // 读取 aipp 字段 |
| 522 | ge::JsonFile aipp_json; | 579 | ge::JsonFile aipp_json; |
| @@ -536,10 +593,7 @@ ge::Status DeserializeOpAttrEntry(const ge::RAIIZipArchive &archive, const std:: | |||
| 536 | auto buff_data = archive.ExtractToMem(entry, buff_size); | 593 | auto buff_data = archive.ExtractToMem(entry, buff_size); |
| 537 | GE_ASSERT_NOTNULL(buff_data, "[OM2] Failed to extract %s", entry.c_str()); | 594 | GE_ASSERT_NOTNULL(buff_data, "[OM2] Failed to extract %s", entry.c_str()); |
| 538 | GE_ASSERT_TRUE(buff_size > 0U); | 595 | GE_ASSERT_TRUE(buff_size > 0U); |
| 539 | - if (ParseOpAttrMapJson(buff_data.get(), buff_size, model_data.debug_info.op_attr_map) != ge::SUCCESS) { | 596 | + model_data.debug_info.op_attr_json = std::string(reinterpret_cast<const char *>(buff_data.get()), buff_size); |
| 540 | - GELOGW("[OM2] Failed to parse op_attr.json, using empty map"); | ||
| 541 | - model_data.debug_info.op_attr_map.clear(); | ||
| 542 | - } | ||
| 543 | return ge::SUCCESS; | 597 | return ge::SUCCESS; |
| 544 | } | 598 | } |
| 545 | 599 | ||
| @@ -549,10 +603,8 @@ ge::Status HandleArchiveEntry(const ge::RAIIZipArchive &archive, const std::stri | |||
| 549 | GE_ASSERT_SUCCESS(DeserializeCodegenEntry(archive, entry, model_data)); | 603 | GE_ASSERT_SUCCESS(DeserializeCodegenEntry(archive, entry, model_data)); |
| 550 | return ge::SUCCESS; | 604 | return ge::SUCCESS; |
| 551 | } | 605 | } |
| 552 | - if (entry.find("/debug/") != std::string::npos) { | 606 | + if (IsFileNameEndsWith(entry, "op_attr.json")) { |
| 553 | - if (IsFileNameEndsWith(entry, "op_attr.json")) { | 607 | + GE_ASSERT_SUCCESS(DeserializeOpAttrEntry(archive, entry, model_data)); |
| 554 | - GE_ASSERT_SUCCESS(DeserializeOpAttrEntry(archive, entry, model_data)); | ||
| 555 | - } | ||
| 556 | return ge::SUCCESS; | 608 | return ge::SUCCESS; |
| 557 | } | 609 | } |
| 558 | if (IsFileNameEndsWith(entry, "model_meta.json")) { | 610 | if (IsFileNameEndsWith(entry, "model_meta.json")) { |
| @@ -575,7 +627,7 @@ ge::Status HandleArchiveEntry(const ge::RAIIZipArchive &archive, const std::stri | |||
| 575 | } | 627 | } |
| 576 | return ge::SUCCESS; | 628 | return ge::SUCCESS; |
| 577 | } | 629 | } |
| 578 | - if (entry.find("data/kernels_") != std::string::npos && IsFileNameEndsWith(entry, ".o")) { | 630 | + if (entry.find("data/kernels/") != std::string::npos && IsFileNameEndsWith(entry, ".o")) { |
| 579 | GE_ASSERT_SUCCESS(DeserializeKernelEntry(archive, entry, model_data)); | 631 | GE_ASSERT_SUCCESS(DeserializeKernelEntry(archive, entry, model_data)); |
| 580 | return ge::SUCCESS; | 632 | return ge::SUCCESS; |
| 581 | } | 633 | } |
| @@ -631,10 +683,24 @@ ge::Status SetTensorDesc(ge::JsonFile::json &tensor_array_json, std::vector<ge:: | |||
| 631 | int64_t size; | 683 | int64_t size; |
| 632 | GE_ASSERT_TRUE(tensor_obj.Get("size", size)); | 684 | GE_ASSERT_TRUE(tensor_obj.Get("size", size)); |
| 633 | tensor_desc.SetSize(static_cast<size_t>(size)); | 685 | tensor_desc.SetSize(static_cast<size_t>(size)); |
| 634 | - std::string shape_key = new_model_desc ? "shape_v2" : "shape"; | ||
| 635 | std::vector<int64_t> shape_dims; | 686 | std::vector<int64_t> shape_dims; |
| 636 | - GE_ASSERT_TRUE(tensor_obj.Get(shape_key, shape_dims)); | 687 | + if (new_model_desc) { |
| 637 | - tensor_desc.SetShape(shape_dims); | 688 | + if (tensor_obj.Get("shape_aclmdlGetInputDimsV2", shape_dims)) { |
| 689 | + tensor_desc.SetShape(shape_dims); | ||
| 690 | + } else if (tensor_obj.Get("max_gear_shape", shape_dims)) { | ||
| 691 | + tensor_desc.SetShape(shape_dims); | ||
| 692 | + } else { | ||
| 693 | + GE_ASSERT_TRUE(tensor_obj.Get("shape", shape_dims)); | ||
| 694 | + tensor_desc.SetShape(shape_dims); | ||
| 695 | + } | ||
| 696 | + } else { | ||
| 697 | + if (tensor_obj.Get("max_gear_shape", shape_dims)) { | ||
| 698 | + tensor_desc.SetShape(shape_dims); | ||
| 699 | + } else { | ||
| 700 | + GE_ASSERT_TRUE(tensor_obj.Get("shape", shape_dims)); | ||
| 701 | + tensor_desc.SetShape(shape_dims); | ||
| 702 | + } | ||
| 703 | + } | ||
| 638 | std::vector<std::pair<int64_t, int64_t>> shape_range; | 704 | std::vector<std::pair<int64_t, int64_t>> shape_range; |
| 639 | GE_ASSERT_TRUE(tensor_obj.Get("shape_range", shape_range)); | 705 | GE_ASSERT_TRUE(tensor_obj.Get("shape_range", shape_range)); |
| 640 | tensor_desc.SetShapeRange(shape_range); | 706 | tensor_desc.SetShapeRange(shape_range); |
| @@ -840,9 +906,15 @@ class Om2ModelExecutor::Impl { | |||
| 840 | GE_ASSERT_SUCCESS(LoadSoFromBuffer(om2_data.program_body.so_artifact)); | 906 | GE_ASSERT_SUCCESS(LoadSoFromBuffer(om2_data.program_body.so_artifact)); |
| 841 | GE_ASSERT_TRUE(!run_model_info_.so_file.empty(), "[OM2] Om2 compiled so not found in Om2ModelData."); | 907 | GE_ASSERT_TRUE(!run_model_info_.so_file.empty(), "[OM2] Om2 compiled so not found in Om2ModelData."); |
| 842 | 908 | ||
| 843 | - // Set up op_attr_map from debug_info | 909 | + // Set up op_attr_json from debug_info |
| 844 | - if (!om2_data.debug_info.op_attr_map.empty()) { | 910 | + if (!om2_data.debug_info.op_attr_json.empty()) { |
| 845 | - run_model_info_.op_attr_map = om2_data.debug_info.op_attr_map; | 911 | + run_model_info_.op_attr_json = |
| 912 | + ge::JsonFile(reinterpret_cast<const uint8_t *>(om2_data.debug_info.op_attr_json.data()), | ||
| 913 | + om2_data.debug_info.op_attr_json.size()); | ||
| 914 | + if (!run_model_info_.op_attr_json.IsValid()) { | ||
| 915 | + GELOGW("[OM2] op_attr.json is not valid, using empty json content."); | ||
| 916 | + run_model_info_.op_attr_json = ge::JsonFile(ge::JsonFile::json::object()); | ||
| 917 | + } | ||
| 846 | } | 918 | } |
| 847 | 919 | ||
| 848 | if (om2_data.constants_data.weight_data != nullptr) { | 920 | if (om2_data.constants_data.weight_data != nullptr) { |
| @@ -855,7 +927,7 @@ class Om2ModelExecutor::Impl { | |||
| 855 | private: | 927 | private: |
| 856 | ge::Status LoadModelMetaFromStruct(const gert::Om2ModelMeta &meta) { | 928 | ge::Status LoadModelMetaFromStruct(const gert::Om2ModelMeta &meta) { |
| 857 | run_model_info_.model_name = meta.model_name; | 929 | run_model_info_.model_name = meta.model_name; |
| 858 | - run_model_info_.root_graph_name = meta.root_graph_name.empty() ? meta.model_name : meta.root_graph_name; | 930 | + run_model_info_.root_graph_name = meta.model_name; |
| 859 | model_meta_info_.work_size = meta.work_size; | 931 | model_meta_info_.work_size = meta.work_size; |
| 860 | GE_ASSERT_TRUE(meta.zero_copy_size >= 0, "[OM2][Check] Invalid zero_copy_size=%ld.", meta.zero_copy_size); | 932 | GE_ASSERT_TRUE(meta.zero_copy_size >= 0, "[OM2][Check] Invalid zero_copy_size=%ld.", meta.zero_copy_size); |
| 861 | const auto zero_copy_size = static_cast<size_t>(meta.zero_copy_size); | 933 | const auto zero_copy_size = static_cast<size_t>(meta.zero_copy_size); |
| @@ -1209,11 +1281,11 @@ class Om2ModelExecutor::Impl { | |||
| 1209 | GE_ASSERT_TRUE(has_model_); | 1281 | GE_ASSERT_TRUE(has_model_); |
| 1210 | op_attr_map.clear(); | 1282 | op_attr_map.clear(); |
| 1211 | 1283 | ||
| 1212 | - if (run_model_info_.op_attr_map.empty()) { | 1284 | + if (!run_model_info_.op_attr_json.IsValid()) { |
| 1213 | - return ge::SUCCESS; // Empty map | 1285 | + return ge::SUCCESS; |
| 1214 | } | 1286 | } |
| 1215 | 1287 | ||
| 1216 | - op_attr_map = run_model_info_.op_attr_map; | 1288 | + ParseOpAttrJsonToMapInternal(run_model_info_.op_attr_json, op_attr_map); |
| 1217 | return ge::SUCCESS; | 1289 | return ge::SUCCESS; |
| 1218 | } | 1290 | } |
| 1219 | 1291 | ||
| @@ -17,6 +17,7 @@ | |||
| 17 | 17 | ||
| 18 | 18 | ||
| 19 | 19 | ||
| 20 | + | ||
| 20 | 21 | ||
| 21 | 22 | ||
| 22 | 23 | ||
| @@ -5148,6 +5149,25 @@ TEST_F(UTEST_ACL_Model, aclmdlGetOpAttr_NotInOpAttrValueMap_ReturnsNull) { | |||
| 5148 | aclmdlDestroyDesc(desc); | 5149 | aclmdlDestroyDesc(desc); |
| 5149 | } | 5150 | } |
| 5150 | 5151 | ||
| 5152 | +TEST_F(UTEST_ACL_Model, aclmdlGetOpAttrImplOm2_NotInOpAttrValueMap_ReturnsEmptyString) { | ||
| 5153 | + aclmdlDesc *desc = aclmdlCreateDesc(); | ||
| 5154 | + EXPECT_NE(desc, nullptr); | ||
| 5155 | + | ||
| 5156 | + const char *opName = "test_op"; | ||
| 5157 | + const char *attr = "_datadump_original_op_names"; | ||
| 5158 | + | ||
| 5159 | + const char *result = aclmdlGetOpAttrImplOm2(desc, opName, attr); | ||
| 5160 | + EXPECT_NE(result, nullptr); | ||
| 5161 | + EXPECT_EQ(std::string(result), ""); | ||
| 5162 | + | ||
| 5163 | + desc->opAttrValueMap[opName]["other_attr"] = "some_value"; | ||
| 5164 | + result = aclmdlGetOpAttrImplOm2(desc, opName, attr); | ||
| 5165 | + EXPECT_NE(result, nullptr); | ||
| 5166 | + EXPECT_EQ(std::string(result), ""); | ||
| 5167 | + | ||
| 5168 | + aclmdlDestroyDesc(desc); | ||
| 5169 | +} | ||
| 5170 | + | ||
| 5151 | TEST_F(UTEST_ACL_Model, aclmdlGetDescFromFile_Om2Model_PopulatesDescAndMap) { | 5171 | TEST_F(UTEST_ACL_Model, aclmdlGetDescFromFile_Om2Model_PopulatesDescAndMap) { |
| 5152 | // Test that aclmdlGetDescFromFile detects OM2 and populates desc via lightweight GetOm2ModelMetadata | 5172 | // Test that aclmdlGetDescFromFile detects OM2 and populates desc via lightweight GetOm2ModelMetadata |
| 5153 | aclmdlDesc *desc = aclmdlCreateDesc(); | 5173 | aclmdlDesc *desc = aclmdlCreateDesc(); |
| @@ -764,20 +764,17 @@ std::string MakeFakeOm2ManifestJson() { | |||
| 764 | return R"({ | 764 | return R"({ |
| 765 | "atc_command": "", | 765 | "atc_command": "", |
| 766 | "model_num": 1, | 766 | "model_num": 1, |
| 767 | - "om2_version": "0" | 767 | + "om2_version": "1.0" |
| 768 | })"; | 768 | })"; |
| 769 | } | 769 | } |
| 770 | 770 | ||
| 771 | std::string MakeFakeOm2ModelMetaJson() { | 771 | std::string MakeFakeOm2ModelMetaJson() { |
| 772 | return R"({ | 772 | return R"({ |
| 773 | - "dynamic_batch_info": [], | ||
| 774 | - "dynamic_output_shape": [], | ||
| 775 | - "dynamic_type": 0, | ||
| 776 | "inputs": [ | 773 | "inputs": [ |
| 777 | {"data_type": "DT_FLOAT", "format": "NCHW", "index": 0, "name": "data1", | 774 | {"data_type": "DT_FLOAT", "format": "NCHW", "index": 0, "name": "data1", |
| 778 | - "shape": [1, 1, 224, 224], "shape_range": [], "shape_v2": [1, 1, 224, 224], "size": 0}, | 775 | + "shape": [1, 1, 224, 224], "shape_range": [], "size": 0}, |
| 779 | {"data_type": "DT_FLOAT", "format": "NCHW", "index": 1, "name": "data2", | 776 | {"data_type": "DT_FLOAT", "format": "NCHW", "index": 1, "name": "data2", |
| 780 | - "shape": [1, 1, 224, 224], "shape_range": [], "shape_v2": [1, 1, 224, 224], "size": 0} | 777 | + "shape": [1, 1, 224, 224], "shape_range": [], "size": 0} |
| 781 | ], | 778 | ], |
| 782 | "name": "g1", | 779 | "name": "g1", |
| 783 | "outputs": [ | 780 | "outputs": [ |
| @@ -785,8 +782,7 @@ std::string MakeFakeOm2ModelMetaJson() { | |||
| 785 | "shape": [1, 1, 224, 224], "shape_range": [], "size": 0} | 782 | "shape": [1, 1, 224, 224], "shape_range": [], "size": 0} |
| 786 | ], | 783 | ], |
| 787 | "work_size": 2048, | 784 | "work_size": 2048, |
| 788 | - "zero_copy_size": 0, | 785 | + "zero_copy_size": 0 |
| 789 | - "user_designate_shape_order": [] | ||
| 790 | })"; | 786 | })"; |
| 791 | } | 787 | } |
| 792 | 788 | ||
| @@ -797,10 +793,9 @@ std::string MakeFakeOm2ConstantsConfigJson() { | |||
| 797 | "const_0": { | 793 | "const_0": { |
| 798 | "index": 0, | 794 | "index": 0, |
| 799 | "type": "INTERNAL", | 795 | "type": "INTERNAL", |
| 800 | - "file_name": "", | 796 | + "file_name": "constant_0", |
| 801 | "offset": 0, | 797 | "offset": 0, |
| 802 | - "size": 16, | 798 | + "size": 16 |
| 803 | - "op_name": "const_0" | ||
| 804 | } | 799 | } |
| 805 | } | 800 | } |
| 806 | })"; | 801 | })"; |
| @@ -996,7 +991,7 @@ void CreateFakeOm2File(const std::string &work_dir, const std::string &output_fi | |||
| 996 | const auto op_attr = MakeFakeOm2OpAttrJson(); | 991 | const auto op_attr = MakeFakeOm2OpAttrJson(); |
| 997 | ASSERT_TRUE(zip_writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); | 992 | ASSERT_TRUE(zip_writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); |
| 998 | ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/model_meta.json", model_meta.data(), model_meta.size(), false)); | 993 | ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/model_meta.json", model_meta.data(), model_meta.size(), false)); |
| 999 | - ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/debug/op_attr.json", op_attr.data(), op_attr.size(), false)); | 994 | + ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/op_attr.json", op_attr.data(), op_attr.size(), false)); |
| 1000 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/libg1_om2.so", so_path, false)); | 995 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/libg1_om2.so", so_path, false)); |
| 1001 | ASSERT_TRUE(zip_writer.WriteFile("data/constants/constant_0", constant_path, false)); | 996 | ASSERT_TRUE(zip_writer.WriteFile("data/constants/constant_0", constant_path, false)); |
| 1002 | ASSERT_TRUE(zip_writer.WriteFile("data/constants/model_0_constants_config.json", constants_config_path, false)); | 997 | ASSERT_TRUE(zip_writer.WriteFile("data/constants/model_0_constants_config.json", constants_config_path, false)); |
| @@ -1018,7 +1013,7 @@ std::string BuildValidOm2ProtoTxt() { | |||
| 1018 | void CreateMinimalOm2File(const std::string &path, const std::string &proto_content) { | 1013 | void CreateMinimalOm2File(const std::string &path, const std::string &proto_content) { |
| 1019 | ZipArchiveWriter writer(path); | 1014 | ZipArchiveWriter writer(path); |
| 1020 | ASSERT_TRUE(writer.IsMemFileOpened()); | 1015 | ASSERT_TRUE(writer.IsMemFileOpened()); |
| 1021 | - const std::string manifest = R"({"om2_version":"0","model_num":1})"; | 1016 | + const std::string manifest = R"({"om2_version":"1.0","model_num":1})"; |
| 1022 | ASSERT_TRUE(writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); | 1017 | ASSERT_TRUE(writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); |
| 1023 | ASSERT_TRUE(writer.WriteBytes("data/model_0/debug/ge_proto_00000000_graph_1_test.txt", proto_content.data(), | 1018 | ASSERT_TRUE(writer.WriteBytes("data/model_0/debug/ge_proto_00000000_graph_1_test.txt", proto_content.data(), |
| 1024 | proto_content.size(), true)); | 1019 | proto_content.size(), true)); |
| @@ -1029,7 +1024,7 @@ void CreateMinimalOm2File(const std::string &path, const std::string &proto_cont | |||
| 1029 | void CreateMinimalOm2FileWithoutProto(const std::string &path) { | 1024 | void CreateMinimalOm2FileWithoutProto(const std::string &path) { |
| 1030 | ZipArchiveWriter writer(path); | 1025 | ZipArchiveWriter writer(path); |
| 1031 | ASSERT_TRUE(writer.IsMemFileOpened()); | 1026 | ASSERT_TRUE(writer.IsMemFileOpened()); |
| 1032 | - const std::string manifest = R"({"om2_version":"0","model_num":1})"; | 1027 | + const std::string manifest = R"({"om2_version":"1.0","model_num":1})"; |
| 1033 | ASSERT_TRUE(writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); | 1028 | ASSERT_TRUE(writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); |
| 1034 | ASSERT_TRUE(writer.SaveModelDataToFile()); | 1029 | ASSERT_TRUE(writer.SaveModelDataToFile()); |
| 1035 | ASSERT_EQ(mmAccess2(path.c_str(), M_F_OK), EOK); | 1030 | ASSERT_EQ(mmAccess2(path.c_str(), M_F_OK), EOK); |
| @@ -1586,12 +1581,18 @@ TEST_F(Om2St, ConvertOm2Model_Ok_GenOm2WithAicoreNode) { | |||
| 1586 | RAIIZipArchive archive(reinterpret_cast<const uint8_t *>(model_buf.get()), model_buf_size); | 1581 | RAIIZipArchive archive(reinterpret_cast<const uint8_t *>(model_buf.get()), model_buf_size); |
| 1587 | ASSERT_TRUE(archive.IsGood()); | 1582 | ASSERT_TRUE(archive.IsGood()); |
| 1588 | const std::set<std::string> expect_files = { | 1583 | const std::set<std::string> expect_files = { |
| 1589 | - "fake_test/data/model_0/runtime/g1_kernel_reg.cpp", "fake_test/data/model_0/runtime/g1_resources.cpp", | 1584 | + "fake_test/data/model_0/runtime/g1_kernel_reg.cpp", |
| 1590 | - "fake_test/data/model_0/runtime/g1_args_manager.cpp", "fake_test/data/model_0/runtime/g1_load_and_run.cpp", | 1585 | + "fake_test/data/model_0/runtime/g1_resources.cpp", |
| 1591 | - "fake_test/data/model_0/runtime/g1_interface.h", "fake_test/data/model_0/runtime/Makefile", | 1586 | + "fake_test/data/model_0/runtime/g1_args_manager.cpp", |
| 1592 | - "fake_test/data/model_0/runtime/libg1_om2.so", "fake_test/data/constants/model_0_constants_config.json", | 1587 | + "fake_test/data/model_0/runtime/g1_load_and_run.cpp", |
| 1593 | - "fake_test/data/kernels_npu_arch/add1_faked_kernel.o", "fake_test/data/model_0/model_meta.json", | 1588 | + "fake_test/data/model_0/runtime/g1_interface.h", |
| 1594 | - "fake_test/data/model_0/debug/op_attr.json", "fake_test/manifest.json", | 1589 | + "fake_test/data/model_0/runtime/Makefile", |
| 1590 | + "fake_test/data/model_0/runtime/libg1_om2.so", | ||
| 1591 | + "fake_test/data/constants/model_0_constants_config.json", | ||
| 1592 | + "fake_test/data/kernels/add1_faked_kernel.o", | ||
| 1593 | + "fake_test/data/model_0/model_meta.json", | ||
| 1594 | + "fake_test/data/model_0/op_attr.json", | ||
| 1595 | + "fake_test/manifest.json", | ||
| 1595 | }; | 1596 | }; |
| 1596 | ExpectOm2ArchiveFiles(archive, expect_files); | 1597 | ExpectOm2ArchiveFiles(archive, expect_files); |
| 1597 | ExpectGeneratedMakefileSupportsEnvCompiler(archive, kZipFileBaseName); | 1598 | ExpectGeneratedMakefileSupportsEnvCompiler(archive, kZipFileBaseName); |
| @@ -1807,7 +1808,7 @@ TEST_F(Om2St, Om2PackageHelper_Ok_ExtractVisualJsonFromMinimalOm2) { | |||
| 1807 | { | 1808 | { |
| 1808 | ZipArchiveWriter writer(output_file); | 1809 | ZipArchiveWriter writer(output_file); |
| 1809 | ASSERT_TRUE(writer.IsMemFileOpened()); | 1810 | ASSERT_TRUE(writer.IsMemFileOpened()); |
| 1810 | - const std::string manifest = R"({"om2_version":"0","model_num":1})"; | 1811 | + const std::string manifest = R"({"om2_version":"1.0","model_num":1})"; |
| 1811 | ASSERT_TRUE(writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); | 1812 | ASSERT_TRUE(writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); |
| 1812 | ASSERT_TRUE(writer.WriteBytes("data/model_0/debug/ge_visual_00000000_graph_0.json", visual_json.data(), | 1813 | ASSERT_TRUE(writer.WriteBytes("data/model_0/debug/ge_visual_00000000_graph_0.json", visual_json.data(), |
| 1813 | visual_json.size(), true)); | 1814 | visual_json.size(), true)); |
| @@ -1839,7 +1840,7 @@ TEST_F(Om2St, Om2PackageHelper_Fail_ExtractVisualJsonWithoutVisualJson) { | |||
| 1839 | { | 1840 | { |
| 1840 | ZipArchiveWriter writer(output_file); | 1841 | ZipArchiveWriter writer(output_file); |
| 1841 | ASSERT_TRUE(writer.IsMemFileOpened()); | 1842 | ASSERT_TRUE(writer.IsMemFileOpened()); |
| 1842 | - const std::string manifest = R"({"om2_version":"0","model_num":1})"; | 1843 | + const std::string manifest = R"({"om2_version":"1.0","model_num":1})"; |
| 1843 | ASSERT_TRUE(writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); | 1844 | ASSERT_TRUE(writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); |
| 1844 | ASSERT_TRUE(writer.SaveModelData(model, false)); | 1845 | ASSERT_TRUE(writer.SaveModelData(model, false)); |
| 1845 | } | 1846 | } |
| @@ -1904,7 +1905,7 @@ TEST_F(Om2St, ConvertOm2Model_Ok_ConvertMinimalVisualOm2ToJson) { | |||
| 1904 | { | 1905 | { |
| 1905 | ZipArchiveWriter writer(output_file); | 1906 | ZipArchiveWriter writer(output_file); |
| 1906 | ASSERT_TRUE(writer.IsMemFileOpened()); | 1907 | ASSERT_TRUE(writer.IsMemFileOpened()); |
| 1907 | - const std::string manifest = R"({"om2_version":"0","model_num":1})"; | 1908 | + const std::string manifest = R"({"om2_version":"1.0","model_num":1})"; |
| 1908 | ASSERT_TRUE(writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); | 1909 | ASSERT_TRUE(writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); |
| 1909 | ASSERT_TRUE(writer.WriteBytes("data/model_0/debug/ge_visual_00000000_graph_0.json", visual_json.data(), | 1910 | ASSERT_TRUE(writer.WriteBytes("data/model_0/debug/ge_visual_00000000_graph_0.json", visual_json.data(), |
| 1910 | visual_json.size(), true)); | 1911 | visual_json.size(), true)); |
| @@ -1928,7 +1929,7 @@ TEST_F(Om2St, ConvertOm2Model_Ok_ConvertVisualOm2AddsGroupOpName) { | |||
| 1928 | { | 1929 | { |
| 1929 | ZipArchiveWriter writer(output_file); | 1930 | ZipArchiveWriter writer(output_file); |
| 1930 | ASSERT_TRUE(writer.IsMemFileOpened()); | 1931 | ASSERT_TRUE(writer.IsMemFileOpened()); |
| 1931 | - const std::string manifest = R"({"om2_version":"0","model_num":1})"; | 1932 | + const std::string manifest = R"({"om2_version":"1.0","model_num":1})"; |
| 1932 | ASSERT_TRUE(writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); | 1933 | ASSERT_TRUE(writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); |
| 1933 | ASSERT_TRUE(writer.WriteBytes("data/model_0/debug/ge_visual_00000000_graph_0.json", visual_json.data(), | 1934 | ASSERT_TRUE(writer.WriteBytes("data/model_0/debug/ge_visual_00000000_graph_0.json", visual_json.data(), |
| 1934 | visual_json.size(), true)); | 1935 | visual_json.size(), true)); |
| @@ -1959,7 +1960,7 @@ TEST_F(Om2St, ConvertOm2Model_Ok_ConvertLooseVisualOm2ToJson) { | |||
| 1959 | { | 1960 | { |
| 1960 | ZipArchiveWriter writer(output_file); | 1961 | ZipArchiveWriter writer(output_file); |
| 1961 | ASSERT_TRUE(writer.IsMemFileOpened()); | 1962 | ASSERT_TRUE(writer.IsMemFileOpened()); |
| 1962 | - const std::string manifest = R"({"om2_version":"0","model_num":1})"; | 1963 | + const std::string manifest = R"({"om2_version":"1.0","model_num":1})"; |
| 1963 | ASSERT_TRUE(writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); | 1964 | ASSERT_TRUE(writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); |
| 1964 | ASSERT_TRUE(writer.WriteBytes("data/model_0/debug/ge_visual_00000000_graph_0.json", visual_json.data(), | 1965 | ASSERT_TRUE(writer.WriteBytes("data/model_0/debug/ge_visual_00000000_graph_0.json", visual_json.data(), |
| 1965 | visual_json.size(), true)); | 1966 | visual_json.size(), true)); |
| @@ -2022,10 +2023,10 @@ TEST_F(Om2St, ConvertOm2Model_Ok_GenOm2WithAtomicAicoreNode) { | |||
| 2022 | "fake_test_atomic/data/model_0/runtime/Makefile", | 2023 | "fake_test_atomic/data/model_0/runtime/Makefile", |
| 2023 | "fake_test_atomic/data/model_0/runtime/libg1_om2.so", | 2024 | "fake_test_atomic/data/model_0/runtime/libg1_om2.so", |
| 2024 | "fake_test_atomic/data/constants/model_0_constants_config.json", | 2025 | "fake_test_atomic/data/constants/model_0_constants_config.json", |
| 2025 | - "fake_test_atomic/data/kernels_npu_arch/add1_faked_kernel.o", | 2026 | + "fake_test_atomic/data/kernels/add1_faked_kernel.o", |
| 2026 | - "fake_test_atomic/data/kernels_npu_arch/add1_faked_atomic_kernel.o", | 2027 | + "fake_test_atomic/data/kernels/add1_faked_atomic_kernel.o", |
| 2027 | "fake_test_atomic/data/model_0/model_meta.json", | 2028 | "fake_test_atomic/data/model_0/model_meta.json", |
| 2028 | - "fake_test_atomic/data/model_0/debug/op_attr.json", | 2029 | + "fake_test_atomic/data/model_0/op_attr.json", |
| 2029 | "fake_test_atomic/manifest.json", | 2030 | "fake_test_atomic/manifest.json", |
| 2030 | }; | 2031 | }; |
| 2031 | ExpectOm2ArchiveFiles(archive, expect_files); | 2032 | ExpectOm2ArchiveFiles(archive, expect_files); |
| @@ -2062,9 +2063,9 @@ TEST_F(Om2St, ConvertOm2Model_Ok_GenOm2WithInternalConst) { | |||
| 2062 | "fake_test/data/model_0/runtime/libg1_om2.so", | 2063 | "fake_test/data/model_0/runtime/libg1_om2.so", |
| 2063 | "fake_test/data/constants/constant_0", | 2064 | "fake_test/data/constants/constant_0", |
| 2064 | "fake_test/data/constants/model_0_constants_config.json", | 2065 | "fake_test/data/constants/model_0_constants_config.json", |
| 2065 | - "fake_test/data/kernels_npu_arch/add1_faked_kernel.o", | 2066 | + "fake_test/data/kernels/add1_faked_kernel.o", |
| 2066 | "fake_test/data/model_0/model_meta.json", | 2067 | "fake_test/data/model_0/model_meta.json", |
| 2067 | - "fake_test/data/model_0/debug/op_attr.json", | 2068 | + "fake_test/data/model_0/op_attr.json", |
| 2068 | "fake_test/manifest.json", | 2069 | "fake_test/manifest.json", |
| 2069 | }; | 2070 | }; |
| 2070 | ExpectOm2ArchiveFiles(archive, expect_files); | 2071 | ExpectOm2ArchiveFiles(archive, expect_files); |
| @@ -2108,9 +2109,9 @@ TEST_F(Om2St, ConvertOm2Model_Ok_GenOm2WithFileConstMeta) { | |||
| 2108 | "fake_test/data/model_0/runtime/libg1_om2.so", | 2109 | "fake_test/data/model_0/runtime/libg1_om2.so", |
| 2109 | "fake_test/data/constants/constant_0", | 2110 | "fake_test/data/constants/constant_0", |
| 2110 | "fake_test/data/constants/model_0_constants_config.json", | 2111 | "fake_test/data/constants/model_0_constants_config.json", |
| 2111 | - "fake_test/data/kernels_npu_arch/add1_faked_kernel.o", | 2112 | + "fake_test/data/kernels/add1_faked_kernel.o", |
| 2112 | "fake_test/data/model_0/model_meta.json", | 2113 | "fake_test/data/model_0/model_meta.json", |
| 2113 | - "fake_test/data/model_0/debug/op_attr.json", | 2114 | + "fake_test/data/model_0/op_attr.json", |
| 2114 | "fake_test/manifest.json", | 2115 | "fake_test/manifest.json", |
| 2115 | }; | 2116 | }; |
| 2116 | ExpectOm2ArchiveFiles(archive, expect_files); | 2117 | ExpectOm2ArchiveFiles(archive, expect_files); |
| @@ -2175,8 +2176,7 @@ JsonFile::json BuildRelocateExternalWeightConsts(const std::string &old_weight_p | |||
| 2175 | .Set("file_name", "") | 2176 | .Set("file_name", "") |
| 2176 | .Set("file_path", old_weight_path) | 2177 | .Set("file_path", old_weight_path) |
| 2177 | .Set("offset", 0) | 2178 | .Set("offset", 0) |
| 2178 | - .Set("size", 5) | 2179 | + .Set("size", 5); |
| 2179 | - .Set("op_name", "file_const"); | ||
| 2180 | consts["file_const"] = file_const.Raw(); | 2180 | consts["file_const"] = file_const.Raw(); |
| 2181 | return consts; | 2181 | return consts; |
| 2182 | } | 2182 | } |
| @@ -2262,12 +2262,18 @@ TEST_F(Om2St, ConvertOm2Model_Ok_GenOm2WithAicoreOp2) { | |||
| 2262 | ASSERT_TRUE(archive.IsGood()); | 2262 | ASSERT_TRUE(archive.IsGood()); |
| 2263 | const auto file_names = archive.ListFiles(); | 2263 | const auto file_names = archive.ListFiles(); |
| 2264 | const std::set<std::string> expect_files = { | 2264 | const std::set<std::string> expect_files = { |
| 2265 | - "fake_test/data/model_0/runtime/g1_kernel_reg.cpp", "fake_test/data/model_0/runtime/g1_resources.cpp", | 2265 | + "fake_test/data/model_0/runtime/g1_kernel_reg.cpp", |
| 2266 | - "fake_test/data/model_0/runtime/g1_args_manager.cpp", "fake_test/data/model_0/runtime/g1_load_and_run.cpp", | 2266 | + "fake_test/data/model_0/runtime/g1_resources.cpp", |
| 2267 | - "fake_test/data/model_0/runtime/g1_interface.h", "fake_test/data/model_0/runtime/Makefile", | 2267 | + "fake_test/data/model_0/runtime/g1_args_manager.cpp", |
| 2268 | - "fake_test/data/model_0/runtime/libg1_om2.so", "fake_test/data/constants/model_0_constants_config.json", | 2268 | + "fake_test/data/model_0/runtime/g1_load_and_run.cpp", |
| 2269 | - "fake_test/data/kernels_npu_arch/add1_faked_kernel.o", "fake_test/data/model_0/model_meta.json", | 2269 | + "fake_test/data/model_0/runtime/g1_interface.h", |
| 2270 | - "fake_test/data/model_0/debug/op_attr.json", "fake_test/manifest.json", | 2270 | + "fake_test/data/model_0/runtime/Makefile", |
| 2271 | + "fake_test/data/model_0/runtime/libg1_om2.so", | ||
| 2272 | + "fake_test/data/constants/model_0_constants_config.json", | ||
| 2273 | + "fake_test/data/kernels/add1_faked_kernel.o", | ||
| 2274 | + "fake_test/data/model_0/model_meta.json", | ||
| 2275 | + "fake_test/data/model_0/op_attr.json", | ||
| 2276 | + "fake_test/manifest.json", | ||
| 2271 | }; | 2277 | }; |
| 2272 | ExpectOm2ArchiveFiles(archive, expect_files); | 2278 | ExpectOm2ArchiveFiles(archive, expect_files); |
| 2273 | } | 2279 | } |
| @@ -2288,12 +2294,18 @@ TEST_F(Om2St, ConvertOm2Model_Ok_GenOm2WithAicoreOpOfDynamicIo) { | |||
| 2288 | ASSERT_TRUE(archive.IsGood()); | 2294 | ASSERT_TRUE(archive.IsGood()); |
| 2289 | const auto file_names = archive.ListFiles(); | 2295 | const auto file_names = archive.ListFiles(); |
| 2290 | const std::set<std::string> expect_files = { | 2296 | const std::set<std::string> expect_files = { |
| 2291 | - "fake_test/data/model_0/runtime/g1_kernel_reg.cpp", "fake_test/data/model_0/runtime/g1_resources.cpp", | 2297 | + "fake_test/data/model_0/runtime/g1_kernel_reg.cpp", |
| 2292 | - "fake_test/data/model_0/runtime/g1_args_manager.cpp", "fake_test/data/model_0/runtime/g1_load_and_run.cpp", | 2298 | + "fake_test/data/model_0/runtime/g1_resources.cpp", |
| 2293 | - "fake_test/data/model_0/runtime/g1_interface.h", "fake_test/data/model_0/runtime/Makefile", | 2299 | + "fake_test/data/model_0/runtime/g1_args_manager.cpp", |
| 2294 | - "fake_test/data/model_0/runtime/libg1_om2.so", "fake_test/data/constants/model_0_constants_config.json", | 2300 | + "fake_test/data/model_0/runtime/g1_load_and_run.cpp", |
| 2295 | - "fake_test/data/kernels_npu_arch/add1_faked_kernel.o", "fake_test/data/model_0/model_meta.json", | 2301 | + "fake_test/data/model_0/runtime/g1_interface.h", |
| 2296 | - "fake_test/data/model_0/debug/op_attr.json", "fake_test/manifest.json", | 2302 | + "fake_test/data/model_0/runtime/Makefile", |
| 2303 | + "fake_test/data/model_0/runtime/libg1_om2.so", | ||
| 2304 | + "fake_test/data/constants/model_0_constants_config.json", | ||
| 2305 | + "fake_test/data/kernels/add1_faked_kernel.o", | ||
| 2306 | + "fake_test/data/model_0/model_meta.json", | ||
| 2307 | + "fake_test/data/model_0/op_attr.json", | ||
| 2308 | + "fake_test/manifest.json", | ||
| 2297 | }; | 2309 | }; |
| 2298 | ExpectOm2ArchiveFiles(archive, expect_files); | 2310 | ExpectOm2ArchiveFiles(archive, expect_files); |
| 2299 | } | 2311 | } |
| @@ -2323,7 +2335,7 @@ TEST_F(Om2St, ConvertOm2Model_Ok_GenOm2WithAicpuOp) { | |||
| 2323 | "fake_test/data/model_0/runtime/libg1_om2.so", | 2335 | "fake_test/data/model_0/runtime/libg1_om2.so", |
| 2324 | "fake_test/data/constants/model_0_constants_config.json", | 2336 | "fake_test/data/constants/model_0_constants_config.json", |
| 2325 | "fake_test/data/model_0/model_meta.json", | 2337 | "fake_test/data/model_0/model_meta.json", |
| 2326 | - "fake_test/data/model_0/debug/op_attr.json", | 2338 | + "fake_test/data/model_0/op_attr.json", |
| 2327 | "fake_test/manifest.json", | 2339 | "fake_test/manifest.json", |
| 2328 | }; | 2340 | }; |
| 2329 | ExpectOm2ArchiveFiles(archive, expect_files); | 2341 | ExpectOm2ArchiveFiles(archive, expect_files); |
| @@ -2354,7 +2366,7 @@ TEST_F(Om2St, ConvertOm2Model_Ok_GenOm2WithCustAicpuOp) { | |||
| 2354 | "fake_test/data/model_0/runtime/libg1_om2.so", | 2366 | "fake_test/data/model_0/runtime/libg1_om2.so", |
| 2355 | "fake_test/data/constants/model_0_constants_config.json", | 2367 | "fake_test/data/constants/model_0_constants_config.json", |
| 2356 | "fake_test/data/model_0/model_meta.json", | 2368 | "fake_test/data/model_0/model_meta.json", |
| 2357 | - "fake_test/data/model_0/debug/op_attr.json", | 2369 | + "fake_test/data/model_0/op_attr.json", |
| 2358 | "fake_test/manifest.json", | 2370 | "fake_test/manifest.json", |
| 2359 | }; | 2371 | }; |
| 2360 | int visual_json_count = 0; | 2372 | int visual_json_count = 0; |
| @@ -2369,7 +2381,7 @@ TEST_F(Om2St, ConvertOm2Model_Ok_GenOm2WithCustAicpuOp) { | |||
| 2369 | ++visual_json_count; | 2381 | ++visual_json_count; |
| 2370 | continue; | 2382 | continue; |
| 2371 | } | 2383 | } |
| 2372 | - if ((file_name.find("fake_test/data/kernels_npu_arch/") != std::string::npos) && | 2384 | + if ((file_name.find("fake_test/data/kernels/") != std::string::npos) && |
| 2373 | (file_name.find("_CustAicpuKernel.o") != std::string::npos)) { | 2385 | (file_name.find("_CustAicpuKernel.o") != std::string::npos)) { |
| 2374 | found_cust_kernel = true; | 2386 | found_cust_kernel = true; |
| 2375 | continue; | 2387 | continue; |
| @@ -2405,7 +2417,7 @@ TEST_F(Om2St, ConvertOm2Model_Ok_GenOm2WithTfAicpuOp) { | |||
| 2405 | "fake_test/data/model_0/runtime/libg1_om2.so", | 2417 | "fake_test/data/model_0/runtime/libg1_om2.so", |
| 2406 | "fake_test/data/constants/model_0_constants_config.json", | 2418 | "fake_test/data/constants/model_0_constants_config.json", |
| 2407 | "fake_test/data/model_0/model_meta.json", | 2419 | "fake_test/data/model_0/model_meta.json", |
| 2408 | - "fake_test/data/model_0/debug/op_attr.json", | 2420 | + "fake_test/data/model_0/op_attr.json", |
| 2409 | "fake_test/manifest.json", | 2421 | "fake_test/manifest.json", |
| 2410 | }; | 2422 | }; |
| 2411 | ExpectOm2ArchiveFiles(archive, expect_files); | 2423 | ExpectOm2ArchiveFiles(archive, expect_files); |
| @@ -2544,12 +2556,18 @@ TEST_F(Om2St, ConvertOm2Model_Ok_GenOm2WithCmoTask) { | |||
| 2544 | RAIIZipArchive archive(reinterpret_cast<const uint8_t *>(model_buf.get()), model_buf_size); | 2556 | RAIIZipArchive archive(reinterpret_cast<const uint8_t *>(model_buf.get()), model_buf_size); |
| 2545 | ASSERT_TRUE(archive.IsGood()); | 2557 | ASSERT_TRUE(archive.IsGood()); |
| 2546 | const std::set<std::string> expect_files = { | 2558 | const std::set<std::string> expect_files = { |
| 2547 | - "fake_test/data/model_0/runtime/g1_kernel_reg.cpp", "fake_test/data/model_0/runtime/g1_resources.cpp", | 2559 | + "fake_test/data/model_0/runtime/g1_kernel_reg.cpp", |
| 2548 | - "fake_test/data/model_0/runtime/g1_args_manager.cpp", "fake_test/data/model_0/runtime/g1_load_and_run.cpp", | 2560 | + "fake_test/data/model_0/runtime/g1_resources.cpp", |
| 2549 | - "fake_test/data/model_0/runtime/g1_interface.h", "fake_test/data/model_0/runtime/Makefile", | 2561 | + "fake_test/data/model_0/runtime/g1_args_manager.cpp", |
| 2550 | - "fake_test/data/model_0/runtime/libg1_om2.so", "fake_test/data/constants/model_0_constants_config.json", | 2562 | + "fake_test/data/model_0/runtime/g1_load_and_run.cpp", |
| 2551 | - "fake_test/data/kernels_npu_arch/add1_faked_kernel.o", "fake_test/data/model_0/model_meta.json", | 2563 | + "fake_test/data/model_0/runtime/g1_interface.h", |
| 2552 | - "fake_test/data/model_0/debug/op_attr.json", "fake_test/manifest.json", | 2564 | + "fake_test/data/model_0/runtime/Makefile", |
| 2565 | + "fake_test/data/model_0/runtime/libg1_om2.so", | ||
| 2566 | + "fake_test/data/constants/model_0_constants_config.json", | ||
| 2567 | + "fake_test/data/kernels/add1_faked_kernel.o", | ||
| 2568 | + "fake_test/data/model_0/model_meta.json", | ||
| 2569 | + "fake_test/data/model_0/op_attr.json", | ||
| 2570 | + "fake_test/manifest.json", | ||
| 2553 | }; | 2571 | }; |
| 2554 | ExpectOm2ArchiveFiles(archive, expect_files); | 2572 | ExpectOm2ArchiveFiles(archive, expect_files); |
| 2555 | GELOGI("Om2St: CMO task packaging succeeded."); | 2573 | GELOGI("Om2St: CMO task packaging succeeded."); |
| @@ -2570,12 +2588,18 @@ TEST_F(Om2St, ConvertOm2Model_Ok_GenOm2WithBarrierTask) { | |||
| 2570 | RAIIZipArchive archive(reinterpret_cast<const uint8_t *>(model_buf.get()), model_buf_size); | 2588 | RAIIZipArchive archive(reinterpret_cast<const uint8_t *>(model_buf.get()), model_buf_size); |
| 2571 | ASSERT_TRUE(archive.IsGood()); | 2589 | ASSERT_TRUE(archive.IsGood()); |
| 2572 | const std::set<std::string> expect_files = { | 2590 | const std::set<std::string> expect_files = { |
| 2573 | - "fake_test/data/model_0/runtime/g1_kernel_reg.cpp", "fake_test/data/model_0/runtime/g1_resources.cpp", | 2591 | + "fake_test/data/model_0/runtime/g1_kernel_reg.cpp", |
| 2574 | - "fake_test/data/model_0/runtime/g1_args_manager.cpp", "fake_test/data/model_0/runtime/g1_load_and_run.cpp", | 2592 | + "fake_test/data/model_0/runtime/g1_resources.cpp", |
| 2575 | - "fake_test/data/model_0/runtime/g1_interface.h", "fake_test/data/model_0/runtime/Makefile", | 2593 | + "fake_test/data/model_0/runtime/g1_args_manager.cpp", |
| 2576 | - "fake_test/data/model_0/runtime/libg1_om2.so", "fake_test/data/constants/model_0_constants_config.json", | 2594 | + "fake_test/data/model_0/runtime/g1_load_and_run.cpp", |
| 2577 | - "fake_test/data/kernels_npu_arch/add1_faked_kernel.o", "fake_test/data/model_0/model_meta.json", | 2595 | + "fake_test/data/model_0/runtime/g1_interface.h", |
| 2578 | - "fake_test/data/model_0/debug/op_attr.json", "fake_test/manifest.json", | 2596 | + "fake_test/data/model_0/runtime/Makefile", |
| 2597 | + "fake_test/data/model_0/runtime/libg1_om2.so", | ||
| 2598 | + "fake_test/data/constants/model_0_constants_config.json", | ||
| 2599 | + "fake_test/data/kernels/add1_faked_kernel.o", | ||
| 2600 | + "fake_test/data/model_0/model_meta.json", | ||
| 2601 | + "fake_test/data/model_0/op_attr.json", | ||
| 2602 | + "fake_test/manifest.json", | ||
| 2579 | }; | 2603 | }; |
| 2580 | ExpectOm2ArchiveFiles(archive, expect_files); | 2604 | ExpectOm2ArchiveFiles(archive, expect_files); |
| 2581 | GELOGI("Om2St: Barrier task packaging succeeded."); | 2605 | GELOGI("Om2St: Barrier task packaging succeeded."); |
| @@ -2600,6 +2624,21 @@ TEST_F(Om2St, SaveModelInfo_WithMbatchOriginInputDims_SerializesOriginDims) { | |||
| 2600 | } | 2624 | } |
| 2601 | } | 2625 | } |
| 2602 | 2626 | ||
| 2627 | + // Add a CASE node to populate dynamic_batch_info so that max_gear_shape is serialized | ||
| 2628 | + auto case_desc = std::make_shared<OpDesc>("case1", CASE); | ||
| 2629 | + GeTensorDesc case_input_desc(GeShape({1}), FORMAT_ND, DT_INT32); | ||
| 2630 | + (void)case_desc->AddInputDesc(case_input_desc); | ||
| 2631 | + AttrUtils::SetInt(case_desc, ATTR_NAME_BATCH_NUM, 2U); | ||
| 2632 | + AttrUtils::SetInt(case_desc, ATTR_DYNAMIC_TYPE, static_cast<int32_t>(DYNAMIC_BATCH)); | ||
| 2633 | + std::vector<int64_t> batch_shape_0 = {1, 1, 224, 224}; | ||
| 2634 | + std::vector<int64_t> batch_shape_1 = {2, 1, 224, 224}; | ||
| 2635 | + AttrUtils::SetListInt(case_desc, ATTR_NAME_PRED_VALUE + "_0", batch_shape_0); | ||
| 2636 | + AttrUtils::SetListInt(case_desc, ATTR_NAME_PRED_VALUE + "_1", batch_shape_1); | ||
| 2637 | + std::vector<std::string> shape_order = {"data1", "data2"}; | ||
| 2638 | + AttrUtils::SetListStr(case_desc, ATTR_USER_DESIGNEATE_SHAPE_ORDER, shape_order); | ||
| 2639 | + auto case_node = compute_graph->AddNode(case_desc); | ||
| 2640 | + ASSERT_NE(case_node, nullptr); | ||
| 2641 | + | ||
| 2603 | ModelBufferData model_data; | 2642 | ModelBufferData model_data; |
| 2604 | const std::string output_file = PathUtils::Join({test_work_dir, "test_origin_dims.om2"}); | 2643 | const std::string output_file = PathUtils::Join({test_work_dir, "test_origin_dims.om2"}); |
| 2605 | SyncKernelNameForAllModels(ge_root_model); | 2644 | SyncKernelNameForAllModels(ge_root_model); |
| @@ -2618,14 +2657,15 @@ TEST_F(Om2St, SaveModelInfo_WithMbatchOriginInputDims_SerializesOriginDims) { | |||
| 2618 | const auto &inputs = model_meta_json.Raw().at("inputs"); | 2657 | const auto &inputs = model_meta_json.Raw().at("inputs"); |
| 2619 | ASSERT_GE(inputs.size(), 1U); | 2658 | ASSERT_GE(inputs.size(), 1U); |
| 2620 | for (const auto &input : inputs) { | 2659 | for (const auto &input : inputs) { |
| 2621 | - ASSERT_TRUE(input.contains("origin_input_dims")); | 2660 | + ASSERT_TRUE(input.contains("shape")); |
| 2622 | - const auto &origin_dims = input.at("origin_input_dims"); | 2661 | + ASSERT_TRUE(input.contains("max_gear_shape")); |
| 2623 | const auto &shape = input.at("shape"); | 2662 | const auto &shape = input.at("shape"); |
| 2624 | - ASSERT_TRUE(origin_dims.is_array()); | 2663 | + const auto &max_gear_shape = input.at("max_gear_shape"); |
| 2625 | ASSERT_TRUE(shape.is_array()); | 2664 | ASSERT_TRUE(shape.is_array()); |
| 2626 | - if (!origin_dims.empty()) { | 2665 | + ASSERT_TRUE(max_gear_shape.is_array()); |
| 2627 | - EXPECT_EQ(origin_dims[0], JsonFile::json(-1)) << "Dynamic batch axis should be -1 in origin_input_dims"; | 2666 | + if (!shape.empty()) { |
| 2628 | - EXPECT_NE(origin_dims[0], shape[0]) << "origin_input_dims should differ from shape for dynamic batch"; | 2667 | + EXPECT_EQ(shape[0], JsonFile::json(-1)) << "Dynamic batch axis should be -1 in shape"; |
| 2668 | + EXPECT_NE(shape[0], max_gear_shape[0]) << "shape should differ from max_gear_shape for dynamic batch"; | ||
| 2629 | } | 2669 | } |
| 2630 | } | 2670 | } |
| 2631 | } | 2671 | } |
| @@ -2668,13 +2708,91 @@ TEST_F(Om2St, SaveModelInfo_WithDynamicBatchCase_WritesDynamicBatchInfo) { | |||
| 2668 | ASSERT_TRUE(model_meta_json.IsValid()); | 2708 | ASSERT_TRUE(model_meta_json.IsValid()); |
| 2669 | 2709 | ||
| 2670 | const auto &raw = model_meta_json.Raw(); | 2710 | const auto &raw = model_meta_json.Raw(); |
| 2671 | - EXPECT_EQ(raw.at("dynamic_type"), JsonFile::json(static_cast<int32_t>(DYNAMIC_BATCH))); | 2711 | + ASSERT_TRUE(raw.contains("dynamic_dims")); |
| 2672 | - ASSERT_EQ(raw.at("dynamic_batch_info").size(), 2U); | 2712 | + const auto &dynamic_dims = raw.at("dynamic_dims"); |
| 2673 | - EXPECT_EQ(raw.at("dynamic_batch_info")[0], JsonFile::json({1, 1, 224, 224})); | 2713 | + EXPECT_EQ(dynamic_dims.at("dynamic_type"), JsonFile::json(static_cast<int32_t>(DYNAMIC_BATCH))); |
| 2674 | - EXPECT_EQ(raw.at("dynamic_batch_info")[1], JsonFile::json({2, 1, 224, 224})); | 2714 | + ASSERT_EQ(dynamic_dims.at("user_designate_shape_order").size(), 2U); |
| 2675 | - ASSERT_EQ(raw.at("user_designate_shape_order").size(), 2U); | 2715 | + EXPECT_EQ(dynamic_dims.at("user_designate_shape_order")[0], JsonFile::json("data1")); |
| 2676 | - EXPECT_EQ(raw.at("user_designate_shape_order")[0], JsonFile::json("data1")); | 2716 | + EXPECT_EQ(dynamic_dims.at("user_designate_shape_order")[1], JsonFile::json("data2")); |
| 2677 | - EXPECT_EQ(raw.at("user_designate_shape_order")[1], JsonFile::json("data2")); | 2717 | + const auto &gears = dynamic_dims.at("gears"); |
| 2718 | + ASSERT_EQ(gears.size(), 2U); | ||
| 2719 | + EXPECT_EQ(gears[0].at("inputs"), JsonFile::json({1, 1, 224, 224})); | ||
| 2720 | + EXPECT_EQ(gears[1].at("inputs"), JsonFile::json({2, 1, 224, 224})); | ||
| 2721 | +} | ||
| 2722 | + | ||
| 2723 | +TEST_F(Om2St, SaveModelInfo_WithDynamicOutputShape_WritesGearOutputs) { | ||
| 2724 | + Om2PackageHelper om2_packager; | ||
| 2725 | + const auto ge_root_model = CreateGeRootModelWithAicoreOp(); | ||
| 2726 | + ASSERT_NE(ge_root_model, nullptr); | ||
| 2727 | + auto &compute_graph = ge_root_model->GetRootGraph(); | ||
| 2728 | + | ||
| 2729 | + auto case_desc = std::make_shared<OpDesc>("case1", CASE); | ||
| 2730 | + GeTensorDesc case_input_desc(GeShape({1}), FORMAT_ND, DT_INT32); | ||
| 2731 | + (void)case_desc->AddInputDesc(case_input_desc); | ||
| 2732 | + AttrUtils::SetInt(case_desc, ATTR_NAME_BATCH_NUM, 2U); | ||
| 2733 | + AttrUtils::SetInt(case_desc, ATTR_DYNAMIC_TYPE, static_cast<int32_t>(DYNAMIC_BATCH)); | ||
| 2734 | + AttrUtils::SetListInt(case_desc, ATTR_NAME_PRED_VALUE + "_0", {1, 1, 224, 224}); | ||
| 2735 | + AttrUtils::SetListInt(case_desc, ATTR_NAME_PRED_VALUE + "_1", {2, 1, 224, 224}); | ||
| 2736 | + AttrUtils::SetListStr(case_desc, ATTR_USER_DESIGNEATE_SHAPE_ORDER, {"data"}); | ||
| 2737 | + auto case_node = compute_graph->AddNode(case_desc); | ||
| 2738 | + ASSERT_NE(case_node, nullptr); | ||
| 2739 | + | ||
| 2740 | + for (const auto &node : compute_graph->GetDirectNode()) { | ||
| 2741 | + if (node->GetType() == NETOUTPUT) { | ||
| 2742 | + (void)AttrUtils::SetListStr(node->GetOpDesc(), ATTR_NAME_DYNAMIC_OUTPUT_DIMS, {"0,0,1,1000", "1,0,2,1000"}); | ||
| 2743 | + } else if (node->GetType() == "Add") { | ||
| 2744 | + (void)AttrUtils::SetListStr(node->GetOpDesc(), ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, | ||
| 2745 | + {"original_add_1", "original_add_2"}); | ||
| 2746 | + } | ||
| 2747 | + } | ||
| 2748 | + | ||
| 2749 | + ModelBufferData model_data; | ||
| 2750 | + const std::string output_file = PathUtils::Join({test_work_dir, "test_dynamic_output_shape.om2"}); | ||
| 2751 | + SyncKernelNameForAllModels(ge_root_model); | ||
| 2752 | + ASSERT_EQ(om2_packager.SaveToOmRootModel(ge_root_model, output_file, model_data, false), SUCCESS); | ||
| 2753 | + | ||
| 2754 | + uint32_t model_buf_size = 0; | ||
| 2755 | + const auto model_buf = GetBinDataFromFile(output_file, model_buf_size); | ||
| 2756 | + RAIIZipArchive archive(reinterpret_cast<const uint8_t *>(model_buf.get()), model_buf_size); | ||
| 2757 | + ASSERT_TRUE(archive.IsGood()); | ||
| 2758 | + | ||
| 2759 | + size_t model_meta_size = 0; | ||
| 2760 | + const auto model_meta_buf = | ||
| 2761 | + archive.ExtractToMem("test_dynamic_output_shape/data/model_0/model_meta.json", model_meta_size); | ||
| 2762 | + ASSERT_NE(model_meta_buf, nullptr); | ||
| 2763 | + const JsonFile model_meta_json(reinterpret_cast<const uint8_t *>(model_meta_buf.get()), model_meta_size); | ||
| 2764 | + ASSERT_TRUE(model_meta_json.IsValid()); | ||
| 2765 | + | ||
| 2766 | + const auto &gears = model_meta_json.Raw().at("dynamic_dims").at("gears"); | ||
| 2767 | + ASSERT_EQ(gears.size(), 2U); | ||
| 2768 | + ASSERT_TRUE(gears[0].contains("outputs")); | ||
| 2769 | + const auto &gear0_outputs = gears[0].at("outputs"); | ||
| 2770 | + ASSERT_TRUE(gear0_outputs.is_array()); | ||
| 2771 | + ASSERT_GE(gear0_outputs.size(), 1U); | ||
| 2772 | + EXPECT_EQ(gear0_outputs[0], JsonFile::json::array({1, 1000})); | ||
| 2773 | + ASSERT_TRUE(gears[1].contains("outputs")); | ||
| 2774 | + const auto &gear1_outputs = gears[1].at("outputs"); | ||
| 2775 | + ASSERT_GE(gear1_outputs.size(), 1U); | ||
| 2776 | + EXPECT_EQ(gear1_outputs[0], JsonFile::json::array({2, 1000})); | ||
| 2777 | + | ||
| 2778 | + size_t op_attr_size = 0; | ||
| 2779 | + const auto op_attr_buf = archive.ExtractToMem("test_dynamic_output_shape/data/model_0/op_attr.json", op_attr_size); | ||
| 2780 | + ASSERT_NE(op_attr_buf, nullptr); | ||
| 2781 | + const JsonFile op_attr_json(reinterpret_cast<const uint8_t *>(op_attr_buf.get()), op_attr_size); | ||
| 2782 | + ASSERT_TRUE(op_attr_json.IsValid()); | ||
| 2783 | + const auto &op_attr_raw = op_attr_json.Raw(); | ||
| 2784 | + bool found_dump_attr = false; | ||
| 2785 | + for (auto it = op_attr_raw.begin(); it != op_attr_raw.end(); ++it) { | ||
| 2786 | + if (it.value().is_object() && it.value().contains(ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES)) { | ||
| 2787 | + const auto &attr_obj = it.value().at(ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES); | ||
| 2788 | + EXPECT_EQ(attr_obj.at("type"), "LIST_STRING"); | ||
| 2789 | + EXPECT_TRUE(attr_obj.at("value").is_array()); | ||
| 2790 | + EXPECT_EQ(attr_obj.at("value").size(), 2U); | ||
| 2791 | + found_dump_attr = true; | ||
| 2792 | + break; | ||
| 2793 | + } | ||
| 2794 | + } | ||
| 2795 | + EXPECT_TRUE(found_dump_attr); | ||
| 2678 | } | 2796 | } |
| 2679 | 2797 | ||
| 2680 | TEST_F(Om2St, ConvertOm2Model_Ok_GenOm2WithSeparatelyCleanTask) { | 2798 | TEST_F(Om2St, ConvertOm2Model_Ok_GenOm2WithSeparatelyCleanTask) { |
| @@ -2705,10 +2823,10 @@ TEST_F(Om2St, ConvertOm2Model_Ok_GenOm2WithSeparatelyCleanTask) { | |||
| 2705 | "fake_test/data/model_0/runtime/Makefile", | 2823 | "fake_test/data/model_0/runtime/Makefile", |
| 2706 | "fake_test/data/model_0/runtime/libg1_om2.so", | 2824 | "fake_test/data/model_0/runtime/libg1_om2.so", |
| 2707 | "fake_test/data/constants/model_0_constants_config.json", | 2825 | "fake_test/data/constants/model_0_constants_config.json", |
| 2708 | - "fake_test/data/kernels_npu_arch/add1_faked_kernel.o", | 2826 | + "fake_test/data/kernels/add1_faked_kernel.o", |
| 2709 | - "fake_test/data/kernels_npu_arch/add1_faked_atomic_kernel.o", | 2827 | + "fake_test/data/kernels/add1_faked_atomic_kernel.o", |
| 2710 | "fake_test/data/model_0/model_meta.json", | 2828 | "fake_test/data/model_0/model_meta.json", |
| 2711 | - "fake_test/data/model_0/debug/op_attr.json", | 2829 | + "fake_test/data/model_0/op_attr.json", |
| 2712 | "fake_test/manifest.json", | 2830 | "fake_test/manifest.json", |
| 2713 | }; | 2831 | }; |
| 2714 | ExpectOm2ArchiveFiles(archive, expect_files); | 2832 | ExpectOm2ArchiveFiles(archive, expect_files); |
| @@ -157,7 +157,6 @@ TEST_F(Om2OnlineSessionTest, Om2ModelData_StructureIntegrity) { | |||
| 157 | 157 | ||
| 158 | // Populate model meta | 158 | // Populate model meta |
| 159 | model_data.model_meta.model_name = "test_model"; | 159 | model_data.model_meta.model_name = "test_model"; |
| 160 | - model_data.model_meta.root_graph_name = "root_graph"; | ||
| 161 | model_data.model_meta.work_size = 4096U; | 160 | model_data.model_meta.work_size = 4096U; |
| 162 | 161 | ||
| 163 | // Populate kernel binaries | 162 | // Populate kernel binaries |
| @@ -352,7 +351,6 @@ std::vector<uint8_t> ReadFileBytes(const std::string &path) { | |||
| 352 | gert::Om2ModelData MakeOm2ModelDataWithFakeSo(const std::string &so_path) { | 351 | gert::Om2ModelData MakeOm2ModelDataWithFakeSo(const std::string &so_path) { |
| 353 | gert::Om2ModelData model_data; | 352 | gert::Om2ModelData model_data; |
| 354 | model_data.model_meta.model_name = "st_om2_test_model"; | 353 | model_data.model_meta.model_name = "st_om2_test_model"; |
| 355 | - model_data.model_meta.root_graph_name = "test_graph"; | ||
| 356 | model_data.model_meta.work_size = 1024U; | 354 | model_data.model_meta.work_size = 1024U; |
| 357 | 355 | ||
| 358 | ge::Om2TensorDesc input_desc; | 356 | ge::Om2TensorDesc input_desc; |
| @@ -828,7 +826,6 @@ TEST_F(Om2OnlineModelExecutorTest, GetCompiledModel_Om2Mode_Success) { | |||
| 828 | 826 | ||
| 829 | const auto om2_model_data = std::make_shared<gert::Om2ModelData>(); | 827 | const auto om2_model_data = std::make_shared<gert::Om2ModelData>(); |
| 830 | om2_model_data->model_meta.model_name = "om2_st_model"; | 828 | om2_model_data->model_meta.model_name = "om2_st_model"; |
| 831 | - om2_model_data->model_meta.root_graph_name = "test_graph"; | ||
| 832 | om2_model_data->debug_info.visual_json = R"({"format":"ge_visual_json","format_version":1})"; | 829 | om2_model_data->debug_info.visual_json = R"({"format":"ge_visual_json","format_version":1})"; |
| 833 | ge_root_model->SetOm2ModelData(om2_model_data); | 830 | ge_root_model->SetOm2ModelData(om2_model_data); |
| 834 | 831 | ||
| @@ -31,7 +31,6 @@ TEST_F(Om2ModelDataTest, DefaultConstruction) { | |||
| 31 | 31 | ||
| 32 | // Verify default values for model_meta | 32 | // Verify default values for model_meta |
| 33 | EXPECT_TRUE(model_data.model_meta.model_name.empty()); | 33 | EXPECT_TRUE(model_data.model_meta.model_name.empty()); |
| 34 | - EXPECT_TRUE(model_data.model_meta.root_graph_name.empty()); | ||
| 35 | EXPECT_EQ(model_data.model_meta.work_size, 0U); | 34 | EXPECT_EQ(model_data.model_meta.work_size, 0U); |
| 36 | EXPECT_EQ(model_data.model_meta.zero_copy_size, 0); | 35 | EXPECT_EQ(model_data.model_meta.zero_copy_size, 0); |
| 37 | EXPECT_TRUE(model_data.model_meta.input_desc.empty()); | 36 | EXPECT_TRUE(model_data.model_meta.input_desc.empty()); |
| @@ -51,7 +50,7 @@ TEST_F(Om2ModelDataTest, DefaultConstruction) { | |||
| 51 | EXPECT_TRUE(model_data.kernel_binaries.empty()); | 50 | EXPECT_TRUE(model_data.kernel_binaries.empty()); |
| 52 | 51 | ||
| 53 | // Verify debug_info | 52 | // Verify debug_info |
| 54 | - EXPECT_TRUE(model_data.debug_info.op_attr_map.empty()); | 53 | + EXPECT_TRUE(model_data.debug_info.op_attr_json.empty()); |
| 55 | EXPECT_TRUE(model_data.debug_info.visual_json.empty()); | 54 | EXPECT_TRUE(model_data.debug_info.visual_json.empty()); |
| 56 | } | 55 | } |
| 57 | 56 | ||
| @@ -84,7 +83,6 @@ TEST_F(Om2ModelDataTest, PopulateModelMeta) { | |||
| 84 | Om2ModelData model_data; | 83 | Om2ModelData model_data; |
| 85 | 84 | ||
| 86 | model_data.model_meta.model_name = "test_model"; | 85 | model_data.model_meta.model_name = "test_model"; |
| 87 | - model_data.model_meta.root_graph_name = "root_graph"; | ||
| 88 | model_data.model_meta.work_size = 1024 * 1024; | 86 | model_data.model_meta.work_size = 1024 * 1024; |
| 89 | 87 | ||
| 90 | // Add input descriptors | 88 | // Add input descriptors |
| @@ -113,7 +111,6 @@ TEST_F(Om2ModelDataTest, PopulateModelMeta) { | |||
| 113 | 111 | ||
| 114 | // Verify | 112 | // Verify |
| 115 | EXPECT_EQ(model_data.model_meta.model_name, "test_model"); | 113 | EXPECT_EQ(model_data.model_meta.model_name, "test_model"); |
| 116 | - EXPECT_EQ(model_data.model_meta.root_graph_name, "root_graph"); | ||
| 117 | EXPECT_EQ(model_data.model_meta.work_size, 1024 * 1024); | 114 | EXPECT_EQ(model_data.model_meta.work_size, 1024 * 1024); |
| 118 | EXPECT_EQ(model_data.model_meta.input_desc.size(), 1U); | 115 | EXPECT_EQ(model_data.model_meta.input_desc.size(), 1U); |
| 119 | EXPECT_EQ(model_data.model_meta.input_desc[0].GetName(), "input"); | 116 | EXPECT_EQ(model_data.model_meta.input_desc[0].GetName(), "input"); |
| @@ -205,12 +202,12 @@ TEST_F(Om2ModelDataTest, PopulateDebugInfo) { | |||
| 205 | Om2ModelData model_data; | 202 | Om2ModelData model_data; |
| 206 | 203 | ||
| 207 | model_data.debug_info.visual_json = R"({"format":"ge_visual_json","format_version":1})"; | 204 | model_data.debug_info.visual_json = R"({"format":"ge_visual_json","format_version":1})"; |
| 208 | - model_data.debug_info.op_attr_map["add"] = {{"alpha", "1.0"}, {"beta", "1.0"}}; | 205 | + model_data.debug_info.op_attr_json = R"({"add":{"alpha":{"type":"FLOAT","value":1.0}}})"; |
| 209 | 206 | ||
| 210 | // Verify | 207 | // Verify |
| 211 | EXPECT_EQ(model_data.debug_info.visual_json, R"({"format":"ge_visual_json","format_version":1})"); | 208 | EXPECT_EQ(model_data.debug_info.visual_json, R"({"format":"ge_visual_json","format_version":1})"); |
| 212 | - ASSERT_EQ(model_data.debug_info.op_attr_map.size(), 1U); | 209 | + EXPECT_FALSE(model_data.debug_info.op_attr_json.empty()); |
| 213 | - EXPECT_EQ(model_data.debug_info.op_attr_map["add"]["alpha"], "1.0"); | 210 | + EXPECT_NE(model_data.debug_info.op_attr_json.find("add"), std::string::npos); |
| 214 | } | 211 | } |
| 215 | 212 | ||
| 216 | // Test populating manifest | 213 | // Test populating manifest |
| @@ -85,15 +85,22 @@ std::string MakeManifestJson() { | |||
| 85 | return R"({ | 85 | return R"({ |
| 86 | "atc_command": "", | 86 | "atc_command": "", |
| 87 | "model_num": 1, | 87 | "model_num": 1, |
| 88 | - "om2_version": "0" | 88 | + "om2_version": "1.0" |
| 89 | })"; | 89 | })"; |
| 90 | } | 90 | } |
| 91 | 91 | ||
| 92 | std::string MakeModelMetaJsonWithDynamicBatch() { | 92 | std::string MakeModelMetaJsonWithDynamicBatch() { |
| 93 | return R"({ | 93 | return R"({ |
| 94 | - "dynamic_batch_info": [[1], [2], [4], [8]], | 94 | + "dynamic_dims": { |
| 95 | - "dynamic_output_shape": ["0:0:1,1000", "1:0:2,1000", "2:0:4,1000", "3:0:8,1000"], | 95 | + "dynamic_type": 1, |
| 96 | - "dynamic_type": 1, | 96 | + "user_designate_shape_order": ["data"], |
| 97 | + "gears": [ | ||
| 98 | + {"inputs": [1], "outputs": [[1, 1000]]}, | ||
| 99 | + {"inputs": [2], "outputs": [[2, 1000]]}, | ||
| 100 | + {"inputs": [4], "outputs": [[4, 1000]]}, | ||
| 101 | + {"inputs": [8], "outputs": [[8, 1000]]} | ||
| 102 | + ] | ||
| 103 | + }, | ||
| 97 | "inputs": [ | 104 | "inputs": [ |
| 98 | { | 105 | { |
| 99 | "data_type": "DT_FLOAT", | 106 | "data_type": "DT_FLOAT", |
| @@ -101,13 +108,12 @@ std::string MakeModelMetaJsonWithDynamicBatch() { | |||
| 101 | "index": 0, | 108 | "index": 0, |
| 102 | "name": "data", | 109 | "name": "data", |
| 103 | "shape": [-1, 3, 224, 224], | 110 | "shape": [-1, 3, 224, 224], |
| 111 | + "max_gear_shape": [8, 3, 224, 224], | ||
| 104 | "shape_range": [], | 112 | "shape_range": [], |
| 105 | - "shape_v2": [-1, 3, 224, 224], | ||
| 106 | "size": 0 | 113 | "size": 0 |
| 107 | } | 114 | } |
| 108 | ], | 115 | ], |
| 109 | "name": "g1", | 116 | "name": "g1", |
| 110 | - "root_graph_name": "root_g1", | ||
| 111 | "outputs": [ | 117 | "outputs": [ |
| 112 | { | 118 | { |
| 113 | "data_type": "DT_FLOAT", | 119 | "data_type": "DT_FLOAT", |
| @@ -120,16 +126,20 @@ std::string MakeModelMetaJsonWithDynamicBatch() { | |||
| 120 | } | 126 | } |
| 121 | ], | 127 | ], |
| 122 | "work_size": 2048, | 128 | "work_size": 2048, |
| 123 | - "zero_copy_size": 0, | 129 | + "zero_copy_size": 0 |
| 124 | - "user_designate_shape_order": ["data"] | ||
| 125 | })"; | 130 | })"; |
| 126 | } | 131 | } |
| 127 | 132 | ||
| 128 | std::string MakeModelMetaJsonWithDynamicHW() { | 133 | std::string MakeModelMetaJsonWithDynamicHW() { |
| 129 | return R"({ | 134 | return R"({ |
| 130 | - "dynamic_batch_info": [[224, 224], [448, 448]], | 135 | + "dynamic_dims": { |
| 131 | - "dynamic_output_shape": ["0:0:1,1000", "1:0:1,1000"], | 136 | + "dynamic_type": 2, |
| 132 | - "dynamic_type": 2, | 137 | + "user_designate_shape_order": ["data"], |
| 138 | + "gears": [ | ||
| 139 | + {"inputs": [224, 224], "outputs": [[1, 1000]]}, | ||
| 140 | + {"inputs": [448, 448], "outputs": [[1, 1000]]} | ||
| 141 | + ] | ||
| 142 | + }, | ||
| 133 | "inputs": [ | 143 | "inputs": [ |
| 134 | { | 144 | { |
| 135 | "data_type": "DT_FLOAT", | 145 | "data_type": "DT_FLOAT", |
| @@ -137,13 +147,12 @@ std::string MakeModelMetaJsonWithDynamicHW() { | |||
| 137 | "index": 0, | 147 | "index": 0, |
| 138 | "name": "data", | 148 | "name": "data", |
| 139 | "shape": [1, 3, -1, -1], | 149 | "shape": [1, 3, -1, -1], |
| 150 | + "max_gear_shape": [1, 3, 448, 448], | ||
| 140 | "shape_range": [], | 151 | "shape_range": [], |
| 141 | - "shape_v2": [1, 3, -1, -1], | ||
| 142 | "size": 0 | 152 | "size": 0 |
| 143 | } | 153 | } |
| 144 | ], | 154 | ], |
| 145 | "name": "g1", | 155 | "name": "g1", |
| 146 | - "root_graph_name": "root_g1", | ||
| 147 | "outputs": [ | 156 | "outputs": [ |
| 148 | { | 157 | { |
| 149 | "data_type": "DT_FLOAT", | 158 | "data_type": "DT_FLOAT", |
| @@ -156,16 +165,21 @@ std::string MakeModelMetaJsonWithDynamicHW() { | |||
| 156 | } | 165 | } |
| 157 | ], | 166 | ], |
| 158 | "work_size": 2048, | 167 | "work_size": 2048, |
| 159 | - "zero_copy_size": 0, | 168 | + "zero_copy_size": 0 |
| 160 | - "user_designate_shape_order": ["data"] | ||
| 161 | })"; | 169 | })"; |
| 162 | } | 170 | } |
| 163 | 171 | ||
| 164 | std::string MakeModelMetaJsonWithDynamicDims() { | 172 | std::string MakeModelMetaJsonWithDynamicDims() { |
| 165 | return R"({ | 173 | return R"({ |
| 166 | - "dynamic_batch_info": [[1, 128], [1, 256], [1, 512]], | 174 | + "dynamic_dims": { |
| 167 | - "dynamic_output_shape": ["0:0:1,128", "1:0:1,256", "2:0:1,512"], | 175 | + "dynamic_type": 3, |
| 168 | - "dynamic_type": 3, | 176 | + "user_designate_shape_order": ["data"], |
| 177 | + "gears": [ | ||
| 178 | + {"inputs": [1, 128], "outputs": [[1, 128]]}, | ||
| 179 | + {"inputs": [1, 256], "outputs": [[1, 256]]}, | ||
| 180 | + {"inputs": [1, 512], "outputs": [[1, 512]]} | ||
| 181 | + ] | ||
| 182 | + }, | ||
| 169 | "inputs": [ | 183 | "inputs": [ |
| 170 | { | 184 | { |
| 171 | "data_type": "DT_FLOAT", | 185 | "data_type": "DT_FLOAT", |
| @@ -173,13 +187,12 @@ std::string MakeModelMetaJsonWithDynamicDims() { | |||
| 173 | "index": 0, | 187 | "index": 0, |
| 174 | "name": "data", | 188 | "name": "data", |
| 175 | "shape": [-1, -1], | 189 | "shape": [-1, -1], |
| 190 | + "max_gear_shape": [1, 512], | ||
| 176 | "shape_range": [], | 191 | "shape_range": [], |
| 177 | - "shape_v2": [-1, -1], | ||
| 178 | "size": 0 | 192 | "size": 0 |
| 179 | } | 193 | } |
| 180 | ], | 194 | ], |
| 181 | "name": "g1", | 195 | "name": "g1", |
| 182 | - "root_graph_name": "root_g1", | ||
| 183 | "outputs": [ | 196 | "outputs": [ |
| 184 | { | 197 | { |
| 185 | "data_type": "DT_FLOAT", | 198 | "data_type": "DT_FLOAT", |
| @@ -192,16 +205,12 @@ std::string MakeModelMetaJsonWithDynamicDims() { | |||
| 192 | } | 205 | } |
| 193 | ], | 206 | ], |
| 194 | "work_size": 2048, | 207 | "work_size": 2048, |
| 195 | - "zero_copy_size": 0, | 208 | + "zero_copy_size": 0 |
| 196 | - "user_designate_shape_order": ["data"] | ||
| 197 | })"; | 209 | })"; |
| 198 | } | 210 | } |
| 199 | 211 | ||
| 200 | std::string MakeModelMetaJson() { | 212 | std::string MakeModelMetaJson() { |
| 201 | return R"({ | 213 | return R"({ |
| 202 | - "dynamic_batch_info": [], | ||
| 203 | - "dynamic_output_shape": [], | ||
| 204 | - "dynamic_type": 0, | ||
| 205 | "inputs": [ | 214 | "inputs": [ |
| 206 | { | 215 | { |
| 207 | "data_type": "DT_FLOAT", | 216 | "data_type": "DT_FLOAT", |
| @@ -210,7 +219,6 @@ std::string MakeModelMetaJson() { | |||
| 210 | "name": "data1", | 219 | "name": "data1", |
| 211 | "shape": [1, 2, 3, 4], | 220 | "shape": [1, 2, 3, 4], |
| 212 | "shape_range": [], | 221 | "shape_range": [], |
| 213 | - "shape_v2": [1, 2, 3, 4], | ||
| 214 | "size": 0 | 222 | "size": 0 |
| 215 | }, | 223 | }, |
| 216 | { | 224 | { |
| @@ -220,12 +228,10 @@ std::string MakeModelMetaJson() { | |||
| 220 | "name": "data2", | 228 | "name": "data2", |
| 221 | "shape": [1, 1, 224, 224], | 229 | "shape": [1, 1, 224, 224], |
| 222 | "shape_range": [], | 230 | "shape_range": [], |
| 223 | - "shape_v2": [1, 1, 224, 224], | ||
| 224 | "size": 0 | 231 | "size": 0 |
| 225 | } | 232 | } |
| 226 | ], | 233 | ], |
| 227 | "name": "g1", | 234 | "name": "g1", |
| 228 | - "root_graph_name": "root_g1", | ||
| 229 | "outputs": [ | 235 | "outputs": [ |
| 230 | { | 236 | { |
| 231 | "data_type": "DT_FLOAT", | 237 | "data_type": "DT_FLOAT", |
| @@ -238,26 +244,22 @@ std::string MakeModelMetaJson() { | |||
| 238 | } | 244 | } |
| 239 | ], | 245 | ], |
| 240 | "work_size": 2048, | 246 | "work_size": 2048, |
| 241 | - "zero_copy_size": 0, | 247 | + "zero_copy_size": 0 |
| 242 | - "user_designate_shape_order": [] | ||
| 243 | })"; | 248 | })"; |
| 244 | } | 249 | } |
| 245 | 250 | ||
| 246 | std::string MakeModelMetaJsonWithZeroCopySize() { | 251 | std::string MakeModelMetaJsonWithZeroCopySize() { |
| 247 | return R"({ | 252 | return R"({ |
| 248 | - "dynamic_batch_info": [], | ||
| 249 | - "dynamic_output_shape": [], | ||
| 250 | - "dynamic_type": 0, | ||
| 251 | "inputs": [ | 253 | "inputs": [ |
| 252 | { | 254 | { |
| 253 | "data_type": "DT_FLOAT", | 255 | "data_type": "DT_FLOAT", |
| 254 | "format": "ND", | 256 | "format": "ND", |
| 255 | "index": 0, | 257 | "index": 0, |
| 256 | "name": "data1", | 258 | "name": "data1", |
| 257 | - "origin_input_dims": [1, -1, 3, 4], | 259 | + "shape": [1, -1, 3, 4], |
| 258 | - "shape": [1, 2, 3, 4], | 260 | + "max_gear_shape": [1, 2, 3, 4], |
| 261 | + "shape_aclmdlGetInputDimsV2": [1, 8, 3, 4], | ||
| 259 | "shape_range": [], | 262 | "shape_range": [], |
| 260 | - "shape_v2": [1, 8, 3, 4], | ||
| 261 | "size": 0 | 263 | "size": 0 |
| 262 | }, | 264 | }, |
| 263 | { | 265 | { |
| @@ -265,15 +267,14 @@ std::string MakeModelMetaJsonWithZeroCopySize() { | |||
| 265 | "format": "NCHW", | 267 | "format": "NCHW", |
| 266 | "index": 1, | 268 | "index": 1, |
| 267 | "name": "data2", | 269 | "name": "data2", |
| 268 | - "origin_input_dims": [1, 1, -1, 224], | 270 | + "shape": [1, 1, -1, 224], |
| 269 | - "shape": [1, 1, 224, 224], | 271 | + "max_gear_shape": [1, 1, 224, 224], |
| 272 | + "shape_aclmdlGetInputDimsV2": [1, 1, 448, 224], | ||
| 270 | "shape_range": [], | 273 | "shape_range": [], |
| 271 | - "shape_v2": [1, 1, 448, 224], | ||
| 272 | "size": 0 | 274 | "size": 0 |
| 273 | } | 275 | } |
| 274 | ], | 276 | ], |
| 275 | "name": "g1", | 277 | "name": "g1", |
| 276 | - "root_graph_name": "root_g1", | ||
| 277 | "outputs": [ | 278 | "outputs": [ |
| 278 | { | 279 | { |
| 279 | "data_type": "DT_FLOAT", | 280 | "data_type": "DT_FLOAT", |
| @@ -286,37 +287,28 @@ std::string MakeModelMetaJsonWithZeroCopySize() { | |||
| 286 | } | 287 | } |
| 287 | ], | 288 | ], |
| 288 | "work_size": 2048, | 289 | "work_size": 2048, |
| 289 | - "zero_copy_size": 1024, | 290 | + "zero_copy_size": 1024 |
| 290 | - "user_designate_shape_order": [] | ||
| 291 | })"; | 291 | })"; |
| 292 | } | 292 | } |
| 293 | 293 | ||
| 294 | std::string MakeModelMetaJsonWithoutRootGraphName() { | 294 | std::string MakeModelMetaJsonWithoutRootGraphName() { |
| 295 | return R"({ | 295 | return R"({ |
| 296 | - "dynamic_batch_info": [], | ||
| 297 | - "dynamic_output_shape": [], | ||
| 298 | - "dynamic_type": 0, | ||
| 299 | "inputs": [], | 296 | "inputs": [], |
| 300 | "name": "g1", | 297 | "name": "g1", |
| 301 | "outputs": [], | 298 | "outputs": [], |
| 302 | "work_size": 2048, | 299 | "work_size": 2048, |
| 303 | - "zero_copy_size": 0, | 300 | + "zero_copy_size": 0 |
| 304 | - "user_designate_shape_order": [] | ||
| 305 | })"; | 301 | })"; |
| 306 | } | 302 | } |
| 307 | 303 | ||
| 308 | -std::string MakeModelMetaJsonWithoutInputShapeV2() { | 304 | +std::string MakeModelMetaJsonWithoutInputShape() { |
| 309 | return R"({ | 305 | return R"({ |
| 310 | - "dynamic_batch_info": [], | ||
| 311 | - "dynamic_output_shape": [], | ||
| 312 | - "dynamic_type": 0, | ||
| 313 | "inputs": [ | 306 | "inputs": [ |
| 314 | { | 307 | { |
| 315 | "data_type": "DT_FLOAT", | 308 | "data_type": "DT_FLOAT", |
| 316 | "format": "ND", | 309 | "format": "ND", |
| 317 | "index": 0, | 310 | "index": 0, |
| 318 | "name": "data1", | 311 | "name": "data1", |
| 319 | - "shape": [1, 2, 3, 4], | ||
| 320 | "shape_range": [], | 312 | "shape_range": [], |
| 321 | "size": 0 | 313 | "size": 0 |
| 322 | } | 314 | } |
| @@ -672,12 +664,11 @@ std::string MakeConstantsConfigJson() { | |||
| 672 | "internal_weight_size": 16, | 664 | "internal_weight_size": 16, |
| 673 | "consts": { | 665 | "consts": { |
| 674 | "fc1_weight": { | 666 | "fc1_weight": { |
| 675 | - "file_name": "", | 667 | + "file_name": "constant_0", |
| 676 | "index": 0, | 668 | "index": 0, |
| 677 | "type": "INTERNAL", | 669 | "type": "INTERNAL", |
| 678 | "offset": 0, | 670 | "offset": 0, |
| 679 | - "size": 16, | 671 | + "size": 16 |
| 680 | - "op_name": "fc1_weight" | ||
| 681 | } | 672 | } |
| 682 | } | 673 | } |
| 683 | })"; | 674 | })"; |
| @@ -692,8 +683,7 @@ std::string MakeIndividualConstantsConfigJson() { | |||
| 692 | "index": 0, | 683 | "index": 0, |
| 693 | "type": "INDIVIDUAL", | 684 | "type": "INDIVIDUAL", |
| 694 | "offset": 1, | 685 | "offset": 1, |
| 695 | - "size": 2, | 686 | + "size": 2 |
| 696 | - "op_name": "fc1_weight" | ||
| 697 | } | 687 | } |
| 698 | } | 688 | } |
| 699 | })"; | 689 | })"; |
| @@ -708,8 +698,7 @@ std::string MakeIndividualConstantsConfigJsonWithZeroInternalWeightSize() { | |||
| 708 | "index": 0, | 698 | "index": 0, |
| 709 | "type": "INDIVIDUAL", | 699 | "type": "INDIVIDUAL", |
| 710 | "offset": 1, | 700 | "offset": 1, |
| 711 | - "size": 2, | 701 | + "size": 2 |
| 712 | - "op_name": "fc1_weight" | ||
| 713 | } | 702 | } |
| 714 | } | 703 | } |
| 715 | })"; | 704 | })"; |
| @@ -724,8 +713,7 @@ std::string MakeCombinedConstantsConfigJson() { | |||
| 724 | "index": 0, | 713 | "index": 0, |
| 725 | "type": "COMBINED", | 714 | "type": "COMBINED", |
| 726 | "offset": 1, | 715 | "offset": 1, |
| 727 | - "size": 2, | 716 | + "size": 2 |
| 728 | - "op_name": "fc1_weight" | ||
| 729 | } | 717 | } |
| 730 | } | 718 | } |
| 731 | })"; | 719 | })"; |
| @@ -736,28 +724,25 @@ std::string MakeMixedConstantsConfigJson() { | |||
| 736 | "internal_weight_size": 16, | 724 | "internal_weight_size": 16, |
| 737 | "consts": { | 725 | "consts": { |
| 738 | "fc0_weight": { | 726 | "fc0_weight": { |
| 739 | - "file_name": "", | 727 | + "file_name": "constant_0", |
| 740 | "index": 0, | 728 | "index": 0, |
| 741 | "type": "INTERNAL", | 729 | "type": "INTERNAL", |
| 742 | "offset": 0, | 730 | "offset": 0, |
| 743 | - "size": 16, | 731 | + "size": 16 |
| 744 | - "op_name": "fc0_weight" | ||
| 745 | }, | 732 | }, |
| 746 | "fc1_weight": { | 733 | "fc1_weight": { |
| 747 | "file_name": "mixed_fc.bin", | 734 | "file_name": "mixed_fc.bin", |
| 748 | "index": 1, | 735 | "index": 1, |
| 749 | "type": "INDIVIDUAL", | 736 | "type": "INDIVIDUAL", |
| 750 | "offset": 1, | 737 | "offset": 1, |
| 751 | - "size": 2, | 738 | + "size": 2 |
| 752 | - "op_name": "fc1_weight" | ||
| 753 | }, | 739 | }, |
| 754 | "fc2_weight": { | 740 | "fc2_weight": { |
| 755 | "file_name": "mixed_combined.bin", | 741 | "file_name": "mixed_combined.bin", |
| 756 | "index": 2, | 742 | "index": 2, |
| 757 | "type": "COMBINED", | 743 | "type": "COMBINED", |
| 758 | "offset": 1, | 744 | "offset": 1, |
| 759 | - "size": 2, | 745 | + "size": 2 |
| 760 | - "op_name": "fc2_weight" | ||
| 761 | } | 746 | } |
| 762 | } | 747 | } |
| 763 | })"; | 748 | })"; |
| @@ -772,16 +757,14 @@ std::string MakeDuplicateIndividualConstantsConfigJson() { | |||
| 772 | "index": 1, | 757 | "index": 1, |
| 773 | "type": "INDIVIDUAL", | 758 | "type": "INDIVIDUAL", |
| 774 | "offset": 1, | 759 | "offset": 1, |
| 775 | - "size": 2, | 760 | + "size": 2 |
| 776 | - "op_name": "fc1_weight" | ||
| 777 | }, | 761 | }, |
| 778 | "fc2_weight": { | 762 | "fc2_weight": { |
| 779 | "file_name": "duplicate_fc.bin", | 763 | "file_name": "duplicate_fc.bin", |
| 780 | "index": 2, | 764 | "index": 2, |
| 781 | "type": "INDIVIDUAL", | 765 | "type": "INDIVIDUAL", |
| 782 | "offset": 1, | 766 | "offset": 1, |
| 783 | - "size": 2, | 767 | + "size": 2 |
| 784 | - "op_name": "fc2_weight" | ||
| 785 | } | 768 | } |
| 786 | } | 769 | } |
| 787 | })"; | 770 | })"; |
| @@ -1596,8 +1579,8 @@ TEST_F(Om2ModelExecutorUt, load_failed_when_model_desc_is_invalid) { | |||
| 1596 | ZipArchiveWriter zip_writer(om2_file_path); | 1579 | ZipArchiveWriter zip_writer(om2_file_path); |
| 1597 | ASSERT_TRUE(zip_writer.IsMemFileOpened()); | 1580 | ASSERT_TRUE(zip_writer.IsMemFileOpened()); |
| 1598 | const auto manifest = MakeManifestJson(); | 1581 | const auto manifest = MakeManifestJson(); |
| 1599 | - // Missing input shape_v2 should fail while parsing the cached v2 model desc. | 1582 | + // Missing input shape should fail while parsing the cached model desc. |
| 1600 | - const auto model_meta = MakeModelMetaJsonWithoutInputShapeV2(); | 1583 | + const auto model_meta = MakeModelMetaJsonWithoutInputShape(); |
| 1601 | ASSERT_TRUE(zip_writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); | 1584 | ASSERT_TRUE(zip_writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); |
| 1602 | ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/model_meta.json", model_meta.data(), model_meta.size(), false)); | 1585 | ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/model_meta.json", model_meta.data(), model_meta.size(), false)); |
| 1603 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/libg1_om2.so", | 1586 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/libg1_om2.so", |
| @@ -1992,7 +1975,7 @@ TEST_F(Om2ModelExecutorUt, get_mem_and_weight_size_from_mem_ok) { | |||
| 1992 | 1975 | ||
| 1993 | // 辅助函数:生成带属性的op_attr.json | 1976 | // 辅助函数:生成带属性的op_attr.json |
| 1994 | static std::string MakeOpAttrJson() { | 1977 | static std::string MakeOpAttrJson() { |
| 1995 | - return R"({"test_op":{"_datadump_original_op_names":"[12]original_op1[12]original_op2"}})"; | 1978 | + return R"({"test_op":{"_datadump_original_op_names":{"type":"LIST_STRING","value":["original_op1","original_op2"]}}})"; |
| 1996 | } | 1979 | } |
| 1997 | 1980 | ||
| 1998 | // 辅助函数:生成空op_attr.json | 1981 | // 辅助函数:生成空op_attr.json |
| @@ -2007,7 +1990,7 @@ static std::string MakeInvalidOpAttrJson() { | |||
| 2007 | 1990 | ||
| 2008 | // 辅助函数:生成多个算子属性的op_attr.json | 1991 | // 辅助函数:生成多个算子属性的op_attr.json |
| 2009 | static std::string MakeMultipleOpAttrJson() { | 1992 | static std::string MakeMultipleOpAttrJson() { |
| 2010 | - return R"({"op1":{"_datadump_original_op_names":"[5]orig1[5]orig2","_another_attr":"test_value"},"op2":{"_datadump_original_op_names":"[5]orig3"}})"; | 1993 | + return R"({"op1":{"_datadump_original_op_names":{"type":"LIST_STRING","value":["orig1","orig2"]},"_another_attr":{"type":"STRING","value":"test_value"}},"op2":{"_datadump_original_op_names":{"type":"LIST_STRING","value":["orig3"]}}})"; |
| 2011 | } | 1994 | } |
| 2012 | 1995 | ||
| 2013 | TEST_F(Om2ModelExecutorUt, GetOpAttr_ValidOpAttrJson_ReturnsParsedMap) { | 1996 | TEST_F(Om2ModelExecutorUt, GetOpAttr_ValidOpAttrJson_ReturnsParsedMap) { |
| @@ -2039,7 +2022,7 @@ TEST_F(Om2ModelExecutorUt, GetOpAttr_ValidOpAttrJson_ReturnsParsedMap) { | |||
| 2039 | const auto op_attr = MakeOpAttrJson(); | 2022 | const auto op_attr = MakeOpAttrJson(); |
| 2040 | ASSERT_TRUE(zip_writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); | 2023 | ASSERT_TRUE(zip_writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); |
| 2041 | ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/model_meta.json", model_meta.data(), model_meta.size(), false)); | 2024 | ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/model_meta.json", model_meta.data(), model_meta.size(), false)); |
| 2042 | - ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/debug/op_attr.json", op_attr.data(), op_attr.size(), false)); | 2025 | + ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/op_attr.json", op_attr.data(), op_attr.size(), false)); |
| 2043 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/CMakeLists.txt", | 2026 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/CMakeLists.txt", |
| 2044 | PathUtils::Join({runtime_dir, "CMakeLists.txt"}), false)); | 2027 | PathUtils::Join({runtime_dir, "CMakeLists.txt"}), false)); |
| 2045 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/g1_interface.h", | 2028 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/g1_interface.h", |
| @@ -2114,7 +2097,7 @@ TEST_F(Om2ModelExecutorUt, GetOpAttr_EmptyOpAttrJson_ReturnsEmptyMap) { | |||
| 2114 | const auto op_attr = MakeEmptyOpAttrJson(); | 2097 | const auto op_attr = MakeEmptyOpAttrJson(); |
| 2115 | ASSERT_TRUE(zip_writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); | 2098 | ASSERT_TRUE(zip_writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); |
| 2116 | ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/model_meta.json", model_meta.data(), model_meta.size(), false)); | 2099 | ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/model_meta.json", model_meta.data(), model_meta.size(), false)); |
| 2117 | - ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/debug/op_attr.json", op_attr.data(), op_attr.size(), false)); | 2100 | + ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/op_attr.json", op_attr.data(), op_attr.size(), false)); |
| 2118 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/CMakeLists.txt", | 2101 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/CMakeLists.txt", |
| 2119 | PathUtils::Join({runtime_dir, "CMakeLists.txt"}), false)); | 2102 | PathUtils::Join({runtime_dir, "CMakeLists.txt"}), false)); |
| 2120 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/g1_interface.h", | 2103 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/g1_interface.h", |
| @@ -2199,7 +2182,7 @@ TEST_F(Om2ModelExecutorUt, GetOpAttr_InvalidOpAttrJson_ReturnsEmptyMap) { | |||
| 2199 | const auto op_attr = MakeInvalidOpAttrJson(); | 2182 | const auto op_attr = MakeInvalidOpAttrJson(); |
| 2200 | ASSERT_TRUE(zip_writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); | 2183 | ASSERT_TRUE(zip_writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); |
| 2201 | ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/model_meta.json", model_meta.data(), model_meta.size(), false)); | 2184 | ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/model_meta.json", model_meta.data(), model_meta.size(), false)); |
| 2202 | - ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/debug/op_attr.json", op_attr.data(), op_attr.size(), false)); | 2185 | + ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/op_attr.json", op_attr.data(), op_attr.size(), false)); |
| 2203 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/CMakeLists.txt", | 2186 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/CMakeLists.txt", |
| 2204 | PathUtils::Join({runtime_dir, "CMakeLists.txt"}), false)); | 2187 | PathUtils::Join({runtime_dir, "CMakeLists.txt"}), false)); |
| 2205 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/g1_interface.h", | 2188 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/g1_interface.h", |
| @@ -2267,7 +2250,7 @@ TEST_F(Om2ModelExecutorUt, ParseOpAttrJsonToMapInternal_MultipleAttrs_ParsesAllA | |||
| 2267 | const auto op_attr = MakeMultipleOpAttrJson(); | 2250 | const auto op_attr = MakeMultipleOpAttrJson(); |
| 2268 | ASSERT_TRUE(zip_writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); | 2251 | ASSERT_TRUE(zip_writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); |
| 2269 | ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/model_meta.json", model_meta.data(), model_meta.size(), false)); | 2252 | ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/model_meta.json", model_meta.data(), model_meta.size(), false)); |
| 2270 | - ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/debug/op_attr.json", op_attr.data(), op_attr.size(), false)); | 2253 | + ASSERT_TRUE(zip_writer.WriteBytes("data/model_0/op_attr.json", op_attr.data(), op_attr.size(), false)); |
| 2271 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/CMakeLists.txt", | 2254 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/CMakeLists.txt", |
| 2272 | PathUtils::Join({runtime_dir, "CMakeLists.txt"}), false)); | 2255 | PathUtils::Join({runtime_dir, "CMakeLists.txt"}), false)); |
| 2273 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/g1_interface.h", | 2256 | ASSERT_TRUE(zip_writer.WriteFile("data/model_0/runtime/g1_interface.h", |
| @@ -2709,9 +2692,6 @@ TEST_F(Om2ModelExecutorUt, GetCurrentShape_AfterFailedSet_ReturnsEmpty) { | |||
| 2709 | 2692 | ||
| 2710 | namespace { | 2693 | namespace { |
| 2711 | constexpr const char *kAippModelMetaJson = R"({ | 2694 | constexpr const char *kAippModelMetaJson = R"({ |
| 2712 | - "dynamic_batch_info": [], | ||
| 2713 | - "dynamic_output_shape": [], | ||
| 2714 | - "dynamic_type": 0, | ||
| 2715 | "inputs": [ | 2695 | "inputs": [ |
| 2716 | { | 2696 | { |
| 2717 | "data_type": "DT_FLOAT", | 2697 | "data_type": "DT_FLOAT", |
| @@ -2720,12 +2700,11 @@ constexpr const char *kAippModelMetaJson = R"({ | |||
| 2720 | "name": "data1", | 2700 | "name": "data1", |
| 2721 | "shape": [1, 3, 224, 224], | 2701 | "shape": [1, 3, 224, 224], |
| 2722 | "shape_range": [], | 2702 | "shape_range": [], |
| 2723 | - "shape_v2": [1, 3, 224, 224], | 2703 | + "shape_aclmdlGetInputDimsV2": [1, 3, 224, 224], |
| 2724 | "size": 0 | 2704 | "size": 0 |
| 2725 | } | 2705 | } |
| 2726 | ], | 2706 | ], |
| 2727 | "name": "g1", | 2707 | "name": "g1", |
| 2728 | - "root_graph_name": "root_g1", | ||
| 2729 | "outputs": [ | 2708 | "outputs": [ |
| 2730 | { | 2709 | { |
| 2731 | "data_type": "DT_FLOAT", | 2710 | "data_type": "DT_FLOAT", |
| @@ -2734,13 +2713,12 @@ constexpr const char *kAippModelMetaJson = R"({ | |||
| 2734 | "name": "output_0", | 2713 | "name": "output_0", |
| 2735 | "shape": [1, 1000], | 2714 | "shape": [1, 1000], |
| 2736 | "shape_range": [], | 2715 | "shape_range": [], |
| 2737 | - "shape_v2": [1, 1000], | 2716 | + "shape_aclmdlGetInputDimsV2": [1, 1000], |
| 2738 | "size": 0 | 2717 | "size": 0 |
| 2739 | } | 2718 | } |
| 2740 | ], | 2719 | ], |
| 2741 | "work_size": 2048, | 2720 | "work_size": 2048, |
| 2742 | - "zero_copy_size": 0, | 2721 | + "zero_copy_size": 0 |
| 2743 | - "user_designate_shape_order": [] | ||
| 2744 | })"; | 2722 | })"; |
| 2745 | 2723 | ||
| 2746 | constexpr const char *kAippJsonSectionStatic = R"("aipp": { | 2724 | constexpr const char *kAippJsonSectionStatic = R"("aipp": { |
| @@ -131,7 +131,6 @@ gert::Om2ModelLoadArg MakeLoadArg(uint32_t model_id) { | |||
| 131 | gert::Om2ModelData MakeOm2ModelDataWithFakeSo(const std::string &so_bytes_path) { | 131 | gert::Om2ModelData MakeOm2ModelDataWithFakeSo(const std::string &so_bytes_path) { |
| 132 | gert::Om2ModelData model_data; | 132 | gert::Om2ModelData model_data; |
| 133 | model_data.model_meta.model_name = "test_model"; | 133 | model_data.model_meta.model_name = "test_model"; |
| 134 | - model_data.model_meta.root_graph_name = "test_graph"; | ||
| 135 | model_data.model_meta.work_size = 1024U; | 134 | model_data.model_meta.work_size = 1024U; |
| 136 | 135 | ||
| 137 | // Add a minimal input/output descriptor so model desc is valid | 136 | // Add a minimal input/output descriptor so model desc is valid |
| @@ -154,7 +154,6 @@ std::vector<uint8_t> ReadFileBytes(const std::string &path) { | |||
| 154 | gert::Om2ModelData MakeOm2ModelDataWithFakeSo(const std::string &so_path) { | 154 | gert::Om2ModelData MakeOm2ModelDataWithFakeSo(const std::string &so_path) { |
| 155 | gert::Om2ModelData model_data; | 155 | gert::Om2ModelData model_data; |
| 156 | model_data.model_meta.model_name = "test_model"; | 156 | model_data.model_meta.model_name = "test_model"; |
| 157 | - model_data.model_meta.root_graph_name = "test_graph"; | ||
| 158 | model_data.model_meta.work_size = 1024U; | 157 | model_data.model_meta.work_size = 1024U; |
| 159 | 158 | ||
| 160 | ge::Om2TensorDesc input_desc; | 159 | ge::Om2TensorDesc input_desc; |
| @@ -183,7 +182,6 @@ gert::Om2ModelData MakeOm2ModelDataWithFakeSo(const std::string &so_path) { | |||
| 183 | gert::Om2ModelData MakeMinimalOm2ModelData(size_t work_size = 1024U, size_t tensor_size = 16U) { | 182 | gert::Om2ModelData MakeMinimalOm2ModelData(size_t work_size = 1024U, size_t tensor_size = 16U) { |
| 184 | gert::Om2ModelData model_data; | 183 | gert::Om2ModelData model_data; |
| 185 | model_data.model_meta.model_name = "om2_ut_model"; | 184 | model_data.model_meta.model_name = "om2_ut_model"; |
| 186 | - model_data.model_meta.root_graph_name = "test_graph"; | ||
| 187 | model_data.model_meta.work_size = work_size; | 185 | model_data.model_meta.work_size = work_size; |
| 188 | 186 | ||
| 189 | ge::Om2TensorDesc input_desc; | 187 | ge::Om2TensorDesc input_desc; |
| @@ -457,9 +457,9 @@ TEST_F(Om2PackageHelperUt, ConvertOm2Model_Ok_GenOm2WithAicoreNode) { | |||
| 457 | "fake_test/data/model_0/runtime/libg1_om2.so", | 457 | "fake_test/data/model_0/runtime/libg1_om2.so", |
| 458 | "fake_test/data/constants/constant_0", | 458 | "fake_test/data/constants/constant_0", |
| 459 | "fake_test/data/constants/model_0_constants_config.json", | 459 | "fake_test/data/constants/model_0_constants_config.json", |
| 460 | - "fake_test/data/kernels_npu_arch/add1_faked_kernel.o", | 460 | + "fake_test/data/kernels/add1_faked_kernel.o", |
| 461 | "fake_test/data/model_0/model_meta.json", | 461 | "fake_test/data/model_0/model_meta.json", |
| 462 | - "fake_test/data/model_0/debug/op_attr.json", | 462 | + "fake_test/data/model_0/op_attr.json", |
| 463 | "fake_test/data/model_0/debug/ge_visual_00000000_graph_0.json", | 463 | "fake_test/data/model_0/debug/ge_visual_00000000_graph_0.json", |
| 464 | "fake_test/manifest.json", | 464 | "fake_test/manifest.json", |
| 465 | }; | 465 | }; |
| @@ -498,12 +498,12 @@ TEST_F(Om2PackageHelperUt, ConvertOm2Model_Ok_GenOm2WithAicoreNode) { | |||
| 498 | std::string atc_command; | 498 | std::string atc_command; |
| 499 | ASSERT_TRUE(manifest_json.Get("atc_command", atc_command)); | 499 | ASSERT_TRUE(manifest_json.Get("atc_command", atc_command)); |
| 500 | EXPECT_EQ(atc_command, ""); | 500 | EXPECT_EQ(atc_command, ""); |
| 501 | - std::string model_num; | 501 | + int model_num; |
| 502 | ASSERT_TRUE(manifest_json.Get("model_num", model_num)); | 502 | ASSERT_TRUE(manifest_json.Get("model_num", model_num)); |
| 503 | - EXPECT_EQ(model_num, "1"); | 503 | + EXPECT_EQ(model_num, 1); |
| 504 | std::string om2_version; | 504 | std::string om2_version; |
| 505 | ASSERT_TRUE(manifest_json.Get("om2_version", om2_version)); | 505 | ASSERT_TRUE(manifest_json.Get("om2_version", om2_version)); |
| 506 | - EXPECT_EQ(om2_version, "0"); | 506 | + EXPECT_EQ(om2_version, "1.0"); |
| 507 | 507 | ||
| 508 | size_t model_meta_size = 0; | 508 | size_t model_meta_size = 0; |
| 509 | const auto model_meta_buf = archive.ExtractToMem("fake_test/data/model_0/model_meta.json", model_meta_size); | 509 | const auto model_meta_buf = archive.ExtractToMem("fake_test/data/model_0/model_meta.json", model_meta_size); |
| @@ -511,13 +511,8 @@ TEST_F(Om2PackageHelperUt, ConvertOm2Model_Ok_GenOm2WithAicoreNode) { | |||
| 511 | const JsonFile model_meta_json(reinterpret_cast<const uint8_t *>(model_meta_buf.get()), model_meta_size); | 511 | const JsonFile model_meta_json(reinterpret_cast<const uint8_t *>(model_meta_buf.get()), model_meta_size); |
| 512 | ASSERT_TRUE(model_meta_json.IsValid()); | 512 | ASSERT_TRUE(model_meta_json.IsValid()); |
| 513 | EXPECT_EQ(model_meta_json.Raw().at("name"), JsonFile::json("g1")); | 513 | EXPECT_EQ(model_meta_json.Raw().at("name"), JsonFile::json("g1")); |
| 514 | - EXPECT_EQ(model_meta_json.Raw().at("root_graph_name"), JsonFile::json("root_g1")); | ||
| 515 | - EXPECT_EQ(model_meta_json.Raw().at("dynamic_batch_info"), JsonFile::json::array()); | ||
| 516 | - EXPECT_EQ(model_meta_json.Raw().at("dynamic_output_shape"), JsonFile::json::array()); | ||
| 517 | - EXPECT_EQ(model_meta_json.Raw().at("dynamic_type"), JsonFile::json(0)); | ||
| 518 | EXPECT_EQ(model_meta_json.Raw().at("work_size"), JsonFile::json(2048)); | 514 | EXPECT_EQ(model_meta_json.Raw().at("work_size"), JsonFile::json(2048)); |
| 519 | EXPECT_EQ(model_meta_json.Raw().at("zero_copy_size"), JsonFile::json(0)); | 515 | EXPECT_EQ(model_meta_json.Raw().at("zero_copy_size"), JsonFile::json(0)); |
| 520 | - EXPECT_EQ(model_meta_json.Raw().at("user_designate_shape_order"), JsonFile::json::array()); | ||
| 521 | 516 | ||
| 522 | const JsonFile::json expected_inputs = JsonFile::json::array({ | 517 | const JsonFile::json expected_inputs = JsonFile::json::array({ |
| 523 | {{"data_type", "DT_FLOAT"}, | 518 | {{"data_type", "DT_FLOAT"}, |
| @@ -526,8 +521,6 @@ TEST_F(Om2PackageHelperUt, ConvertOm2Model_Ok_GenOm2WithAicoreNode) { | |||
| 526 | {"name", "data1"}, | 521 | {"name", "data1"}, |
| 527 | {"shape", JsonFile::json::array({1, 2, 3, 4})}, | 522 | {"shape", JsonFile::json::array({1, 2, 3, 4})}, |
| 528 | {"shape_range", JsonFile::json::array()}, | 523 | {"shape_range", JsonFile::json::array()}, |
| 529 | - {"shape_v2", JsonFile::json::array({1, 2, 3, 4})}, | ||
| 530 | - {"origin_input_dims", JsonFile::json::array({1, 2, 3, 4})}, | ||
| 531 | {"size", 0}}, | 524 | {"size", 0}}, |
| 532 | {{"data_type", "DT_FLOAT"}, | 525 | {{"data_type", "DT_FLOAT"}, |
| 533 | {"format", "NCHW"}, | 526 | {"format", "NCHW"}, |
| @@ -535,8 +528,6 @@ TEST_F(Om2PackageHelperUt, ConvertOm2Model_Ok_GenOm2WithAicoreNode) { | |||
| 535 | {"name", "data2"}, | 528 | {"name", "data2"}, |
| 536 | {"shape", JsonFile::json::array({1, 1, 224, 224})}, | 529 | {"shape", JsonFile::json::array({1, 1, 224, 224})}, |
| 537 | {"shape_range", JsonFile::json::array()}, | 530 | {"shape_range", JsonFile::json::array()}, |
| 538 | - {"shape_v2", JsonFile::json::array({1, 1, 224, 224})}, | ||
| 539 | - {"origin_input_dims", JsonFile::json::array({1, 1, 224, 224})}, | ||
| 540 | {"size", 0}}, | 531 | {"size", 0}}, |
| 541 | }); | 532 | }); |
| 542 | EXPECT_EQ(model_meta_json.Raw().at("inputs"), expected_inputs); | 533 | EXPECT_EQ(model_meta_json.Raw().at("inputs"), expected_inputs); |
| @@ -569,15 +560,13 @@ TEST_F(Om2PackageHelperUt, ConvertOm2Model_Ok_GenOm2WithAicoreNode) { | |||
| 569 | EXPECT_EQ(consts.at("constant_0").at("index"), JsonFile::json(0)); | 560 | EXPECT_EQ(consts.at("constant_0").at("index"), JsonFile::json(0)); |
| 570 | EXPECT_EQ(consts.at("constant_0").at("type"), JsonFile::json("INTERNAL")); | 561 | EXPECT_EQ(consts.at("constant_0").at("type"), JsonFile::json("INTERNAL")); |
| 571 | EXPECT_FALSE(consts.at("constant_0").contains("external")); | 562 | EXPECT_FALSE(consts.at("constant_0").contains("external")); |
| 572 | - EXPECT_EQ(consts.at("constant_0").at("file_name"), JsonFile::json("")); | 563 | + EXPECT_EQ(consts.at("constant_0").at("file_name"), JsonFile::json("constant_0")); |
| 573 | - EXPECT_EQ(consts.at("constant_0").at("op_name"), JsonFile::json("")); | ||
| 574 | EXPECT_EQ(consts.at("constant_0").at("offset"), JsonFile::json(0)); | 564 | EXPECT_EQ(consts.at("constant_0").at("offset"), JsonFile::json(0)); |
| 575 | EXPECT_EQ(consts.at("constant_0").at("size"), JsonFile::json(200704)); | 565 | EXPECT_EQ(consts.at("constant_0").at("size"), JsonFile::json(200704)); |
| 576 | EXPECT_EQ(consts.at("constant_1").at("index"), JsonFile::json(1)); | 566 | EXPECT_EQ(consts.at("constant_1").at("index"), JsonFile::json(1)); |
| 577 | EXPECT_EQ(consts.at("constant_1").at("type"), JsonFile::json("INTERNAL")); | 567 | EXPECT_EQ(consts.at("constant_1").at("type"), JsonFile::json("INTERNAL")); |
| 578 | EXPECT_FALSE(consts.at("constant_1").contains("external")); | 568 | EXPECT_FALSE(consts.at("constant_1").contains("external")); |
| 579 | - EXPECT_EQ(consts.at("constant_1").at("file_name"), JsonFile::json("")); | 569 | + EXPECT_EQ(consts.at("constant_1").at("file_name"), JsonFile::json("constant_0")); |
| 580 | - EXPECT_EQ(consts.at("constant_1").at("op_name"), JsonFile::json("")); | ||
| 581 | EXPECT_EQ(consts.at("constant_1").at("offset"), JsonFile::json(200704)); | 570 | EXPECT_EQ(consts.at("constant_1").at("offset"), JsonFile::json(200704)); |
| 582 | EXPECT_EQ(consts.at("constant_1").at("size"), JsonFile::json(200704)); | 571 | EXPECT_EQ(consts.at("constant_1").at("size"), JsonFile::json(200704)); |
| 583 | } | 572 | } |
| @@ -647,9 +636,9 @@ TEST_F(Om2PackageHelperUt, SaveToOmModel_SaveModeFalse_ReturnsModelBuffer) { | |||
| 647 | "g1/data/model_0/runtime/libg1_om2.so", | 636 | "g1/data/model_0/runtime/libg1_om2.so", |
| 648 | "g1/data/constants/constant_0", | 637 | "g1/data/constants/constant_0", |
| 649 | "g1/data/constants/model_0_constants_config.json", | 638 | "g1/data/constants/model_0_constants_config.json", |
| 650 | - "g1/data/kernels_npu_arch/add1_faked_kernel.o", | 639 | + "g1/data/kernels/add1_faked_kernel.o", |
| 651 | "g1/data/model_0/model_meta.json", | 640 | "g1/data/model_0/model_meta.json", |
| 652 | - "g1/data/model_0/debug/op_attr.json", | 641 | + "g1/data/model_0/op_attr.json", |
| 653 | "g1/data/model_0/debug/ge_visual_00000000_graph_0.json", | 642 | "g1/data/model_0/debug/ge_visual_00000000_graph_0.json", |
| 654 | "g1/manifest.json", | 643 | "g1/manifest.json", |
| 655 | }; | 644 | }; |
| @@ -798,14 +787,12 @@ TEST_F(Om2PackageHelperUt, ConvertOm2Model_Ok_GenOm2WithFileConstMeta) { | |||
| 798 | const auto &internal_const = consts.at("constant_1"); | 787 | const auto &internal_const = consts.at("constant_1"); |
| 799 | EXPECT_EQ(internal_const.at("index"), JsonFile::json(1)); | 788 | EXPECT_EQ(internal_const.at("index"), JsonFile::json(1)); |
| 800 | EXPECT_EQ(internal_const.at("type"), JsonFile::json("INTERNAL")); | 789 | EXPECT_EQ(internal_const.at("type"), JsonFile::json("INTERNAL")); |
| 801 | - EXPECT_EQ(internal_const.at("file_name"), JsonFile::json("")); | 790 | + EXPECT_EQ(internal_const.at("file_name"), JsonFile::json("constant_0")); |
| 802 | - EXPECT_EQ(internal_const.at("op_name"), JsonFile::json("")); | ||
| 803 | EXPECT_EQ(internal_const.at("offset"), JsonFile::json(0)); | 791 | EXPECT_EQ(internal_const.at("offset"), JsonFile::json(0)); |
| 804 | EXPECT_EQ(internal_const.at("size"), JsonFile::json(200704)); | 792 | EXPECT_EQ(internal_const.at("size"), JsonFile::json(200704)); |
| 805 | EXPECT_FALSE(internal_const.contains("file_path")); | 793 | EXPECT_FALSE(internal_const.contains("file_path")); |
| 806 | 794 | ||
| 807 | const auto &file_const = consts.at("data2"); | 795 | const auto &file_const = consts.at("data2"); |
| 808 | - EXPECT_EQ(file_const.at("op_name"), JsonFile::json("data2")); | ||
| 809 | EXPECT_EQ(file_const.at("index"), JsonFile::json(0)); | 796 | EXPECT_EQ(file_const.at("index"), JsonFile::json(0)); |
| 810 | EXPECT_EQ(file_const.at("type"), JsonFile::json("COMBINED")); | 797 | EXPECT_EQ(file_const.at("type"), JsonFile::json("COMBINED")); |
| 811 | EXPECT_EQ(file_const.at("file_name"), JsonFile::json("weight_combined.bin")); | 798 | EXPECT_EQ(file_const.at("file_name"), JsonFile::json("weight_combined.bin")); |
| @@ -846,8 +833,7 @@ TEST_F(Om2PackageHelperUt, RelocateExternalWeights_SkipInvalidConstItemsAndCompr | |||
| 846 | .Set("file_name", "") | 833 | .Set("file_name", "") |
| 847 | .Set("file_path", old_weight_path) | 834 | .Set("file_path", old_weight_path) |
| 848 | .Set("offset", 0) | 835 | .Set("offset", 0) |
| 849 | - .Set("size", 6) | 836 | + .Set("size", 6); |
| 850 | - .Set("op_name", "basename_const"); | ||
| 851 | consts["basename_const"] = basename_const.Raw(); | 837 | consts["basename_const"] = basename_const.Raw(); |
| 852 | 838 | ||
| 853 | JsonFile constants_config; | 839 | JsonFile constants_config; |
| @@ -934,7 +920,7 @@ TEST_F(Om2PackageHelperUt, SaveOpAttrJson_WithAttr_GenValidOpAttrJson) { | |||
| 934 | ASSERT_TRUE(archive.IsGood()); | 920 | ASSERT_TRUE(archive.IsGood()); |
| 935 | 921 | ||
| 936 | size_t op_attr_size = 0; | 922 | size_t op_attr_size = 0; |
| 937 | - const auto op_attr_buf = archive.ExtractToMem("test_op_attr/data/model_0/debug/op_attr.json", op_attr_size); | 923 | + const auto op_attr_buf = archive.ExtractToMem("test_op_attr/data/model_0/op_attr.json", op_attr_size); |
| 938 | ASSERT_NE(op_attr_buf, nullptr); | 924 | ASSERT_NE(op_attr_buf, nullptr); |
| 939 | 925 | ||
| 940 | const JsonFile op_attr_json(reinterpret_cast<const uint8_t *>(op_attr_buf.get()), op_attr_size); | 926 | const JsonFile op_attr_json(reinterpret_cast<const uint8_t *>(op_attr_buf.get()), op_attr_size); |
| @@ -950,8 +936,12 @@ TEST_F(Om2PackageHelperUt, SaveOpAttrJson_WithAttr_GenValidOpAttrJson) { | |||
| 950 | EXPECT_TRUE(op_attr.contains("_datadump_original_op_names")); | 936 | EXPECT_TRUE(op_attr.contains("_datadump_original_op_names")); |
| 951 | 937 | ||
| 952 | const auto &attr_value = op_attr.at("_datadump_original_op_names"); | 938 | const auto &attr_value = op_attr.at("_datadump_original_op_names"); |
| 953 | - EXPECT_TRUE(attr_value.is_string()); | 939 | + EXPECT_TRUE(attr_value.is_object()); |
| 954 | - EXPECT_EQ(attr_value.get<std::string>(), "[12]original_op1[12]original_op2"); | 940 | + EXPECT_EQ(attr_value.at("type"), "LIST_STRING"); |
| 941 | + EXPECT_TRUE(attr_value.at("value").is_array()); | ||
| 942 | + EXPECT_EQ(attr_value.at("value").size(), 2U); | ||
| 943 | + EXPECT_EQ(attr_value.at("value")[0], "original_op1"); | ||
| 944 | + EXPECT_EQ(attr_value.at("value")[1], "original_op2"); | ||
| 955 | } | 945 | } |
| 956 | 946 | ||
| 957 | TEST_F(Om2PackageHelperUt, SaveOpAttrJson_NoAttr_GenEmptyOpAttrJson) { | 947 | TEST_F(Om2PackageHelperUt, SaveOpAttrJson_NoAttr_GenEmptyOpAttrJson) { |
| @@ -972,7 +962,7 @@ TEST_F(Om2PackageHelperUt, SaveOpAttrJson_NoAttr_GenEmptyOpAttrJson) { | |||
| 972 | ASSERT_TRUE(archive.IsGood()); | 962 | ASSERT_TRUE(archive.IsGood()); |
| 973 | 963 | ||
| 974 | size_t op_attr_size = 0; | 964 | size_t op_attr_size = 0; |
| 975 | - const auto op_attr_buf = archive.ExtractToMem("test_empty_attr/data/model_0/debug/op_attr.json", op_attr_size); | 965 | + const auto op_attr_buf = archive.ExtractToMem("test_empty_attr/data/model_0/op_attr.json", op_attr_size); |
| 976 | ASSERT_NE(op_attr_buf, nullptr); | 966 | ASSERT_NE(op_attr_buf, nullptr); |
| 977 | 967 | ||
| 978 | const JsonFile op_attr_json(reinterpret_cast<const uint8_t *>(op_attr_buf.get()), op_attr_size); | 968 | const JsonFile op_attr_json(reinterpret_cast<const uint8_t *>(op_attr_buf.get()), op_attr_size); |
| @@ -1014,7 +1004,7 @@ TEST_F(Om2PackageHelperUt, SaveOpAttrJson_EmptyOriginalOpNames_GenValidOpAttrJso | |||
| 1014 | ASSERT_TRUE(archive.IsGood()); | 1004 | ASSERT_TRUE(archive.IsGood()); |
| 1015 | 1005 | ||
| 1016 | size_t op_attr_size = 0; | 1006 | size_t op_attr_size = 0; |
| 1017 | - const auto op_attr_buf = archive.ExtractToMem("test_empty_list_attr/data/model_0/debug/op_attr.json", op_attr_size); | 1007 | + const auto op_attr_buf = archive.ExtractToMem("test_empty_list_attr/data/model_0/op_attr.json", op_attr_size); |
| 1018 | ASSERT_NE(op_attr_buf, nullptr); | 1008 | ASSERT_NE(op_attr_buf, nullptr); |
| 1019 | 1009 | ||
| 1020 | const JsonFile op_attr_json(reinterpret_cast<const uint8_t *>(op_attr_buf.get()), op_attr_size); | 1010 | const JsonFile op_attr_json(reinterpret_cast<const uint8_t *>(op_attr_buf.get()), op_attr_size); |
| @@ -1096,7 +1086,7 @@ TEST_F(Om2PackageHelperUt, ExtractVisualJson_Fail_NoVisualJson) { | |||
| 1096 | { | 1086 | { |
| 1097 | ZipArchiveWriter writer(zip_path); | 1087 | ZipArchiveWriter writer(zip_path); |
| 1098 | ASSERT_TRUE(writer.IsMemFileOpened()); | 1088 | ASSERT_TRUE(writer.IsMemFileOpened()); |
| 1099 | - const std::string manifest = R"({"om2_version":"0","model_num":1})"; | 1089 | + const std::string manifest = R"({"om2_version":"1.0","model_num":1})"; |
| 1100 | ASSERT_TRUE(writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); | 1090 | ASSERT_TRUE(writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false)); |
| 1101 | ModelBufferData buf; | 1091 | ModelBufferData buf; |
| 1102 | ASSERT_TRUE(writer.SaveModelData(buf, true)); | 1092 | ASSERT_TRUE(writer.SaveModelData(buf, true)); |
| @@ -1263,15 +1253,25 @@ TEST_F(Om2PackageHelperUt, BuildDebugInfo_DumpOriginOpNames) { | |||
| 1263 | gert::Om2ModelData model_data; | 1253 | gert::Om2ModelData model_data; |
| 1264 | gert::Om2DebugInfo &debug_info = model_data.debug_info; | 1254 | gert::Om2DebugInfo &debug_info = model_data.debug_info; |
| 1265 | ASSERT_EQ(om2_packager.BuildDebugInfo(ge_model, model_data), SUCCESS); | 1255 | ASSERT_EQ(om2_packager.BuildDebugInfo(ge_model, model_data), SUCCESS); |
| 1266 | - ASSERT_FALSE(debug_info.op_attr_map.empty()); | 1256 | + ASSERT_FALSE(debug_info.op_attr_json.empty()); |
| 1257 | + | ||
| 1258 | + const JsonFile op_attr_json(reinterpret_cast<const uint8_t *>(debug_info.op_attr_json.data()), | ||
| 1259 | + debug_info.op_attr_json.size()); | ||
| 1260 | + ASSERT_TRUE(op_attr_json.IsValid()); | ||
| 1261 | + const auto &raw_json = op_attr_json.Raw(); | ||
| 1262 | + EXPECT_TRUE(raw_json.is_object()); | ||
| 1267 | 1263 | ||
| 1268 | bool found = false; | 1264 | bool found = false; |
| 1269 | - for (const auto &[op_name, attrs] : debug_info.op_attr_map) { | 1265 | + for (auto it = raw_json.begin(); it != raw_json.end(); ++it) { |
| 1270 | - auto it = attrs.find(ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES); | 1266 | + if (it.value().is_object() && it.value().contains(ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES)) { |
| 1271 | - if (it != attrs.end()) { | 1267 | + const auto &attr_obj = it.value().at(ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES); |
| 1268 | + EXPECT_EQ(attr_obj.at("type"), "LIST_STRING"); | ||
| 1269 | + EXPECT_TRUE(attr_obj.at("value").is_array()); | ||
| 1270 | + const auto &value_array = attr_obj.at("value"); | ||
| 1271 | + EXPECT_EQ(value_array.size(), 2U); | ||
| 1272 | + EXPECT_EQ(value_array[0], "original_add_1"); | ||
| 1273 | + EXPECT_EQ(value_array[1], "original_add_2"); | ||
| 1272 | found = true; | 1274 | found = true; |
| 1273 | - EXPECT_NE(it->second.find("[14]original_add_1"), std::string::npos); | ||
| 1274 | - EXPECT_NE(it->second.find("[14]original_add_2"), std::string::npos); | ||
| 1275 | break; | 1275 | break; |
| 1276 | } | 1276 | } |
| 1277 | } | 1277 | } |
| @@ -1291,7 +1291,6 @@ TEST_F(Om2PackageHelperUt, BuildManifest_NullRootModel) { | |||
| 1291 | TEST_F(Om2PackageHelperUt, Serialize_OnlineMode_ExternalConst_HasFilePath) { | 1291 | TEST_F(Om2PackageHelperUt, Serialize_OnlineMode_ExternalConst_HasFilePath) { |
| 1292 | gert::Om2ModelData model_data; | 1292 | gert::Om2ModelData model_data; |
| 1293 | model_data.model_meta.model_name = "test_model"; | 1293 | model_data.model_meta.model_name = "test_model"; |
| 1294 | - model_data.model_meta.root_graph_name = "test_graph"; | ||
| 1295 | 1294 | ||
| 1296 | Om2ConstMeta const_meta; | 1295 | Om2ConstMeta const_meta; |
| 1297 | const_meta.index = 0U; | 1296 | const_meta.index = 0U; |
| @@ -1607,7 +1606,6 @@ TEST_F(Om2PackageHelperUt, SetSaveMode_Ok) { | |||
| 1607 | TEST_F(Om2PackageHelperUt, SerializeVarResource_WithEntriesAndInitData) { | 1606 | TEST_F(Om2PackageHelperUt, SerializeVarResource_WithEntriesAndInitData) { |
| 1608 | gert::Om2ModelData model_data; | 1607 | gert::Om2ModelData model_data; |
| 1609 | model_data.model_meta.model_name = "var_test_model"; | 1608 | model_data.model_meta.model_name = "var_test_model"; |
| 1610 | - model_data.model_meta.root_graph_name = "var_test_graph"; | ||
| 1611 | 1609 | ||
| 1612 | auto rt_var_resource = std::make_unique<gert::RTVarResource>(); | 1610 | auto rt_var_resource = std::make_unique<gert::RTVarResource>(); |
| 1613 | gert::RTVarEntry entry; | 1611 | gert::RTVarEntry entry; |
| @@ -1694,7 +1692,6 @@ TEST_F(Om2PackageHelperUt, SerializeVarResource_WithEntriesAndInitData) { | |||
| 1694 | TEST_F(Om2PackageHelperUt, SerializeVarResource_NullAndEmpty) { | 1692 | TEST_F(Om2PackageHelperUt, SerializeVarResource_NullAndEmpty) { |
| 1695 | gert::Om2ModelData model_data; | 1693 | gert::Om2ModelData model_data; |
| 1696 | model_data.model_meta.model_name = "var_empty_model"; | 1694 | model_data.model_meta.model_name = "var_empty_model"; |
| 1697 | - model_data.model_meta.root_graph_name = "var_empty_graph"; | ||
| 1698 | model_data.program_body.so_artifact.file_name = "libtest.so"; | 1695 | model_data.program_body.so_artifact.file_name = "libtest.so"; |
| 1699 | model_data.program_body.so_artifact.data = "fake_so"; | 1696 | model_data.program_body.so_artifact.data = "fake_so"; |
| 1700 | model_data.debug_info.visual_json = R"({"format":"ge_visual_json","format_version":1,"model":{"graph":[]}})"; | 1697 | model_data.debug_info.visual_json = R"({"format":"ge_visual_json","format_version":1,"model":{"graph":[]}})"; |
| @@ -1890,6 +1887,176 @@ TEST_F(Om2PackageHelperUt, SaveToOmModel_WithCustomKernel) { | |||
| 1890 | CustomOpFactory::RemoveCustomOps({kOpType}); | 1887 | CustomOpFactory::RemoveCustomOps({kOpType}); |
| 1891 | } | 1888 | } |
| 1892 | 1889 | ||
| 1890 | +TEST_F(Om2PackageHelperUt, SerializeModelMeta_WithDynamicBatchInfo_WritesDynamicDims) { | ||
| 1891 | + gert::Om2ModelData model_data; | ||
| 1892 | + model_data.model_meta.model_name = "dynamic_batch_model"; | ||
| 1893 | + model_data.model_meta.dynamic_type = 1; | ||
| 1894 | + model_data.model_meta.user_designate_shape_order = {"NCHW"}; | ||
| 1895 | + model_data.model_meta.dynamic_batch_info = {{1, 2, 3, 4}, {2, 4, 6, 8}}; | ||
| 1896 | + model_data.model_meta.origin_input_dims = {{1, 3, 224, 224}}; | ||
| 1897 | + model_data.model_meta.dynamic_output_shape = {"0,1,2,3", "1,2,4,6"}; | ||
| 1898 | + | ||
| 1899 | + ge::Om2TensorDesc input_desc; | ||
| 1900 | + input_desc.SetName("input"); | ||
| 1901 | + input_desc.SetShape({1, 3, 224, 224}); | ||
| 1902 | + input_desc.SetDataType(ge::DT_FLOAT); | ||
| 1903 | + input_desc.SetFormat(ge::FORMAT_NCHW); | ||
| 1904 | + input_desc.SetSize(602112U); | ||
| 1905 | + model_data.model_meta.input_desc.push_back(input_desc); | ||
| 1906 | + | ||
| 1907 | + ge::Om2TensorDesc output_desc; | ||
| 1908 | + output_desc.SetName("output"); | ||
| 1909 | + output_desc.SetShape({1, 1000}); | ||
| 1910 | + output_desc.SetDataType(ge::DT_FLOAT); | ||
| 1911 | + output_desc.SetFormat(ge::FORMAT_ND); | ||
| 1912 | + output_desc.SetSize(4000U); | ||
| 1913 | + model_data.model_meta.output_desc.push_back(output_desc); | ||
| 1914 | + | ||
| 1915 | + model_data.program_body.so_artifact.file_name = "libtest.so"; | ||
| 1916 | + model_data.program_body.so_artifact.data = "fake_so_content"; | ||
| 1917 | + model_data.debug_info.visual_json = R"({"format":"ge_visual_json","format_version":1,"model":{"graph":[]}})"; | ||
| 1918 | + | ||
| 1919 | + const std::string writer_path = PathUtils::Join({test_work_dir, "dynamic_batch.om2"}); | ||
| 1920 | + ModelBufferData model_buffer; | ||
| 1921 | + ASSERT_EQ(Om2ZipSaver::Save(model_data, model_buffer, false, writer_path), SUCCESS); | ||
| 1922 | + ASSERT_NE(model_buffer.data, nullptr); | ||
| 1923 | + ASSERT_GT(model_buffer.length, 0U); | ||
| 1924 | + | ||
| 1925 | + SimpleZipArchiveReader archive(model_buffer.data.get(), model_buffer.length); | ||
| 1926 | + ASSERT_TRUE(archive.IsGood()); | ||
| 1927 | + | ||
| 1928 | + std::string model_meta_entry; | ||
| 1929 | + for (const auto &name : archive.ListFiles()) { | ||
| 1930 | + if (name.find("model_meta.json") != std::string::npos) { | ||
| 1931 | + model_meta_entry = name; | ||
| 1932 | + break; | ||
| 1933 | + } | ||
| 1934 | + } | ||
| 1935 | + ASSERT_FALSE(model_meta_entry.empty()); | ||
| 1936 | + | ||
| 1937 | + size_t buf_size = 0U; | ||
| 1938 | + const auto buf = archive.ExtractToMem(model_meta_entry, buf_size); | ||
| 1939 | + ASSERT_NE(buf, nullptr); | ||
| 1940 | + ASSERT_GT(buf_size, 0U); | ||
| 1941 | + | ||
| 1942 | + const JsonFile model_meta_json(reinterpret_cast<const uint8_t *>(buf.get()), buf_size); | ||
| 1943 | + ASSERT_TRUE(model_meta_json.IsValid()); | ||
| 1944 | + const auto &raw = model_meta_json.Raw(); | ||
| 1945 | + ASSERT_TRUE(raw.contains("dynamic_dims")); | ||
| 1946 | + const auto &dynamic_dims = raw.at("dynamic_dims"); | ||
| 1947 | + EXPECT_EQ(dynamic_dims.at("dynamic_type"), 1); | ||
| 1948 | + EXPECT_EQ(dynamic_dims.at("user_designate_shape_order"), JsonFile::json::array({"NCHW"})); | ||
| 1949 | + ASSERT_TRUE(dynamic_dims.contains("gears")); | ||
| 1950 | + const auto &gears = dynamic_dims.at("gears"); | ||
| 1951 | + ASSERT_TRUE(gears.is_array()); | ||
| 1952 | + EXPECT_EQ(gears.size(), 2U); | ||
| 1953 | + | ||
| 1954 | + const auto &gear0 = gears[0]; | ||
| 1955 | + ASSERT_TRUE(gear0.contains("inputs")); | ||
| 1956 | + EXPECT_EQ(gear0.at("inputs"), JsonFile::json::array({1, 2, 3, 4})); | ||
| 1957 | + ASSERT_TRUE(gear0.contains("outputs")); | ||
| 1958 | + const auto &gear0_outputs = gear0.at("outputs"); | ||
| 1959 | + ASSERT_TRUE(gear0_outputs.is_array()); | ||
| 1960 | + ASSERT_EQ(gear0_outputs.size(), 1U); | ||
| 1961 | + EXPECT_EQ(gear0_outputs[0], JsonFile::json::array({2, 3})); | ||
| 1962 | + | ||
| 1963 | + const auto &gear1 = gears[1]; | ||
| 1964 | + ASSERT_TRUE(gear1.contains("inputs")); | ||
| 1965 | + EXPECT_EQ(gear1.at("inputs"), JsonFile::json::array({2, 4, 6, 8})); | ||
| 1966 | + ASSERT_TRUE(gear1.contains("outputs")); | ||
| 1967 | + const auto &gear1_outputs = gear1.at("outputs"); | ||
| 1968 | + ASSERT_TRUE(gear1_outputs.is_array()); | ||
| 1969 | + ASSERT_EQ(gear1_outputs.size(), 1U); | ||
| 1970 | + EXPECT_EQ(gear1_outputs[0], JsonFile::json::array({4, 6})); | ||
| 1971 | +} | ||
| 1972 | + | ||
| 1973 | +TEST_F(Om2PackageHelperUt, SerializeModelMeta_WithMultipleOutputsPerGear_WritesAllOutputs) { | ||
| 1974 | + gert::Om2ModelData model_data; | ||
| 1975 | + model_data.model_meta.model_name = "multi_output_model"; | ||
| 1976 | + model_data.model_meta.dynamic_type = 1; | ||
| 1977 | + model_data.model_meta.user_designate_shape_order = {"data"}; | ||
| 1978 | + model_data.model_meta.dynamic_batch_info = {{1}, {2}}; | ||
| 1979 | + model_data.model_meta.origin_input_dims = {{1, 3}}; | ||
| 1980 | + model_data.model_meta.dynamic_output_shape = {"0,0,100", "0,1,200", "1,0,100", "1,1,200"}; | ||
| 1981 | + | ||
| 1982 | + ge::Om2TensorDesc desc; | ||
| 1983 | + desc.SetName("input"); | ||
| 1984 | + desc.SetShape({1, 3}); | ||
| 1985 | + desc.SetDataType(ge::DT_FLOAT); | ||
| 1986 | + desc.SetFormat(ge::FORMAT_ND); | ||
| 1987 | + desc.SetSize(12U); | ||
| 1988 | + model_data.model_meta.input_desc.push_back(desc); | ||
| 1989 | + | ||
| 1990 | + model_data.program_body.so_artifact.file_name = "libtest.so"; | ||
| 1991 | + model_data.program_body.so_artifact.data = "fake"; | ||
| 1992 | + model_data.debug_info.visual_json = R"({"format":"ge_visual_json"})"; | ||
| 1993 | + | ||
| 1994 | + const std::string writer_path = PathUtils::Join({test_work_dir, "multi_output.om2"}); | ||
| 1995 | + ModelBufferData model_buffer; | ||
| 1996 | + ASSERT_EQ(Om2ZipSaver::Save(model_data, model_buffer, false, writer_path), SUCCESS); | ||
| 1997 | + | ||
| 1998 | + SimpleZipArchiveReader archive(model_buffer.data.get(), model_buffer.length); | ||
| 1999 | + ASSERT_TRUE(archive.IsGood()); | ||
| 2000 | + | ||
| 2001 | + std::string entry; | ||
| 2002 | + for (const auto &name : archive.ListFiles()) { | ||
| 2003 | + if (name.find("model_meta.json") != std::string::npos) { | ||
| 2004 | + entry = name; | ||
| 2005 | + break; | ||
| 2006 | + } | ||
| 2007 | + } | ||
| 2008 | + ASSERT_FALSE(entry.empty()); | ||
| 2009 | + | ||
| 2010 | + size_t buf_size = 0U; | ||
| 2011 | + const auto buf = archive.ExtractToMem(entry, buf_size); | ||
| 2012 | + ASSERT_NE(buf, nullptr); | ||
| 2013 | + | ||
| 2014 | + const JsonFile meta_json(reinterpret_cast<const uint8_t *>(buf.get()), buf_size); | ||
| 2015 | + ASSERT_TRUE(meta_json.IsValid()); | ||
| 2016 | + const auto &gears = meta_json.Raw().at("dynamic_dims").at("gears"); | ||
| 2017 | + ASSERT_EQ(gears.size(), 2U); | ||
| 2018 | + EXPECT_EQ(gears[0].at("outputs").size(), 2U); | ||
| 2019 | + EXPECT_EQ(gears[0].at("outputs")[0], JsonFile::json::array({100})); | ||
| 2020 | + EXPECT_EQ(gears[0].at("outputs")[1], JsonFile::json::array({200})); | ||
| 2021 | + EXPECT_EQ(gears[1].at("outputs").size(), 2U); | ||
| 2022 | +} | ||
| 2023 | + | ||
| 2024 | +TEST_F(Om2PackageHelperUt, SerializeManifest_InvalidModelNum_FallsBackToString) { | ||
| 2025 | + gert::Om2ModelData model_data; | ||
| 2026 | + model_data.model_meta.model_name = "test_model"; | ||
| 2027 | + model_data.manifest[OM2_ARCHIVE_VERSION] = OM2_ARCHIVE_VERSION_VALUE; | ||
| 2028 | + model_data.manifest[OM2_MODEL_NUM] = "not_a_number"; | ||
| 2029 | + model_data.manifest[OM2_ATC_COMMAND] = ""; | ||
| 2030 | + | ||
| 2031 | + model_data.program_body.so_artifact.file_name = "libtest.so"; | ||
| 2032 | + model_data.program_body.so_artifact.data = "fake"; | ||
| 2033 | + model_data.debug_info.visual_json = R"({"format":"ge_visual_json"})"; | ||
| 2034 | + | ||
| 2035 | + const std::string writer_path = PathUtils::Join({test_work_dir, "invalid_manifest.om2"}); | ||
| 2036 | + ModelBufferData model_buffer; | ||
| 2037 | + ASSERT_EQ(Om2ZipSaver::Save(model_data, model_buffer, false, writer_path), SUCCESS); | ||
| 2038 | + | ||
| 2039 | + SimpleZipArchiveReader archive(model_buffer.data.get(), model_buffer.length); | ||
| 2040 | + ASSERT_TRUE(archive.IsGood()); | ||
| 2041 | + | ||
| 2042 | + std::string manifest_entry; | ||
| 2043 | + for (const auto &name : archive.ListFiles()) { | ||
| 2044 | + if (name.find("manifest.json") != std::string::npos) { | ||
| 2045 | + manifest_entry = name; | ||
| 2046 | + break; | ||
| 2047 | + } | ||
| 2048 | + } | ||
| 2049 | + ASSERT_FALSE(manifest_entry.empty()); | ||
| 2050 | + | ||
| 2051 | + size_t buf_size = 0U; | ||
| 2052 | + const auto buf = archive.ExtractToMem(manifest_entry, buf_size); | ||
| 2053 | + ASSERT_NE(buf, nullptr); | ||
| 2054 | + | ||
| 2055 | + const JsonFile manifest_json(reinterpret_cast<const uint8_t *>(buf.get()), buf_size); | ||
| 2056 | + ASSERT_TRUE(manifest_json.IsValid()); | ||
| 2057 | + EXPECT_EQ(manifest_json.Raw().at(OM2_MODEL_NUM), "not_a_number"); | ||
| 2058 | +} | ||
| 2059 | + | ||
| 1893 | TEST_F(Om2PackageHelperUt, ReadCustomOpSoFiles) { | 2060 | TEST_F(Om2PackageHelperUt, ReadCustomOpSoFiles) { |
| 1894 | std::string so_file = "/tmp/libcusom_op_" + std::to_string(getpid()) + ".so"; | 2061 | std::string so_file = "/tmp/libcusom_op_" + std::to_string(getpid()) + ".so"; |
| 1895 | std::string text = "fake custom op so content"; | 2062 | std::string text = "fake custom op so content"; |
| @@ -5702,7 +5702,6 @@ TEST_F(UtestGraphManagerTest, GetCompiledModel_SerializesOm2ModelDataInOm2Mode) | |||
| 5702 | 5702 | ||
| 5703 | const auto om2_data = MakeShared<gert::Om2ModelData>(); | 5703 | const auto om2_data = MakeShared<gert::Om2ModelData>(); |
| 5704 | om2_data->model_meta.model_name = "om2_ut_model"; | 5704 | om2_data->model_meta.model_name = "om2_ut_model"; |
| 5705 | - om2_data->model_meta.root_graph_name = "graph"; | ||
| 5706 | om2_data->debug_info.visual_json = R"({"format":"ge_visual_json","format_version":1,"model":{"graph":[]}})"; | 5705 | om2_data->debug_info.visual_json = R"({"format":"ge_visual_json","format_version":1,"model":{"graph":[]}})"; |
| 5707 | graph_node->GetGeRootModel()->SetOm2ModelData(om2_data); | 5706 | graph_node->GetGeRootModel()->SetOm2ModelData(om2_data); |
| 5708 | 5707 | ||
| @@ -1830,8 +1830,7 @@ TEST(UtestIrBuild, aclgrphSaveModelOm2ExternalWeightRelocateTest) { | |||
| 1830 | .Set("file_name", weight_file_name) | 1830 | .Set("file_name", weight_file_name) |
| 1831 | .Set("file_path", old_weight_path) | 1831 | .Set("file_path", old_weight_path) |
| 1832 | .Set("offset", 0) | 1832 | .Set("offset", 0) |
| 1833 | - .Set("size", 15) | 1833 | + .Set("size", 15); |
| 1834 | - .Set("op_name", "file_const"); | ||
| 1835 | consts["file_const"] = file_const.Raw(); | 1834 | consts["file_const"] = file_const.Raw(); |
| 1836 | JsonFile constants_config; | 1835 | JsonFile constants_config; |
| 1837 | constants_config.Set("internal_weight_size", 0U).Set("consts", consts); | 1836 | constants_config.Set("internal_weight_size", 0U).Set("consts", consts); |
| @@ -835,7 +835,7 @@ std::string CreateMinimalOm2File(const std::string &path, const std::string &vis | |||
| 835 | if (!writer.IsMemFileOpened()) { | 835 | if (!writer.IsMemFileOpened()) { |
| 836 | return ""; | 836 | return ""; |
| 837 | } | 837 | } |
| 838 | - const std::string manifest = R"({"om2_version":"0","model_num":1})"; | 838 | + const std::string manifest = R"({"om2_version":"1.0","model_num":1})"; |
| 839 | writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false); | 839 | writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false); |
| 840 | writer.WriteBytes("data/model_0/debug/ge_visual_00000000_graph_0.json", visual_json.data(), visual_json.size(), true); | 840 | writer.WriteBytes("data/model_0/debug/ge_visual_00000000_graph_0.json", visual_json.data(), visual_json.size(), true); |
| 841 | ModelBufferData buf; | 841 | ModelBufferData buf; |
| @@ -1010,7 +1010,7 @@ TEST_F(UtestOmg, ConvertOm_Fail_Om2NoVisualJson) { | |||
| 1010 | { | 1010 | { |
| 1011 | ZipArchiveWriter writer(om2_path); | 1011 | ZipArchiveWriter writer(om2_path); |
| 1012 | ASSERT_TRUE(writer.IsMemFileOpened()); | 1012 | ASSERT_TRUE(writer.IsMemFileOpened()); |
| 1013 | - const std::string manifest = R"({"om2_version":"0","model_num":1})"; | 1013 | + const std::string manifest = R"({"om2_version":"1.0","model_num":1})"; |
| 1014 | writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false); | 1014 | writer.WriteBytes("manifest.json", manifest.data(), manifest.size(), false); |
| 1015 | ModelBufferData buf; | 1015 | ModelBufferData buf; |
| 1016 | writer.SaveModelData(buf, true); | 1016 | writer.SaveModelData(buf, true); |


om2_model_data同步修改层级