[CONFORMANCE] Move testsRunner to new subgraphsDumper (#18129)
* New Subgraph Dumper -> Cache + Meta * iCache tests * tests_meta * OpCache tests * Move & refactor matchers * fix all tests and refactor meta * Prepare for review * Add caching types * Model testing + improvement * Add ignored ports. Add tests for node utils * [CONFORMANCE] MOVE conformance runner to new subgraphsDumper * fix build * Fix compilation error * fix compilation of deprecated subgraphs dumper * fix build * arm * fix win? * temp commit * revert * Add w/a to save const * Update constant.hpp * Update constant.hpp * fix ci build * cleanup * Update model.hpp * Update data_utils.hpp * Update generate_inputs.cpp * fix compilation * Fix update cache with partial shape is 0 * Fix tests * fix some problems * tmp disable tests * TMP disable * Add skip tests config to subgraphs dumper tests * Remove extra changes * Fix build * One more commit * Mere * Remove extra * Skip one test
This commit is contained in:
parent
94887bed38
commit
6a94ae3409
@ -2,7 +2,7 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
set(TARGET_NAME subgraphsDumper)
|
||||
set(TARGET_NAME subgraphsDumper_deprecated)
|
||||
|
||||
list(APPEND LIBRARIES
|
||||
gflags
|
||||
|
@ -2,7 +2,7 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
set(TARGET_NAME subgraphsDumperTests)
|
||||
set(TARGET_NAME subgraphsDumperTests_deprecated)
|
||||
|
||||
addIeTargetTest(
|
||||
NAME ${TARGET_NAME}
|
||||
|
@ -2,7 +2,7 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
set(TARGET_NAME subgraphs_dumper)
|
||||
set(TARGET_NAME subgraphsDumper)
|
||||
|
||||
list(APPEND LIBRARIES
|
||||
gflags
|
||||
@ -21,8 +21,8 @@ addIeTargetTest(
|
||||
PRIVATE
|
||||
${LIBRARIES}
|
||||
DEPENDENCIES
|
||||
ov_frontends
|
||||
${DEPENDENCIES}
|
||||
ADD_CPPLINT
|
||||
)
|
||||
|
||||
ie_faster_build(${TARGET_NAME} UNITY)
|
||||
ie_faster_build(${TARGET_NAME} UNITY)
|
@ -5,7 +5,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "cache/cache.hpp"
|
||||
|
||||
#include "cache/meta/input_info.hpp"
|
||||
#include "matchers/subgraph/manager.hpp"
|
||||
#include "matchers/subgraph/subgraph.hpp"
|
||||
|
@ -8,7 +8,6 @@
|
||||
#include "cache/meta/input_info.hpp"
|
||||
#include "functional_test_utils/node_utils.hpp"
|
||||
#include "functional_test_utils/summary/op_info.hpp"
|
||||
|
||||
#include "openvino/openvino.hpp"
|
||||
#include "openvino/pass/manager.hpp"
|
||||
#include "openvino/pass/constant_folding.hpp"
|
||||
|
@ -23,25 +23,26 @@ bool ICache::serialize_model(const std::pair<std::shared_ptr<ov::Model>, MetaInf
|
||||
std::map<std::shared_ptr<ov::Node>, std::shared_ptr<ov::Node>> nodes;
|
||||
ov::ParameterVector param_vector;
|
||||
for (const auto& op : model->get_ordered_ops()) {
|
||||
std::shared_ptr<ov::op::v0::Parameter> param = nullptr;
|
||||
if (ov::op::util::is_parameter(op)) {
|
||||
auto param = std::dynamic_pointer_cast<ov::op::v0::Parameter>(op);
|
||||
param_vector.push_back(param);
|
||||
}
|
||||
if (ov::op::util::is_constant(op)) {
|
||||
param = std::dynamic_pointer_cast<ov::op::v0::Parameter>(op);
|
||||
} else if (ov::op::util::is_constant(op)) {
|
||||
auto op_to_replace = std::dynamic_pointer_cast<ov::op::v0::Constant>(op);
|
||||
if (op_to_replace->get_byte_size() > 1024) {
|
||||
auto param = std::make_shared<ov::op::v0::Parameter>(
|
||||
op_to_replace->get_output_element_type(0), op_to_replace->get_output_partial_shape(0));
|
||||
nodes.insert({ op_to_replace, param });
|
||||
param = std::make_shared<ov::op::v0::Parameter>(
|
||||
op_to_replace->get_output_element_type(0), op_to_replace->get_output_partial_shape(0));
|
||||
param->set_friendly_name(op_to_replace->get_friendly_name());
|
||||
param_vector.push_back(param);
|
||||
nodes.insert({ op_to_replace, param });
|
||||
}
|
||||
}
|
||||
}
|
||||
for (const auto& node : nodes) {
|
||||
model->replace_node(node.first, node.second);
|
||||
if (param != nullptr) {
|
||||
param_vector.push_back(param);
|
||||
}
|
||||
}
|
||||
if (!nodes.empty()) {
|
||||
for (const auto& node : nodes) {
|
||||
model->replace_node(node.first, node.second);
|
||||
}
|
||||
model = std::make_shared<ov::Model>(model->get_results(), param_vector);
|
||||
}
|
||||
|
||||
@ -64,7 +65,7 @@ bool ICache::serialize_model(const std::pair<std::shared_ptr<ov::Model>, MetaInf
|
||||
meta.serialize(meta_path);
|
||||
return true;
|
||||
} catch (std::exception &e) {
|
||||
std::cout << "Failed to serialize model: " << model_name
|
||||
std::cout << "[ ERROR ] Failed to serialize model: " << model_name
|
||||
<< ". Exception: " << e.what() << std::endl;
|
||||
ov::test::utils::removeIRFiles(xml_path, bin_path);
|
||||
ov::test::utils::removeFile(meta_path);
|
||||
|
@ -19,6 +19,7 @@ std::shared_ptr<GraphCache> GraphCache::m_cache_instance = nullptr;
|
||||
void GraphCache::update_cache(const std::shared_ptr<ov::Model>& model,
|
||||
const std::string& model_meta_data,
|
||||
bool extract_body) {
|
||||
std::cout << "[ INFO ][ GRAPH CACHE ] Processing model: " << model_meta_data << std::endl;
|
||||
auto model_total_op = model->get_ops().size() - model->get_output_size() - model->inputs().size();
|
||||
auto extracted_patterns = m_manager.extract(model, extract_body);
|
||||
if (extracted_patterns.empty()) {
|
||||
|
@ -20,6 +20,7 @@ std::shared_ptr<OpCache> OpCache::m_cache_instance = nullptr;
|
||||
void OpCache::update_cache(const std::shared_ptr<ov::Model>& model,
|
||||
const std::string& model_path,
|
||||
bool extract_body) {
|
||||
std::cout << "[ INFO ][ OP CACHE ] Processing model: " << model_path << std::endl;
|
||||
size_t model_op_cnt = model->get_ops().size() - model->get_output_size() - model->inputs().size();
|
||||
for (const auto& op : model->get_ordered_ops()) {
|
||||
if (std::dynamic_pointer_cast<ov::op::v0::Parameter>(op) ||
|
||||
@ -63,8 +64,8 @@ void OpCache::update_cache(const std::shared_ptr<ov::Node>& node,
|
||||
cloned_node->set_friendly_name(ov::test::functional::get_node_version(cloned_node));
|
||||
for (auto &&it : m_ops_cache) {
|
||||
if (m_manager.match(it.first, cloned_node)) {
|
||||
std::cout << "Match " << cloned_node->get_type_info().name << " " << cloned_node->get_friendly_name() <<
|
||||
" with " << it.first->get_friendly_name() << std::endl;
|
||||
// std::cout << "Match " << cloned_node->get_type_info().name << " " << cloned_node->get_friendly_name() <<
|
||||
// " with " << it.first->get_friendly_name() << std::endl;
|
||||
find_op_in_cache = it.first;
|
||||
break;
|
||||
}
|
||||
@ -84,16 +85,18 @@ void OpCache::update_cache(const std::shared_ptr<ov::Node>& node,
|
||||
size_t priority = get_node_priority_by_version(cloned_node);
|
||||
auto meta = MetaInfo(model_path, get_input_info_by_node(cloned_node), model_op_cnt, priority);
|
||||
if (find_op_in_cache != nullptr) {
|
||||
std::cout << "[ INFO ][ OP CACHE ] Update cache node: " << cloned_node->get_type_info().name <<
|
||||
" " << find_op_in_cache->get_friendly_name() << std::endl;
|
||||
m_ops_cache[find_op_in_cache].update(model_path, get_input_info_by_node(cloned_node), model_op_cnt, ignored_input_names);
|
||||
}
|
||||
if (find_op_in_cache > cloned_node) {
|
||||
std::cout << "Update cache node: " << cloned_node->get_type_info().name << " " << find_op_in_cache->get_friendly_name() << std::endl;
|
||||
meta = m_ops_cache[find_op_in_cache];
|
||||
m_ops_cache.erase(find_op_in_cache);
|
||||
find_op_in_cache = nullptr;
|
||||
}
|
||||
if (find_op_in_cache == nullptr) {
|
||||
std::cout << "Insert node: " << cloned_node->get_type_info().name << " " << cloned_node->get_friendly_name() << " to Cache" << std::endl;
|
||||
std::cout << "[ INFO ][ OP CACHE ] Insert node: " << cloned_node->get_type_info().name <<
|
||||
" " << cloned_node->get_friendly_name() << " to Cache" << std::endl;
|
||||
m_ops_cache.insert({ cloned_node, meta });
|
||||
}
|
||||
}
|
||||
|
@ -29,15 +29,19 @@ int main(int argc, char *argv[]) {
|
||||
try {
|
||||
models = find_models(dirs, FLAGS_path_regex);
|
||||
} catch (std::runtime_error& e) {
|
||||
std::cout << "Try 'subgraphdumper -h' for more information. \nException: " << e.what() << std::endl;
|
||||
std::cout << "[ INFO ] Try 'subgraphsDumper -h' for more information. \nException: " << e.what() << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
std::vector<std::shared_ptr<ICache>> caches;
|
||||
if (FLAGS_cache_type == "OP" || FLAGS_cache_type.empty()) {
|
||||
std::cout << "[ INFO ] OpCache is enabled!" << std::endl;
|
||||
caches.push_back(OpCache::get());
|
||||
} else if (FLAGS_cache_type == "GRAPH" || FLAGS_cache_type.empty()) {
|
||||
caches.push_back(GraphCache::get());
|
||||
}
|
||||
if (FLAGS_cache_type == "GRAPH" || FLAGS_cache_type.empty()) {
|
||||
// todo: iefode: to check and enable it in CI
|
||||
// std::cout << "[ INFO ] GraphCache is enabled!" << std::endl;
|
||||
// caches.push_back(GraphCache::get());
|
||||
}
|
||||
|
||||
for (auto& cache : caches) {
|
||||
|
@ -4,9 +4,7 @@
|
||||
|
||||
#include "openvino/op/convolution.hpp"
|
||||
#include "openvino/op/group_conv.hpp"
|
||||
|
||||
#include "common_test_utils/graph_comparator.hpp"
|
||||
|
||||
#include "matchers/single_op/single_op.hpp"
|
||||
|
||||
using namespace ov::tools::subgraph_dumper;
|
||||
|
@ -69,7 +69,7 @@ FusedNamesExtractor::extract(const std::shared_ptr<ov::Model> &model,
|
||||
try {
|
||||
matched_patterns.push_back(generate_model(nodes, start_node, checked_ops));
|
||||
} catch(std::exception& e) {
|
||||
std::cout << e.what() << std::endl;
|
||||
std::cout << "[ ERROR ] Impossible to generate network and add to GraphCache: " <<e.what() << std::endl;
|
||||
}
|
||||
start_node = nullptr;
|
||||
nodes.clear();
|
||||
@ -78,7 +78,7 @@ FusedNamesExtractor::extract(const std::shared_ptr<ov::Model> &model,
|
||||
try {
|
||||
matched_patterns.push_back(generate_model(nodes, start_node, checked_ops));
|
||||
} catch(std::exception& e) {
|
||||
std::cout << e.what() << std::endl;
|
||||
std::cout << "[ ERROR ] Impossible to generate network and add to GraphCache: " << e.what() << std::endl;
|
||||
}
|
||||
return matched_patterns;
|
||||
}
|
||||
|
@ -96,7 +96,7 @@ RepeatPatternExtractor::extract(const std::shared_ptr<ov::Model> &model,
|
||||
generate_model(nodes[i], ordered_ops[start_node_idx[i]], checked_ops));
|
||||
nodes[i].clear();
|
||||
} catch(std::exception& e) {
|
||||
std::cout << e.what() << std::endl;
|
||||
std::cout << "[ ERROR ] Impossible to generate network and add to GraphCache: " << e.what() << std::endl;
|
||||
}
|
||||
}
|
||||
if (is_extract_body) {
|
||||
|
@ -12,12 +12,11 @@ inline std::unordered_map<std::string, std::shared_ptr<ov::Node>>
|
||||
update_nodes(const std::set<std::shared_ptr<ov::Node>>& nodes,
|
||||
const std::shared_ptr<ov::Node>& start_node) {
|
||||
std::unordered_map<std::string, std::shared_ptr<ov::Node>> model_map;
|
||||
auto cloned_op = clone_node(start_node, true, false, "Op_" + std::to_string(model_map.size()));
|
||||
model_map.insert({ start_node->get_friendly_name(), cloned_op });
|
||||
std::shared_ptr<ov::Node> cloned_op = nullptr;
|
||||
|
||||
for (const auto& op : nodes) {
|
||||
if (ov::op::util::is_parameter(op) || ov::op::util::is_constant(op) ||
|
||||
ov::op::util::is_output(op) || op == start_node) {
|
||||
ov::op::util::is_output(op)) {
|
||||
continue;
|
||||
}
|
||||
cloned_op = clone_node(op, true, false, "Op_" + std::to_string(model_map.size()));
|
||||
@ -26,16 +25,15 @@ update_nodes(const std::set<std::shared_ptr<ov::Node>>& nodes,
|
||||
|
||||
for (const auto& op : nodes) {
|
||||
if (ov::op::util::is_parameter(op) || ov::op::util::is_constant(op) ||
|
||||
ov::op::util::is_output(op) || op == start_node) {
|
||||
ov::op::util::is_output(op)) {
|
||||
continue;
|
||||
}
|
||||
auto op_name = op->get_friendly_name();
|
||||
cloned_op = model_map[op->get_friendly_name()];
|
||||
size_t inputs_size = op->inputs().size();
|
||||
ov::OutputVector in_out_vector(inputs_size);
|
||||
bool is_input_filled = false;
|
||||
int filled_input_idx = -1;
|
||||
for (size_t in_idx = 0; in_idx < inputs_size; ++in_idx) {
|
||||
bool is_this_input_filled = false;
|
||||
auto in_node = op->get_input_node_ptr(in_idx)->shared_from_this();
|
||||
for (size_t in_out_idx = 0; in_out_idx < in_node->outputs().size(); ++in_out_idx) {
|
||||
for (const auto& target_input : in_node->output(in_out_idx).get_target_inputs()) {
|
||||
@ -45,20 +43,24 @@ update_nodes(const std::set<std::shared_ptr<ov::Node>>& nodes,
|
||||
in_out_vector[in_idx] = model_map.count(in_node_name) ?
|
||||
model_map.at(in_node_name)->output(in_out_idx) :
|
||||
cloned_op->get_input_node_ptr(in_idx)->output(0);
|
||||
is_this_input_filled = true;
|
||||
if (model_map.count(in_node_name)) {
|
||||
filled_input_idx++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (is_this_input_filled) {
|
||||
is_input_filled = true;
|
||||
if (filled_input_idx == in_idx) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!is_input_filled && op_name != start_node->get_friendly_name()) {
|
||||
// todo: iefode: check this code
|
||||
if (filled_input_idx < 0 && op_name != start_node->get_friendly_name()) {
|
||||
model_map.erase(op_name);
|
||||
} else {
|
||||
} else if (filled_input_idx >= 0) {
|
||||
auto name = cloned_op->get_friendly_name();
|
||||
model_map[op_name] = cloned_op->clone_with_new_inputs(in_out_vector);
|
||||
model_map[op_name]->set_friendly_name(name);
|
||||
}
|
||||
}
|
||||
return model_map;
|
||||
@ -68,11 +70,13 @@ std::pair<std::shared_ptr<ov::Model>, std::map<std::string, InputInfo>>
|
||||
generate_model(const std::set<std::shared_ptr<ov::Node>>& nodes,
|
||||
const std::shared_ptr<ov::Node>& start_node,
|
||||
std::unordered_set<std::string>& checked_ops) {
|
||||
if (nodes.size() < 2) {
|
||||
throw std::runtime_error("Incorrect node number to create model");
|
||||
}
|
||||
auto model_map = update_nodes(nodes, start_node);
|
||||
if (model_map.size() < 2) {
|
||||
throw std::runtime_error("Incorrect node number to create model");
|
||||
}
|
||||
|
||||
ov::OutputVector results;
|
||||
std::map<std::string, InputInfo> input_info;
|
||||
for (const auto& op : model_map) {
|
||||
@ -122,7 +126,7 @@ std::vector<std::string> find_models(const std::vector<std::string> &dirs, const
|
||||
try {
|
||||
models.emplace_back(file);
|
||||
} catch (std::exception& e) {
|
||||
std::cout << "Impossible to read model: " << file << std::endl << "Exception: " << e.what();
|
||||
std::cout << "[ ERROR ] Impossible to read model: " << file << std::endl << "Exception: " << e.what();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -143,7 +147,6 @@ std::map<ModelCacheStatus, std::vector<std::string>> cache_models(
|
||||
for (auto& cache : caches) {
|
||||
for (const auto& model : models) {
|
||||
if (ov::util::file_exists(model)) {
|
||||
std::cout << "Processing model: " << model << std::endl;
|
||||
ModelCacheStatus model_status = ModelCacheStatus::SUCCEED;
|
||||
try {
|
||||
std::shared_ptr<ov::Model> function = core->read_model(model);
|
||||
@ -152,12 +155,12 @@ std::map<ModelCacheStatus, std::vector<std::string>> cache_models(
|
||||
cache->update_cache(function, model, extract_body);
|
||||
}
|
||||
} catch (std::exception &e) {
|
||||
std::cout << "Model processing failed with exception:" << std::endl << e.what() << std::endl;
|
||||
std::cout << "[ ERROR ] Model processing failed with exception:" << std::endl << e.what() << std::endl;
|
||||
model_status = ModelCacheStatus::NOT_FULLY_CACHED;
|
||||
}
|
||||
} catch (std::exception &e) {
|
||||
model_status = ModelCacheStatus::NOT_READ;
|
||||
std::cout << "Model reading failed with exception:" << std::endl << e.what() << std::endl;
|
||||
std::cout << "[ ERROR ] Model reading failed with exception:" << std::endl << e.what() << std::endl;
|
||||
}
|
||||
cache_status[model_status].push_back(model);
|
||||
}
|
||||
|
@ -14,6 +14,8 @@ std::map<std::string, InputInfo> get_input_info_by_node(const std::shared_ptr<ov
|
||||
std::shared_ptr<ov::Node> input_node = node->get_input_node_shared_ptr(port_id);
|
||||
std::string input_name = input_node->get_friendly_name();
|
||||
if (std::dynamic_pointer_cast<ov::op::v0::Constant>(input_node)) {
|
||||
if (ov::shape_size(input_node->get_output_shape(0)) == 0)
|
||||
continue;
|
||||
auto const_node =
|
||||
std::dynamic_pointer_cast<ov::op::v0::Constant>(input_node);
|
||||
in_info.is_const = true;
|
||||
@ -124,7 +126,7 @@ std::shared_ptr<ov::Node> clone_node(std::shared_ptr<ov::Node> node,
|
||||
}
|
||||
if (!has_parameters && !is_copy_const_node) {
|
||||
auto cloned_node = clone_node(node, true, true);
|
||||
std::cout << "The operation: " + node->get_friendly_name() + " does not have parameters! Replace first input to parameter!" << std::endl;
|
||||
// std::cout << "The operation: " + node->get_friendly_name() + " does not have parameters! Replace first input to parameter!" << std::endl;
|
||||
auto param =
|
||||
std::make_shared<ov::op::v0::Parameter>(cloned_node->get_input_element_type(0), cloned_node->get_input_partial_shape(0));
|
||||
std::string param_name = node_name + "_0";
|
||||
|
@ -2,7 +2,7 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
set(TARGET_NAME subgraphs_dumper_tests)
|
||||
set(TARGET_NAME subgraphsDumperTests)
|
||||
|
||||
addIeTargetTest(
|
||||
NAME ${TARGET_NAME}
|
||||
|
@ -0,0 +1,16 @@
|
||||
// Copyright (C) 2018-2023 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
#include "functional_test_utils/skip_tests_config.hpp"
|
||||
|
||||
// ======================= ExtractorsManagerTest Unit tests =======================
|
||||
class SubgraphsDumperBaseTest : public ::testing::Test {
|
||||
protected:
|
||||
void SetUp() override {
|
||||
SKIP_IF_CURRENT_TEST_IS_DISABLED();
|
||||
}
|
||||
};
|
@ -4,8 +4,6 @@
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "openvino/op/ops.hpp"
|
||||
#include "openvino/util/file_util.hpp"
|
||||
#include "openvino/openvino.hpp"
|
||||
@ -16,9 +14,11 @@
|
||||
#include "cache/cache.hpp"
|
||||
#include "cache/meta/meta_info.hpp"
|
||||
|
||||
#include "base_test.hpp"
|
||||
|
||||
namespace {
|
||||
|
||||
class ICacheUnitTest : public ::testing::Test,
|
||||
class ICacheUnitTest : public SubgraphsDumperBaseTest,
|
||||
public virtual ov::tools::subgraph_dumper::ICache {
|
||||
protected:
|
||||
std::shared_ptr<ov::Model> test_model;
|
||||
@ -27,6 +27,7 @@ protected:
|
||||
std::string test_artifacts_dir;
|
||||
|
||||
void SetUp() override {
|
||||
SubgraphsDumperBaseTest::SetUp();
|
||||
model_name = "test_model";
|
||||
test_artifacts_dir = "test_artifacts";
|
||||
test_model_path = ov::util::path_join({ test_artifacts_dir, model_name + ".xml" });
|
||||
|
@ -4,8 +4,6 @@
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "openvino/op/ops.hpp"
|
||||
#include "openvino/util/file_util.hpp"
|
||||
#include "openvino/op/util/op_types.hpp"
|
||||
@ -18,6 +16,7 @@
|
||||
#include "test_models/model_0.hpp"
|
||||
#include "test_models/model_1.hpp"
|
||||
#include "test_models/model_2.hpp"
|
||||
#include "base_test.hpp"
|
||||
|
||||
namespace {
|
||||
|
||||
@ -25,12 +24,13 @@ using namespace ov::tools::subgraph_dumper;
|
||||
|
||||
// ====================== Graph Cache Functional tests ==============================
|
||||
|
||||
class GraphCacheFuncTest : public ::testing::Test {
|
||||
class GraphCacheFuncTest : public SubgraphsDumperBaseTest {
|
||||
protected:
|
||||
std::shared_ptr<ov::Model> test_model;
|
||||
std::string test_artifacts_dir, test_model_name, test_model_path;
|
||||
|
||||
void SetUp() override {
|
||||
SubgraphsDumperBaseTest::SetUp();
|
||||
test_model_name = "test_model_name";
|
||||
test_artifacts_dir = ov::util::path_join({ov::test::utils::getCurrentWorkingDir(), "test_artifacts"});
|
||||
test_model_path = ov::util::path_join({test_artifacts_dir, test_model_name + ".xml"});
|
||||
@ -63,7 +63,7 @@ TEST_F(GraphCacheFuncTest, get_graph_cache_twice) {
|
||||
|
||||
TEST_F(GraphCacheFuncTest, update_cache) {
|
||||
auto graph_cache = ov::tools::subgraph_dumper::GraphCache::get();
|
||||
ASSERT_NO_THROW(graph_cache->update_cache(test_model, test_model_path, true));
|
||||
graph_cache->update_cache(test_model, test_model_path, true);
|
||||
ASSERT_NO_THROW(graph_cache->update_cache(test_model, test_model_path, true));
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
#include "pugixml.hpp"
|
||||
|
||||
#include "openvino/openvino.hpp"
|
||||
@ -14,13 +13,15 @@
|
||||
|
||||
#include "cache/meta/meta_info.hpp"
|
||||
|
||||
#include "base_test.hpp"
|
||||
|
||||
namespace {
|
||||
|
||||
using namespace ov::tools::subgraph_dumper;
|
||||
|
||||
// ======================== Input Info Unit tests =============================================
|
||||
|
||||
class InputInfoUnitTest : public ::testing::Test {};
|
||||
class InputInfoUnitTest : public SubgraphsDumperBaseTest {};
|
||||
|
||||
TEST_F(InputInfoUnitTest, constructor) {
|
||||
ASSERT_NO_THROW(auto in_info = InputInfo());
|
||||
@ -58,7 +59,7 @@ TEST_F(ModelInfoFuncTest, constructor) {
|
||||
|
||||
// ======================== Meta Info Functional tests =============================================
|
||||
|
||||
class MetaInfoFuncTest : public ::testing::Test {
|
||||
class MetaInfoFuncTest : public SubgraphsDumperBaseTest {
|
||||
protected:
|
||||
std::string test_model_path, test_model_name;
|
||||
std::map<std::string, InputInfo> test_in_info;
|
||||
@ -66,6 +67,7 @@ protected:
|
||||
std::string test_artifacts_dir;
|
||||
|
||||
void SetUp() override {
|
||||
SubgraphsDumperBaseTest::SetUp();
|
||||
test_model_path = "test_model_path.xml";
|
||||
test_model_name = ov::test::utils::replaceExt(test_model_path, "");
|
||||
test_in_info = {{ "test_in_0", InputInfo(DEFAULT_MIN_VALUE, 1, true) }};
|
||||
@ -195,10 +197,11 @@ TEST_F(MetaInfoUnitTest, get_model_name_by_path) {
|
||||
}
|
||||
|
||||
TEST_F(MetaInfoUnitTest, get_graph_priority) {
|
||||
auto meta = MetaInfo(test_model_name, test_in_info);
|
||||
this->update(test_model_name, meta.get_input_info());
|
||||
ASSERT_NO_THROW(this->get_abs_graph_priority());
|
||||
ASSERT_NO_THROW(this->get_graph_priority());
|
||||
ASSERT_TRUE(this->get_graph_priority() >= 0 && this->get_graph_priority() <= 1);
|
||||
ASSERT_NO_THROW(this->get_abs_graph_priority());
|
||||
ASSERT_EQ(this->get_abs_graph_priority(), 5);
|
||||
}
|
||||
|
||||
} // namespace
|
@ -4,8 +4,6 @@
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "openvino/op/ops.hpp"
|
||||
#include "openvino/util/file_util.hpp"
|
||||
|
||||
@ -15,18 +13,21 @@
|
||||
#include "cache/op_cache.hpp"
|
||||
#include "utils/node.hpp"
|
||||
|
||||
#include "base_test.hpp"
|
||||
|
||||
namespace {
|
||||
|
||||
using namespace ov::tools::subgraph_dumper;
|
||||
|
||||
// ====================== Operation Cache Functional tests ==============================
|
||||
|
||||
class OpCacheFuncTest : public ::testing::Test {
|
||||
class OpCacheFuncTest : public SubgraphsDumperBaseTest {
|
||||
protected:
|
||||
std::shared_ptr<ov::Model> test_model;
|
||||
std::string test_artifacts_dir, test_model_name, test_model_path;
|
||||
|
||||
void SetUp() override {
|
||||
SubgraphsDumperBaseTest::SetUp();
|
||||
test_model_name = "test_model_name";
|
||||
test_artifacts_dir = ov::util::path_join({ov::test::utils::getCurrentWorkingDir(), "test_artifacts"});
|
||||
test_model_path = ov::util::path_join({test_artifacts_dir, test_model_name + ".xml"});
|
||||
|
@ -2,18 +2,18 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "matchers/single_op/convolutions.hpp"
|
||||
#include "openvino/op/ops.hpp"
|
||||
#include "base_test.hpp"
|
||||
|
||||
namespace {
|
||||
|
||||
using namespace ov::tools::subgraph_dumper;
|
||||
|
||||
class ConvolutionMatcherTest : public ::testing::Test {
|
||||
class ConvolutionMatcherTest : public SubgraphsDumperBaseTest {
|
||||
protected:
|
||||
void SetUp() override {
|
||||
SubgraphsDumperBaseTest::SetUp();
|
||||
matcher = ConvolutionsMatcher();
|
||||
}
|
||||
|
||||
|
@ -2,19 +2,18 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "openvino/op/ops.hpp"
|
||||
|
||||
#include "matchers/single_op/single_op.hpp"
|
||||
#include "base_test.hpp"
|
||||
|
||||
namespace {
|
||||
|
||||
using namespace ov::tools::subgraph_dumper;
|
||||
|
||||
class SingleOpMatcherTest : public ::testing::Test {
|
||||
class SingleOpMatcherTest : public SubgraphsDumperBaseTest {
|
||||
protected:
|
||||
void SetUp() override {
|
||||
SubgraphsDumperBaseTest::SetUp();
|
||||
matcher = SingleOpMatcher();
|
||||
}
|
||||
|
||||
|
@ -2,27 +2,28 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "openvino/op/abs.hpp"
|
||||
#include "openvino/op/parameter.hpp"
|
||||
|
||||
#include "matchers/single_op/manager.hpp"
|
||||
#include "matchers/single_op/single_op.hpp"
|
||||
|
||||
#include "base_test.hpp"
|
||||
|
||||
namespace {
|
||||
|
||||
using namespace ov::tools::subgraph_dumper;
|
||||
|
||||
// ======================= MatcherManager Unit tests =======================
|
||||
class MatchersManagerTest : public MatchersManager,
|
||||
public ::testing::Test {
|
||||
public SubgraphsDumperBaseTest {
|
||||
protected:
|
||||
MatchersManager::MatchersMap test_map;
|
||||
std::shared_ptr<ov::op::v0::Abs> test_abs;
|
||||
std::shared_ptr<ov::op::v0::Parameter> test_parameter;
|
||||
|
||||
void SetUp() override {
|
||||
SubgraphsDumperBaseTest::SetUp();
|
||||
test_map = {
|
||||
{ "test_matcher", SingleOpMatcher::Ptr(new SingleOpMatcher) },
|
||||
};
|
||||
|
@ -2,9 +2,9 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
#include "matchers/single_op/single_op.hpp"
|
||||
#include "openvino/op/ops.hpp"
|
||||
#include "base_test.hpp"
|
||||
|
||||
namespace {
|
||||
|
||||
@ -13,9 +13,10 @@ using namespace ngraph;
|
||||
using ov::element::Type_t;
|
||||
using namespace ov::tools::subgraph_dumper;
|
||||
|
||||
class MatcherConfigTest : public ::testing::Test {
|
||||
class MatcherConfigTest : public SubgraphsDumperBaseTest {
|
||||
protected:
|
||||
void SetUp() override {
|
||||
SubgraphsDumperBaseTest::SetUp();
|
||||
const auto const1 = std::make_shared<v0::Constant>(Type_t::f32, Shape({5, 5}), 1);
|
||||
const auto const2 = std::make_shared<v0::Constant>(Type_t::f32, Shape({5, 5}), 2);
|
||||
node = std::make_shared<v1::Add>(const1, const2);
|
||||
|
@ -4,14 +4,13 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "matchers/subgraph/fused_names.hpp"
|
||||
#include "utils/model.hpp"
|
||||
|
||||
#include "test_models/model_0.hpp"
|
||||
#include "test_models/model_1.hpp"
|
||||
#include "test_models/model_2.hpp"
|
||||
#include "base_test.hpp"
|
||||
|
||||
namespace {
|
||||
|
||||
@ -20,19 +19,33 @@ using namespace ov::tools::subgraph_dumper;
|
||||
|
||||
// ======================= ExtractorsManagerTest Unit tests =======================
|
||||
class FusedNamesExtractorTest : public FusedNamesExtractor,
|
||||
public ::testing::Test {
|
||||
public SubgraphsDumperBaseTest {
|
||||
protected:
|
||||
bool is_match(const std::shared_ptr<ov::Model>& model) {
|
||||
auto compiled_names = extract_compiled_model_names(model);
|
||||
std::set<std::string> diff;
|
||||
for (const auto& op : model->get_ordered_ops()) {
|
||||
auto op_name = op->get_friendly_name();
|
||||
if (!compiled_names.count(op_name)) {
|
||||
diff.insert(op_name);
|
||||
size_t graph_cnt = 0;
|
||||
{
|
||||
auto compiled_names = extract_compiled_model_names(model);
|
||||
std::vector<size_t> op_cnt;
|
||||
for (const auto& op : model->get_ordered_ops()) {
|
||||
if (this->is_node_to_skip(op)) {
|
||||
op_cnt.push_back(1);
|
||||
continue;
|
||||
}
|
||||
auto op_name = op->get_friendly_name();
|
||||
if (!compiled_names.count(op_name)) {
|
||||
op_cnt.push_back(1);
|
||||
} else if (op_cnt.size() > 0) {
|
||||
++op_cnt[op_cnt.size() - 1];
|
||||
}
|
||||
}
|
||||
for (const auto& cnt : op_cnt) {
|
||||
if (cnt > 1) {
|
||||
++graph_cnt;
|
||||
}
|
||||
}
|
||||
}
|
||||
auto models = this->extract(model);
|
||||
return diff.size() == 0 ? true : models.size() + 2 == diff.size();
|
||||
return models.size() == graph_cnt;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -2,11 +2,9 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "matchers/subgraph/manager.hpp"
|
||||
#include "matchers/subgraph/subgraph.hpp"
|
||||
|
||||
#include "base_test.hpp"
|
||||
|
||||
#include "openvino/op/abs.hpp"
|
||||
#include "openvino/op/relu.hpp"
|
||||
@ -19,9 +17,10 @@ using namespace ov::tools::subgraph_dumper;
|
||||
|
||||
// ======================= ExtractorsManagerTest Unit tests =======================
|
||||
class ExtractorsManagerTest : public ExtractorsManager,
|
||||
public ::testing::Test {
|
||||
public SubgraphsDumperBaseTest {
|
||||
protected:
|
||||
void SetUp() override {
|
||||
SubgraphsDumperBaseTest::SetUp();
|
||||
test_map = {
|
||||
{ "test_matcher", SubgraphExtractor::Ptr(new SubgraphExtractor) },
|
||||
};
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include "matchers/subgraph/repeat_pattern.hpp"
|
||||
#include "utils/model.hpp"
|
||||
|
||||
#include "base_test.hpp"
|
||||
#include "test_models/model_0.hpp"
|
||||
#include "test_models/model_1.hpp"
|
||||
#include "test_models/model_2.hpp"
|
||||
@ -18,7 +19,7 @@ using namespace ov::tools::subgraph_dumper;
|
||||
|
||||
// ======================= ExtractorsManagerTest Unit tests =======================
|
||||
class RepeatPatternExtractorTest : public RepeatPatternExtractor,
|
||||
public ::testing::Test {
|
||||
public SubgraphsDumperBaseTest {
|
||||
protected:
|
||||
bool is_match(const std::list<ExtractedPattern>& models,
|
||||
const std::vector<std::shared_ptr<ov::Model>>& ref_models) {
|
||||
|
@ -2,9 +2,8 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "matchers/subgraph/subgraph.hpp"
|
||||
#include "base_test.hpp"
|
||||
|
||||
#include "openvino/op/abs.hpp"
|
||||
#include "openvino/op/relu.hpp"
|
||||
@ -17,9 +16,10 @@ using namespace ov::tools::subgraph_dumper;
|
||||
|
||||
// ======================= ExtractorsManagerTest Unit tests =======================
|
||||
class SubgraphExtractorTest : public SubgraphExtractor,
|
||||
public ::testing::Test {
|
||||
public SubgraphsDumperBaseTest {
|
||||
protected:
|
||||
void SetUp() override {
|
||||
SubgraphsDumperBaseTest::SetUp();
|
||||
{
|
||||
std::shared_ptr<ov::op::v0::Parameter> test_parameter =
|
||||
std::make_shared<ov::op::v0::Parameter>(ov::element::f32, ov::Shape{1, 2});
|
||||
|
@ -0,0 +1,15 @@
|
||||
// Copyright (C) 2018-2023 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "functional_test_utils/skip_tests_config.hpp"
|
||||
|
||||
std::vector<std::string> disabledTestPatterns() {
|
||||
std::vector<std::string> retVector{
|
||||
// todo: enable these tests with graph cache enabling
|
||||
R"(.*RepeatPatternExtractorTest.*extract_1.*)",
|
||||
R"(.*ModelUtilsTest.*generate_.*)",
|
||||
R"(.*GraphCacheFuncTest.*update_cache.*)",
|
||||
};
|
||||
return retVector;
|
||||
}
|
@ -2,63 +2,38 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
#include "openvino/op/util/op_types.hpp"
|
||||
#include "utils/model.hpp"
|
||||
#include "matchers/subgraph/subgraph.hpp"
|
||||
#include "test_models/model_0.hpp"
|
||||
#include "test_models/model_1.hpp"
|
||||
#include "test_models/model_2.hpp"
|
||||
#include "base_test.hpp"
|
||||
|
||||
namespace {
|
||||
|
||||
using namespace ov::tools::subgraph_dumper;
|
||||
|
||||
inline std::pair<std::shared_ptr<ov::Node>, std::set<std::shared_ptr<ov::Node>>>
|
||||
using ModelUtilsTest = SubgraphsDumperBaseTest;
|
||||
|
||||
std::pair<std::shared_ptr<ov::Node>, std::set<std::shared_ptr<ov::Node>>>
|
||||
get_functional_ops(const std::shared_ptr<ov::Model>& model) {
|
||||
std::shared_ptr<ov::Node> start_node = nullptr;
|
||||
// todo: check get_ordered_ops (work diffent compilation by compilation) and remove his code after
|
||||
std::set<std::shared_ptr<ov::Node>> nodes;
|
||||
std::vector<std::shared_ptr<ov::Node>> nodes_tmp;
|
||||
std::vector<std::shared_ptr<ov::Node>> layer;
|
||||
|
||||
for (const auto& res : model->get_results()) {
|
||||
for (size_t i = 0; i < res->inputs().size(); ++i) {
|
||||
layer.push_back(res->get_input_node_shared_ptr(i));
|
||||
}
|
||||
}
|
||||
while (!layer.empty()) {
|
||||
std::vector<std::shared_ptr<ov::Node>> prev_layer;
|
||||
nodes_tmp.insert(nodes_tmp.begin(), layer.begin(), layer.end());
|
||||
for (const auto& op : layer) {
|
||||
for (size_t i = 0; i < op->inputs().size(); ++i)
|
||||
prev_layer.push_back(op->get_input_node_shared_ptr(i));
|
||||
}
|
||||
layer = prev_layer;
|
||||
}
|
||||
for (const auto& node : nodes_tmp) {
|
||||
if (ov::op::util::is_parameter(node) || ov::op::util::is_output(node)) {
|
||||
for (const auto& op : model->get_ordered_ops()) {
|
||||
if (ov::op::util::is_parameter(op) || ov::op::util::is_output(op)) {
|
||||
continue;
|
||||
}
|
||||
if (start_node == nullptr) {
|
||||
start_node = node;
|
||||
start_node = op;
|
||||
}
|
||||
nodes.insert(node);
|
||||
nodes.insert(op);
|
||||
}
|
||||
|
||||
// for (const auto& op : model->get_ordered_ops()) {
|
||||
// if (ov::op::util::is_parameter(op) || ov::op::util::is_output(op)) {
|
||||
// continue;
|
||||
// }
|
||||
// if (start_node == nullptr) {
|
||||
// start_node = op;
|
||||
// }
|
||||
// nodes.insert(op);
|
||||
// }
|
||||
return { start_node, nodes };
|
||||
}
|
||||
|
||||
TEST(ModelUtilsTest, generate_0) {
|
||||
TEST_F(ModelUtilsTest, generate_0) {
|
||||
Model_0 test;
|
||||
std::shared_ptr<ov::Model> test_model = test.get(), recovered_model;
|
||||
{
|
||||
@ -78,7 +53,7 @@ TEST(ModelUtilsTest, generate_0) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST(ModelUtilsTest, generate_1) {
|
||||
TEST_F(ModelUtilsTest, generate_1) {
|
||||
Model_1 test;
|
||||
std::shared_ptr<ov::Model> test_model = test.get(), recovered_model;
|
||||
{
|
||||
@ -98,7 +73,7 @@ TEST(ModelUtilsTest, generate_1) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST(ModelUtilsTest, generate_2) {
|
||||
TEST_F(ModelUtilsTest, generate_2) {
|
||||
Model_2 test;
|
||||
std::shared_ptr<ov::Model> test_model = test.get(), recovered_model;
|
||||
{
|
||||
|
@ -2,17 +2,16 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "utils/node.hpp"
|
||||
|
||||
#include "openvino/op/ops.hpp"
|
||||
#include "base_test.hpp"
|
||||
|
||||
namespace {
|
||||
|
||||
using namespace ov::tools::subgraph_dumper;
|
||||
using NodeUtilsTest = SubgraphsDumperBaseTest;
|
||||
|
||||
TEST(NodeUtilsTest, get_const_ranges) {
|
||||
TEST_F(NodeUtilsTest, get_const_ranges) {
|
||||
std::vector<float> values = {-1, -2.05, -3.65, 0, 5, 7};
|
||||
auto const_node = std::make_shared<ov::op::v0::Constant>(ov::element::Type_t::f32, ov::Shape({2, 3}), values);
|
||||
auto range = get_const_ranges<float>(const_node);
|
||||
@ -20,7 +19,7 @@ TEST(NodeUtilsTest, get_const_ranges) {
|
||||
ASSERT_EQ(range, range_ref);
|
||||
}
|
||||
|
||||
TEST(NodeUtilsTest, get_input_info_by_node) {
|
||||
TEST_F(NodeUtilsTest, get_input_info_by_node) {
|
||||
std::vector<float> values = {-1, -2.05, -3.65, 0, 5, 7};
|
||||
auto const_node = std::make_shared<ov::op::v0::Constant>(ov::element::Type_t::f32, ov::Shape({2, 3}), values);
|
||||
const_node->set_friendly_name("const_0");
|
||||
@ -36,7 +35,7 @@ TEST(NodeUtilsTest, get_input_info_by_node) {
|
||||
ASSERT_EQ(ref_test_info, orig_test_info);
|
||||
}
|
||||
|
||||
TEST(NodeUtilsTest, clone_node) {
|
||||
TEST_F(NodeUtilsTest, clone_node) {
|
||||
std::vector<float> values(512, 1.f);
|
||||
auto const_node = std::make_shared<ov::op::v0::Constant>(ov::element::Type_t::f32, ov::Shape({2, 256}), values);
|
||||
const_node->set_friendly_name("const_0");
|
||||
@ -65,7 +64,7 @@ TEST(NodeUtilsTest, clone_node) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST(NodeUtilsTest, generate_model_by_node) {
|
||||
TEST_F(NodeUtilsTest, generate_model_by_node) {
|
||||
std::vector<float> values = {-1, -2.05, -3.65, 0, 5, 7};
|
||||
auto const_node = std::make_shared<ov::op::v0::Constant>(ov::element::Type_t::f32, ov::Shape({2, 3}), values);
|
||||
const_node->set_friendly_name("const_0");
|
||||
@ -93,7 +92,7 @@ TEST(NodeUtilsTest, generate_model_by_node) {
|
||||
ASSERT_EQ(res_0->get_element_type(), ov::element::Type_t::f32);
|
||||
}
|
||||
|
||||
TEST(NodeUtilsTest, get_max_ops_versions) {
|
||||
TEST_F(NodeUtilsTest, get_max_ops_versions) {
|
||||
std::map<std::string, std::string> max_ops_versions;
|
||||
ASSERT_NO_THROW(max_ops_versions = get_max_ops_versions());
|
||||
|
||||
@ -109,7 +108,7 @@ TEST(NodeUtilsTest, get_max_ops_versions) {
|
||||
ASSERT_EQ(max_ops_versions[shapeOf_0->get_type_info().name], "3");
|
||||
}
|
||||
|
||||
TEST(NodeUtilsTest, get_node_priority_by_version) {
|
||||
TEST_F(NodeUtilsTest, get_node_priority_by_version) {
|
||||
auto param = std::make_shared<ov::op::v0::Parameter>(ov::element::u8, ov::PartialShape{1, 3, 16, 16});
|
||||
|
||||
auto one_opset_node = std::make_shared<ov::op::v0::Convert>(param, ov::element::u16);
|
||||
|
@ -9,11 +9,13 @@ addIeTarget(
|
||||
TYPE STATIC
|
||||
ROOT "${CMAKE_CURRENT_SOURCE_DIR}/include"
|
||||
ADDITIONAL_SOURCE_DIRS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||||
${OpenVINO_SOURCE_DIR}/src/tests/functional/plugin/conformance/subgraphs_dumper_new/include/cache/meta/
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||||
ADD_CPPLINT
|
||||
INCLUDES
|
||||
PUBLIC
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/include"
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
${OpenVINO_SOURCE_DIR}/src/tests/functional/plugin/conformance/subgraphs_dumper_new/include/cache/meta/
|
||||
LINK_LIBRARIES
|
||||
PUBLIC
|
||||
gflags
|
||||
|
@ -9,15 +9,19 @@
|
||||
|
||||
#include <pugixml.hpp>
|
||||
|
||||
#include "shared_test_classes/base/utils/ranges.hpp"
|
||||
#include "shared_test_classes/base/utils/generate_inputs.hpp"
|
||||
#include "ngraph_functions/builders.hpp"
|
||||
#include "common_test_utils/file_utils.hpp"
|
||||
#include "common_test_utils/data_utils.hpp"
|
||||
#include "common_test_utils/ov_tensor_utils.hpp"
|
||||
#include "common_test_utils/common_utils.hpp"
|
||||
#include "common_test_utils/graph_comparator.hpp"
|
||||
#include "functional_test_utils/crash_handler.hpp"
|
||||
#include "functional_test_utils/summary/op_info.hpp"
|
||||
#include "functional_test_utils/skip_tests_config.hpp"
|
||||
|
||||
#include "input_info.hpp"
|
||||
#include "conformance.hpp"
|
||||
#include "read_ir_test/read_ir.hpp"
|
||||
|
||||
@ -25,6 +29,10 @@
|
||||
|
||||
#include <setjmp.h>
|
||||
|
||||
#include "openvino/pass/manager.hpp"
|
||||
#include "openvino/pass/constant_folding.hpp"
|
||||
#include "openvino/runtime/common.hpp"
|
||||
|
||||
namespace ov {
|
||||
namespace test {
|
||||
namespace conformance {
|
||||
@ -199,68 +207,44 @@ void ReadIRTest::SetUp() {
|
||||
if (ov::test::utils::fileExists(metaFile)) {
|
||||
pugi::xml_document doc;
|
||||
doc.load_file(metaFile.c_str());
|
||||
auto models = doc.child("meta_info").child("models");
|
||||
size_t model_len = 0, occurance = 0;
|
||||
for (const auto &model : models.children("model")) {
|
||||
ocurance_in_models.push_back({model.attribute("name").as_string(), model.attribute("count").as_uint()});
|
||||
model_len++;
|
||||
occurance += model.attribute("count").as_uint();
|
||||
}
|
||||
rel_influence_coef = doc.child("meta_info").child("graph_priority").attribute("value").as_double();
|
||||
// TODO: remove after cache update w/a
|
||||
if (rel_influence_coef == 0) {
|
||||
rel_influence_coef = 1.f;
|
||||
}
|
||||
auto portsInfo = doc.child("meta_info").child("ports_info");
|
||||
auto getPortInfo = [&](size_t id) {
|
||||
LayerTestsUtils::PortInfo info;
|
||||
for (const auto &p : portsInfo.children()) {
|
||||
if (p.attribute("id").as_uint() == id) {
|
||||
info.convert_to_const = p.attribute("convert_to_const").as_bool();
|
||||
if (std::strcmp(p.attribute("min").as_string(), "undefined") != 0) {
|
||||
info.min = p.attribute("min").as_double();
|
||||
} else {
|
||||
info.min = -10;
|
||||
}
|
||||
if (std::strcmp(p.attribute("max").as_string(), "undefined") != 0) {
|
||||
info.max = p.attribute("max").as_double();
|
||||
} else {
|
||||
info.max = 10;
|
||||
}
|
||||
break;
|
||||
}
|
||||
auto input_info_xml = doc.child("meta_info").child("input_info");
|
||||
std::map<std::string, ov::tools::subgraph_dumper::InputInfo> input_info;
|
||||
for (const auto &input : input_info_xml.children()) {
|
||||
auto in_name = std::string(input.attribute("id").value());
|
||||
ov::tools::subgraph_dumper::InputInfo in_info;
|
||||
in_info.is_const = input.attribute("convert_to_const").as_bool();
|
||||
if (std::string(input.attribute("min").value()) != "undefined") {
|
||||
in_info.ranges.min = input.attribute("min").as_double();
|
||||
}
|
||||
return info;
|
||||
};
|
||||
|
||||
auto params = function->get_parameters();
|
||||
for (const auto ¶m : params) {
|
||||
auto idx = -1;
|
||||
for (size_t i = 0; i < param->get_output_size(); i++) {
|
||||
for (const auto &node : param->get_output_target_inputs(i)) {
|
||||
const auto nodePtr = node.get_node()->shared_from_this();
|
||||
for (size_t port = 0; port < nodePtr->get_input_size(); ++port) {
|
||||
if (nodePtr->get_input_node_ptr(port)->shared_from_this() == param->shared_from_this()) {
|
||||
idx = port;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (std::string(input.attribute("max").value()) != "undefined") {
|
||||
in_info.ranges.max = input.attribute("max").as_double();
|
||||
}
|
||||
EXPECT_GE(idx, 0);
|
||||
|
||||
auto info = getPortInfo(idx);
|
||||
if (info.convert_to_const) {
|
||||
const auto constant = ngraph::builder::makeConstant(param->get_element_type(),
|
||||
param->get_shape(),
|
||||
std::vector<double>{},
|
||||
true,
|
||||
info.max,
|
||||
info.min,
|
||||
1);
|
||||
ov::replace_node(param, constant);
|
||||
function->remove_parameter(param);
|
||||
input_info.insert({in_name, in_info});
|
||||
}
|
||||
auto inputMap = utils::getInputMap();
|
||||
std::vector<std::shared_ptr<ov::op::v0::Parameter>> parameter_to_remove;
|
||||
for (const auto& param : function->get_parameters()) {
|
||||
auto in_info = input_info.find(param->get_friendly_name())->second;
|
||||
if (!in_info.is_const) {
|
||||
continue;
|
||||
}
|
||||
utils::ConstRanges::set(in_info.ranges.min, in_info.ranges.max);
|
||||
// auto next_node = param->get_default_output().get_node_shared_ptr();
|
||||
auto next_node = param->get_default_output().get_target_inputs().begin()->get_node()->shared_from_this();
|
||||
auto it = inputMap.find(next_node->get_type_info());
|
||||
auto tensor = it->second(next_node, function->get_parameter_index(param), param->get_element_type(), param->get_shape());
|
||||
auto const_node = std::make_shared<ov::op::v0::Constant>(tensor);
|
||||
ov::replace_node(param, const_node);
|
||||
parameter_to_remove.push_back(param);
|
||||
utils::ConstRanges::reset();
|
||||
}
|
||||
for (const auto& param : parameter_to_remove) {
|
||||
function->remove_parameter(param);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,8 @@
|
||||
#include "ie_core.hpp"
|
||||
#include "ngraph/node.hpp"
|
||||
|
||||
#include "shared_test_classes/base/utils/ranges.hpp"
|
||||
|
||||
namespace ov {
|
||||
namespace test {
|
||||
namespace utils {
|
||||
|
@ -14,6 +14,8 @@
|
||||
#include "shared_test_classes/base/utils/generate_inputs.hpp"
|
||||
#include "shared_test_classes/base/utils/ranges.hpp"
|
||||
|
||||
#include "openvino/pass/constant_folding.hpp"
|
||||
|
||||
namespace ov {
|
||||
namespace test {
|
||||
namespace utils {
|
||||
@ -506,8 +508,6 @@ ov::runtime::Tensor generate(const std::shared_ptr<ngraph::op::v1::ReduceLogical
|
||||
return LogicalOp::generate(elemType, targetShape);
|
||||
}
|
||||
|
||||
|
||||
|
||||
ov::runtime::Tensor generate(const std::shared_ptr<ngraph::op::v3::Bucketize>& node,
|
||||
size_t port,
|
||||
const ov::element::Type& elemType,
|
||||
|
@ -29,6 +29,8 @@ inline std::string get_node_version(const std::shared_ptr<ov::Node>& node, const
|
||||
} // namespace test
|
||||
} // namespace ov
|
||||
|
||||
|
||||
// todo: remove these structure after remove old subgraphs dumper
|
||||
namespace LayerTestsUtils {
|
||||
|
||||
struct ModelInfo {
|
||||
|
@ -180,7 +180,7 @@ def create_hash(in_dir_path: Path, operations=dict()):
|
||||
pass
|
||||
except:
|
||||
logger.error(f"Impossible to create hash for {model_path}")
|
||||
ports_info = ET.parse(meta_path).getroot().find("ports_info")
|
||||
ports_info = ET.parse(meta_path).getroot().find("input_info")
|
||||
str_to_hash += ET.tostring(ports_info).decode('utf8').replace('\t', '')
|
||||
|
||||
old_name = model_path
|
||||
|
Loading…
Reference in New Issue
Block a user