From 45d6aa21713df32bfbb86866310f59e9803f2d68 Mon Sep 17 00:00:00 2001 From: River Li Date: Mon, 27 Nov 2023 18:18:23 +0800 Subject: [PATCH] [CPU Tests] migrate FuseTransposeAndReorderTest to API 2.0 (#21297) --- .../skip_tests_config.cpp | 2 - .../include/fuse_transpose_reorder.hpp | 34 +-- .../src/fuse_transpose_reorder.cpp | 230 ++++++++++-------- 3 files changed, 139 insertions(+), 127 deletions(-) diff --git a/src/plugins/intel_cpu/tests/functional/shared_tests_instances/skip_tests_config.cpp b/src/plugins/intel_cpu/tests/functional/shared_tests_instances/skip_tests_config.cpp index 75aff9ff6d8..5e52503438e 100644 --- a/src/plugins/intel_cpu/tests/functional/shared_tests_instances/skip_tests_config.cpp +++ b/src/plugins/intel_cpu/tests/functional/shared_tests_instances/skip_tests_config.cpp @@ -178,8 +178,6 @@ std::vector disabledTestPatterns() { R"(.*InferRequestIOBBlobTest.*canProcessDeallocatedOutputBlobAfterGetAndSetBlob.*)", // Plugin version was changed to ov::Version R"(.*VersionTest.*pluginCurrentVersionIsCorrect.*)", - // Issue: 120286 - R"(.*smoke_Basic/FuseTransposeAndReorderTest.CompareWithRefs.*)", // Issue: 113703, 114763 R"(.*smoke_If/SimpleIfTest.*Cond=0.*)", // Issue: 114765 diff --git a/src/plugins/intel_cpu/tests/functional/subgraph_tests/include/fuse_transpose_reorder.hpp b/src/plugins/intel_cpu/tests/functional/subgraph_tests/include/fuse_transpose_reorder.hpp index 0b2b63b7fe9..964988f6490 100644 --- a/src/plugins/intel_cpu/tests/functional/subgraph_tests/include/fuse_transpose_reorder.hpp +++ b/src/plugins/intel_cpu/tests/functional/subgraph_tests/include/fuse_transpose_reorder.hpp @@ -9,51 +9,51 @@ #include #include "test_utils/cpu_test_utils.hpp" -#include "shared_test_classes/base/layer_test_utils.hpp" #include "ov_models/utils/ov_helpers.hpp" #include "ov_models/builders.hpp" +#include "shared_test_classes/base/ov_subgraph.hpp" using namespace CPUTestUtils; -namespace SubgraphTestsDefinitions { +namespace ov { +namespace test { -using FuseTransposeAndReorderParams = std::tuple< - InferenceEngine::SizeVector, // Input shape - InferenceEngine::Precision // Input precision ->; +using FuseTransposeAndReorderParams = std::tuple; class FuseTransposeAndReorderTest : public testing::WithParamInterface, public CPUTestsBase, - virtual public LayerTestsUtils::LayerTestsCommon { + virtual public ov::test::SubgraphBaseStaticTest { public: static std::string getTestCaseName(testing::TestParamInfo obj); protected: void SetUp() override; - virtual void CreateGraph(); - void CheckTransposeCount(size_t expectedTransposeCount); + virtual void create_model(); + void check_transpose_count(size_t expectedTransposeCount); - InferenceEngine::SizeVector inputShape; - InferenceEngine::Precision inPrec; + ov::Shape input_shape; + ov::element::Type in_prec; }; class FuseTransposeAndReorderTest1 : public FuseTransposeAndReorderTest { protected: - void CreateGraph() override; + void create_model() override; }; class FuseTransposeAndReorderTest2 : public FuseTransposeAndReorderTest { protected: - void CreateGraph() override; + void create_model() override; }; class FuseTransposeAndReorderTest3 : public FuseTransposeAndReorderTest { protected: - void CreateGraph() override; + void create_model() override; }; class FuseTransposeAndReorderTest4 : public FuseTransposeAndReorderTest { protected: - void CreateGraph() override; + void create_model() override; }; - -} // namespace SubgraphTestsDefinitions +} // namespace test +} // namespace ov diff --git a/src/plugins/intel_cpu/tests/functional/subgraph_tests/src/fuse_transpose_reorder.cpp b/src/plugins/intel_cpu/tests/functional/subgraph_tests/src/fuse_transpose_reorder.cpp index 754f2507828..876fdd45861 100644 --- a/src/plugins/intel_cpu/tests/functional/subgraph_tests/src/fuse_transpose_reorder.cpp +++ b/src/plugins/intel_cpu/tests/functional/subgraph_tests/src/fuse_transpose_reorder.cpp @@ -3,59 +3,60 @@ // #include "subgraph_tests/include/fuse_transpose_reorder.hpp" -#include -#include +#include "common_test_utils/node_builders/convolution.hpp" +#include "ov_models/builders.hpp" +#include "ov_models/preprocess/preprocess_builders.hpp" +#include "openvino/openvino.hpp" -using namespace InferenceEngine; using namespace CPUTestUtils; -namespace SubgraphTestsDefinitions { +namespace ov { +namespace test { std::string FuseTransposeAndReorderTest::getTestCaseName(testing::TestParamInfo obj) { std::ostringstream result; - SizeVector inputShape; - Precision inPrec; - std::tie(inputShape, inPrec) = obj.param; + ov::Shape input_shape; + ov::element::Type in_prec; + std::tie(input_shape, in_prec) = obj.param; - result << "IS=" << ov::test::utils::vec2str(inputShape) << "_"; - result << "Precision=" << inPrec.name(); + result << "IS=" << ov::test::utils::vec2str(input_shape) << "_"; + result << "Precision=" << in_prec.to_string(); return result.str(); } -void FuseTransposeAndReorderTest::CheckTransposeCount(size_t expectedTransposeCount) { - InferenceEngine::CNNNetwork execGraphInfo = executableNetwork.GetExecGraphInfo(); - auto function = execGraphInfo.getFunction(); - ASSERT_NE(nullptr, function); - size_t actualTransposeCount = 0; - for (const auto &node : function->get_ops()) { +void FuseTransposeAndReorderTest::check_transpose_count(size_t expectedTransposeCount) { + auto runtime_model = compiledModel.get_runtime_model(); + ASSERT_NE(nullptr, runtime_model); + size_t actual_transpose_count = 0; + for (const auto &node : runtime_model->get_ops()) { const auto & rtInfo = node->get_rt_info(); auto getExecValue = [&rtInfo](const std::string & paramName) -> std::string { auto it = rtInfo.find(paramName); OPENVINO_ASSERT(rtInfo.end() != it); return it->second.as(); }; - if (getExecValue(ExecGraphInfoSerialization::LAYER_TYPE) == "Transpose") { - actualTransposeCount++; + if (getExecValue(ov::exec_model_info::LAYER_TYPE) == "Transpose") { + actual_transpose_count++; } } - ASSERT_EQ(expectedTransposeCount, actualTransposeCount); + ASSERT_EQ(expectedTransposeCount, actual_transpose_count); } void FuseTransposeAndReorderTest::SetUp() { targetDevice = ov::test::utils::DEVICE_CPU; SKIP_IF_CURRENT_TEST_IS_DISABLED(); - std::tie(inputShape, inPrec) = this->GetParam(); - CreateGraph(); + std::tie(input_shape, in_prec) = this->GetParam(); + create_model(); } const auto fuseTransposeAndReorderCommonParams = ::testing::Combine( - ::testing::Values(SizeVector{1, 2, 3, 4}, SizeVector{1, 2, 3, 4, 5}), - ::testing::Values(Precision::I8, Precision::U8) + ::testing::Values(ov::Shape{1, 2, 3, 4}, ov::Shape{1, 2, 3, 4, 5}), + ::testing::Values(ov::element::i8, ov::element::u8) ); -/* FuseTransposeAndReorderTest graph +/* FuseTransposeAndReorderTest model --------- |Input | --------- @@ -75,30 +76,29 @@ const auto fuseTransposeAndReorderCommonParams = ::testing::Combine( --------- */ -void FuseTransposeAndReorderTest::CreateGraph() { - auto ngPrc = FuncTestUtils::PrecisionUtils::convertIE2nGraphPrc(inPrec); - ov::ParameterVector params{std::make_shared(ngPrc, ov::Shape(inputShape))}; +void FuseTransposeAndReorderTest::create_model() { + ov::ParameterVector params{std::make_shared(in_prec, ov::Shape(input_shape))}; - auto order = inputShape.size() == 5 ? std::vector{0, 2, 3, 4, 1} : std::vector{0, 2, 3, 1}; - auto memFmt = inputShape.size() == 5 ? ndhwc : nhwc; + auto order = input_shape.size() == 5 ? std::vector{0, 2, 3, 4, 1} : std::vector{0, 2, 3, 1}; + auto memFmt = input_shape.size() == 5 ? ndhwc : nhwc; - auto constOrder = ngraph::builder::makeConstant(ngraph::element::i64, {inputShape.size()}, order); - auto transpose = std::make_shared(params[0], constOrder); + auto constOrder = ngraph::builder::makeConstant(ov::element::i64, {input_shape.size()}, order); + auto transpose = std::make_shared(params[0], constOrder); transpose->get_rt_info() = makeCPUInfo({memFmt}, {memFmt}, {}); - ngraph::ResultVector results{std::make_shared(transpose)}; - function = std::make_shared(results, params, "TransposeReorder"); + ov::ResultVector results{std::make_shared(transpose)}; + function = std::make_shared(results, params, "TransposeReorder"); } TEST_P(FuseTransposeAndReorderTest, CompareWithRefs) { - Run(); - CheckTransposeCount(0); + run(); + check_transpose_count(0); } INSTANTIATE_TEST_SUITE_P(smoke_Basic, FuseTransposeAndReorderTest, fuseTransposeAndReorderCommonParams, FuseTransposeAndReorderTest::getTestCaseName); -/* FuseTransposeAndReorderTest1 graph +/* FuseTransposeAndReorderTest1 model --------- |Input | --------- @@ -134,40 +134,38 @@ INSTANTIATE_TEST_SUITE_P(smoke_Basic, FuseTransposeAndReorderTest, fuseTranspose --------- */ -void FuseTransposeAndReorderTest1::CreateGraph() { - auto ngPrc = FuncTestUtils::PrecisionUtils::convertIE2nGraphPrc(inPrec); - ov::ParameterVector params{std::make_shared(ngPrc, ov::Shape(inputShape))}; +void FuseTransposeAndReorderTest1::create_model() { + ov::ParameterVector params{std::make_shared(in_prec, ov::Shape(input_shape))}; + auto order = input_shape.size() == 5 ? std::vector{0, 2, 3, 4, 1} : std::vector{0, 2, 3, 1}; - auto order = inputShape.size() == 5 ? std::vector{0, 2, 3, 4, 1} : std::vector{0, 2, 3, 1}; - - auto constOrder1 = ngraph::builder::makeConstant(ngraph::element::i64, {inputShape.size()}, order); - auto transpose1 = std::make_shared(params[0], constOrder1); - auto memFmt1 = inputShape.size() == 5 ? ndhwc : nhwc; + auto constOrder1 = ngraph::builder::makeConstant(ov::element::i64, {input_shape.size()}, order); + auto transpose1 = std::make_shared(params[0], constOrder1); + auto memFmt1 = input_shape.size() == 5 ? ndhwc : nhwc; transpose1->get_rt_info() = makeCPUInfo({memFmt1}, {memFmt1}, {}); - auto constOrder2 = ngraph::builder::makeConstant(ngraph::element::i64, {inputShape.size()}, order); - auto transpose2 = std::make_shared(transpose1, constOrder2); - auto memFmt2 = inputShape.size() == 5 ? ndhwc : nhwc; + auto constOrder2 = ngraph::builder::makeConstant(ov::element::i64, {input_shape.size()}, order); + auto transpose2 = std::make_shared(transpose1, constOrder2); + auto memFmt2 = input_shape.size() == 5 ? ndhwc : nhwc; transpose2->get_rt_info() = makeCPUInfo({memFmt2}, {memFmt2}, {}); - auto constOrder3 = ngraph::builder::makeConstant(ngraph::element::i64, {inputShape.size()}, order); - auto transpose3 = std::make_shared(transpose2, constOrder3); - auto memFmt3 = inputShape.size() == 5 ? ncdhw : nchw; + auto constOrder3 = ngraph::builder::makeConstant(ov::element::i64, {input_shape.size()}, order); + auto transpose3 = std::make_shared(transpose2, constOrder3); + auto memFmt3 = input_shape.size() == 5 ? ncdhw : nchw; transpose3->get_rt_info() = makeCPUInfo({memFmt3}, {memFmt3}, {}); - auto shape = ngraph::builder::makeConstant(ngraph::element::i64, {inputShape.size()}, transpose3->get_output_shape(0)); - auto reshape = std::make_shared(transpose1, shape, false); + auto shape = ngraph::builder::makeConstant(ov::element::i64, {input_shape.size()}, transpose3->get_output_shape(0)); + auto reshape = std::make_shared(transpose1, shape, false); auto concat = std::make_shared(ov::NodeVector{transpose3, reshape}, 1); - ngraph::ResultVector results{std::make_shared(concat)}; - function = std::make_shared(results, params, "Transpose_TransposeReorderTranspose_Reshape_Concat"); + ov::ResultVector results{std::make_shared(concat)}; + function = std::make_shared(results, params, "Transpose_TransposeReorderTranspose_Reshape_Concat"); } // Test disabled temporarily, it conflicts with TransposeFuse transformation in common optimizations step TEST_P(FuseTransposeAndReorderTest1, DISABLED_CompareWithRefs) { - Run(); - CheckTransposeCount(2); + run(); + check_transpose_count(2); } INSTANTIATE_TEST_SUITE_P(smoke_Basic, FuseTransposeAndReorderTest1, fuseTransposeAndReorderCommonParams, FuseTransposeAndReorderTest::getTestCaseName); @@ -199,35 +197,33 @@ INSTANTIATE_TEST_SUITE_P(smoke_Basic, FuseTransposeAndReorderTest1, fuseTranspos --------- */ -void FuseTransposeAndReorderTest2::CreateGraph() { - auto ngPrc = FuncTestUtils::PrecisionUtils::convertIE2nGraphPrc(inPrec); +void FuseTransposeAndReorderTest2::create_model() { + auto input_shape2(input_shape); + input_shape2[input_shape2.size() - 1] *= 2; + ov::ParameterVector params{std::make_shared(in_prec, ov::Shape(input_shape)), + std::make_shared(in_prec, ov::Shape(input_shape2))}; + auto order = input_shape.size() == 5 ? std::vector{0, 4, 1, 2, 3} : std::vector{0, 3, 1, 2}; - auto inputShape2(inputShape); - inputShape2[inputShape2.size() - 1] *= 2; - ov::ParameterVector params{std::make_shared(ngPrc, ov::Shape(inputShape)), - std::make_shared(ngPrc, ov::Shape(inputShape2))}; - auto order = inputShape.size() == 5 ? std::vector{0, 4, 1, 2, 3} : std::vector{0, 3, 1, 2}; - - auto constOrder1 = ngraph::builder::makeConstant(ngraph::element::i64, {inputShape.size()}, order); - auto transpose1 = std::make_shared(params[0], constOrder1); - auto memFmt1 = inputShape.size() == 5 ? ndhwc : nhwc; + auto constOrder1 = ngraph::builder::makeConstant(ov::element::i64, {input_shape.size()}, order); + auto transpose1 = std::make_shared(params[0], constOrder1); + auto memFmt1 = input_shape.size() == 5 ? ndhwc : nhwc; transpose1->get_rt_info() = makeCPUInfo({memFmt1}, {memFmt1}, {}); - auto constOrder2 = ngraph::builder::makeConstant(ngraph::element::i64, {inputShape.size()}, order); - auto transpose2 = std::make_shared(params[1], constOrder2); - auto memFmt2 = inputShape.size() == 5 ? ncdhw : nchw; + auto constOrder2 = ngraph::builder::makeConstant(ov::element::i64, {input_shape.size()}, order); + auto transpose2 = std::make_shared(params[1], constOrder2); + auto memFmt2 = input_shape.size() == 5 ? ncdhw : nchw; transpose2->get_rt_info() = makeCPUInfo({memFmt2}, {memFmt2}, {}); auto concat = std::make_shared(ov::NodeVector{transpose1, transpose2}, 1); concat->get_rt_info() = makeCPUInfo({memFmt1, memFmt1}, {memFmt1}, {}); - ngraph::ResultVector results{std::make_shared(concat)}; - function = std::make_shared(results, params, "Transpose_Transpose_Concat"); + ov::ResultVector results{std::make_shared(concat)}; + function = std::make_shared(results, params, "Transpose_Transpose_Concat"); } TEST_P(FuseTransposeAndReorderTest2, CompareWithRefs) { - Run(); - CheckTransposeCount(1); + run(); + check_transpose_count(1); } INSTANTIATE_TEST_SUITE_P(smoke_Basic, FuseTransposeAndReorderTest2, fuseTransposeAndReorderCommonParams, FuseTransposeAndReorderTest::getTestCaseName); @@ -247,44 +243,48 @@ INSTANTIATE_TEST_SUITE_P(smoke_Basic, FuseTransposeAndReorderTest2, fuseTranspos Result */ -void FuseTransposeAndReorderTest3::CreateGraph() { - OPENVINO_ASSERT(inputShape.size() == 4); - - auto ngPrc = FuncTestUtils::PrecisionUtils::convertIE2nGraphPrc(inPrec); +void FuseTransposeAndReorderTest3::create_model() { + OPENVINO_ASSERT(input_shape.size() == 4); auto memFmt = nhwc; - ngraph::op::PadType padType = ngraph::op::PadType::SAME_UPPER; - InferenceEngine::SizeVector kernel{3, 3}, stride{1, 1}, dilation{1, 1}; + ov::op::PadType padType = ov::op::PadType::SAME_UPPER; + ov::Shape kernel{3, 3}, stride{1, 1}, dilation{1, 1}; std::vector padBegin{0, 0}, padEnd{0, 0}; size_t convOutChannels = 32; - ov::ParameterVector params{std::make_shared(ngPrc, ov::Shape(inputShape))}; - OPENVINO_ASSERT(inputShape[1] >= 8 && (inputShape[1] % 8 == 0)); - - auto convolutionNode = ngraph::builder::makeConvolution(params.front(), ngPrc, kernel, stride, padBegin, - padEnd, dilation, padType, convOutChannels); + ov::ParameterVector params{std::make_shared(in_prec, ov::Shape(input_shape))}; + OPENVINO_ASSERT(input_shape[1] >= 8 && (input_shape[1] % 8 == 0)); + auto convolutionNode = ov::test::utils::make_convolution(params.front(), + in_prec, + kernel, + stride, + padBegin, + padEnd, + dilation, + padType, + convOutChannels); convolutionNode->get_rt_info() = makeCPUInfo({memFmt}, {memFmt}, {}); - auto sndAddIn = std::make_shared(ngPrc, convolutionNode->get_output_shape(0)); + auto sndAddIn = std::make_shared(in_prec, convolutionNode->get_output_shape(0)); params.push_back(sndAddIn); - auto add = std::make_shared(convolutionNode->output(0), sndAddIn); + auto add = std::make_shared(convolutionNode->output(0), sndAddIn); auto order = std::vector{0, 2, 3, 1}; - auto constOrder = ngraph::builder::makeConstant(ngraph::element::i64, {order.size()}, order); - auto transpose = std::make_shared(add, constOrder); + auto constOrder = ngraph::builder::makeConstant(ov::element::i64, {order.size()}, order); + auto transpose = std::make_shared(add, constOrder); transpose->get_rt_info() = makeCPUInfo({memFmt}, {memFmt}, {}); - ngraph::ResultVector results{std::make_shared(transpose)}; - function = std::make_shared(results, params, "TransposeReorder"); + ov::ResultVector results{std::make_shared(transpose)}; + function = std::make_shared(results, params, "TransposeReorder"); } TEST_P(FuseTransposeAndReorderTest3, CompareWithRefs) { - Run(); - CheckTransposeCount(1); + run(); + check_transpose_count(1); } -const auto convSumTranposeParams = ::testing::Combine(::testing::Values(SizeVector{1, 16, 32, 35}), - ::testing::Values(Precision::FP32) +const auto convSumTranposeParams = ::testing::Combine(::testing::Values(ov::Shape{1, 16, 32, 35}), + ::testing::Values(ov::element::f32) ); INSTANTIATE_TEST_SUITE_P(smoke_Basic, FuseTransposeAndReorderTest3, convSumTranposeParams, FuseTransposeAndReorderTest::getTestCaseName); @@ -306,27 +306,40 @@ INSTANTIATE_TEST_SUITE_P(smoke_Basic, FuseTransposeAndReorderTest3, convSumTranp | result */ -void FuseTransposeAndReorderTest4::CreateGraph() { - OPENVINO_ASSERT(inputShape.size() == 4); - const InferenceEngine::SizeVector kernel = {1, 1}; - const InferenceEngine::SizeVector stride = {1, 1}; - const InferenceEngine::SizeVector dilation = {1, 1}; +void FuseTransposeAndReorderTest4::create_model() { + OPENVINO_ASSERT(input_shape.size() == 4); + const ov::Shape kernel = {1, 1}; + const ov::Shape stride = {1, 1}; + const ov::Shape dilation = {1, 1}; const std::vector padBegin = {0, 0}; const std::vector padEnd = {0, 0}; const size_t convOutChannels = 4; - auto ngPrc = FuncTestUtils::PrecisionUtils::convertIE2nGraphPrc(inPrec); auto memFmt = nhwc; - ov::ParameterVector inputParams {std::make_shared(ngPrc, ov::Shape(inputShape))}; + ov::ParameterVector inputParams{std::make_shared(in_prec, ov::Shape(input_shape))}; const auto relu = std::make_shared(inputParams[0]); const auto transposeOrder = ov::op::v0::Constant::create(ov::element::i32, {4}, {0, 3, 1, 2}); const auto transpose1 = std::make_shared(relu, transposeOrder); - const auto conv1 = ngraph::builder::makeConvolution(transpose1, ngPrc, kernel, stride, padBegin, - padEnd, dilation, ngraph::op::PadType::AUTO, convOutChannels); + const auto conv1 = ov::test::utils::make_convolution(transpose1, + in_prec, + kernel, + stride, + padBegin, + padEnd, + dilation, + ov::op::PadType::AUTO, + convOutChannels); conv1->get_rt_info() = makeCPUInfo({memFmt}, {memFmt}, {}); const auto transpose2 = std::make_shared(relu, transposeOrder); - const auto conv2 = ngraph::builder::makeConvolution(transpose2, ngPrc, kernel, stride, padBegin, - padEnd, dilation, ngraph::op::PadType::AUTO, convOutChannels); + const auto conv2 = ov::test::utils::make_convolution(transpose2, + in_prec, + kernel, + stride, + padBegin, + padEnd, + dilation, + ov::op::PadType::AUTO, + convOutChannels); conv2->get_rt_info() = makeCPUInfo({memFmt}, {memFmt}, {}); const auto add = std::make_shared(conv1, conv2); @@ -335,8 +348,8 @@ void FuseTransposeAndReorderTest4::CreateGraph() { } TEST_P(FuseTransposeAndReorderTest4, CompareWithRefs) { - Run(); - CheckTransposeCount(0); + run(); + check_transpose_count(0); } INSTANTIATE_TEST_SUITE_P(smoke_Basic, FuseTransposeAndReorderTest4, convSumTranposeParams, FuseTransposeAndReorderTest::getTestCaseName); @@ -353,4 +366,5 @@ TEST(smoke_Basic, FuseDynamicTransposeAndReorderTest) { ASSERT_NO_THROW(core.compile_model(model, "CPU")); } -} // namespace SubgraphTestsDefinitions +} // namespace test +} // namespace ov