From 1552beaab2f325dc1a65494267a57a825c6c0de3 Mon Sep 17 00:00:00 2001 From: Eddy Kim Date: Mon, 16 Jan 2023 22:30:44 +0900 Subject: [PATCH] Adding missed conversion logics between layout and string for 2022.3 (#15111) * added missed layout to string conversion * added an unit test for layout_from_string * added missing spaces around = * replaced 95 with SCALAR * moved layout_to_string into a new file * changed to parametrized test --- src/inference/include/ie/ie_common.h | 4 ++ .../skip_tests_config.cpp | 3 +- .../graph/serialization/layout_serializer.hpp | 2 +- .../intel_gpu/graph/serialization/utils.hpp | 37 +++++++++++ .../intel_gpu/src/plugin/compiled_model.cpp | 28 +-------- .../tests/test_cases/serialization_test.cpp | 61 +++++++++++++++++++ .../skip_tests_config.cpp | 2 +- 7 files changed, 108 insertions(+), 29 deletions(-) create mode 100644 src/plugins/intel_gpu/include/intel_gpu/graph/serialization/utils.hpp create mode 100644 src/plugins/intel_gpu/tests/test_cases/serialization_test.cpp diff --git a/src/inference/include/ie/ie_common.h b/src/inference/include/ie/ie_common.h index 1edb64218d9..e62344c353f 100644 --- a/src/inference/include/ie/ie_common.h +++ b/src/inference/include/ie/ie_common.h @@ -120,6 +120,10 @@ inline std::ostream& operator<<(std::ostream& out, const Layout& p) { PRINT_LAYOUT(NCDHW); PRINT_LAYOUT(NDHWC); PRINT_LAYOUT(OIHW); + PRINT_LAYOUT(GOIHW); + PRINT_LAYOUT(OIDHW); + PRINT_LAYOUT(GOIDHW); + PRINT_LAYOUT(SCALAR); PRINT_LAYOUT(C); PRINT_LAYOUT(CHW); PRINT_LAYOUT(HWC); 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 f7489918c1c..48e5dbdcf7f 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 @@ -67,8 +67,7 @@ std::vector disabledTestPatterns() { // TODO: 57562 No dynamic output shape support R"(.*NonZeroLayerTest.*)", // Not expected behavior - R"(.*Behavior.*InferRequestIOBBlobSetLayoutTest.*layout=(95|OIHW).*)", - R"(.*Behavior.*InferRequestIOBBlobSetLayoutTest.*layout=(95|OIHW).*)", + R"(.*Behavior.*InferRequestIOBBlobSetLayoutTest.*layout=(SCALAR|OIHW).*)", R"(.*Behavior.*InferRequestIOBBlobSetLayoutTest.*CanSetOutBlobWithDifferentLayouts.*layout=HW.*)", R"(.*Behavior.*InferRequestIOBBlobSetLayoutTest.*CanSetInBlobWithDifferentLayouts.*layout=NHWC.*targetDevice=(AUTO|MULTI).*)", R"(.*Behavior.*InferRequestIOBBlobSetLayoutTest.*CanSetOutBlobWithDifferentLayouts.*layout=CN.*targetDevice=(AUTO|MULTI).*)", diff --git a/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/layout_serializer.hpp b/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/layout_serializer.hpp index a3ae11a1c62..cbba904259d 100644 --- a/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/layout_serializer.hpp +++ b/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/layout_serializer.hpp @@ -75,4 +75,4 @@ public: } }; -} // namespace cldnn \ No newline at end of file +} // namespace cldnn diff --git a/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/utils.hpp b/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/utils.hpp new file mode 100644 index 00000000000..899e5d7a74c --- /dev/null +++ b/src/plugins/intel_gpu/include/intel_gpu/graph/serialization/utils.hpp @@ -0,0 +1,37 @@ +// Copyright (C) 2018-2022 Intel Corporation +// SPDX-License-Identifier: Apache-2.0 +// + +#pragma once + +#include +#include "ie/ie_common.h" + +namespace cldnn { +static InferenceEngine::Layout layout_from_string(const std::string& name) { + static const std::unordered_map layouts = { + { "ANY", InferenceEngine::Layout::ANY }, + { "NCHW", InferenceEngine::Layout::NCHW }, + { "NHWC", InferenceEngine::Layout::NHWC }, + { "NCDHW", InferenceEngine::Layout::NCDHW }, + { "NDHWC", InferenceEngine::Layout::NDHWC }, + { "OIHW", InferenceEngine::Layout::OIHW }, + { "GOIHW", InferenceEngine::Layout::GOIHW }, + { "OIDHW", InferenceEngine::Layout::OIDHW }, + { "GOIDHW", InferenceEngine::Layout::GOIDHW }, + { "SCALAR", InferenceEngine::Layout::SCALAR }, + { "C", InferenceEngine::Layout::C }, + { "CHW", InferenceEngine::Layout::CHW }, + { "HWC", InferenceEngine::Layout::HWC }, + { "HW", InferenceEngine::Layout::HW }, + { "NC", InferenceEngine::Layout::NC }, + { "CN", InferenceEngine::Layout::CN }, + { "BLOCKED", InferenceEngine::Layout::BLOCKED } + }; + auto it = layouts.find(name); + if (it != layouts.end()) { + return it->second; + } + IE_THROW(NetworkNotRead) << "Unknown layout with name '" << name << "'"; +} +} // namespace cldnn diff --git a/src/plugins/intel_gpu/src/plugin/compiled_model.cpp b/src/plugins/intel_gpu/src/plugin/compiled_model.cpp index c554a70fe3b..a32007ff26d 100644 --- a/src/plugins/intel_gpu/src/plugin/compiled_model.cpp +++ b/src/plugins/intel_gpu/src/plugin/compiled_model.cpp @@ -5,6 +5,7 @@ #include "ie_metric_helpers.hpp" #include "intel_gpu/graph/serialization/binary_buffer.hpp" #include "intel_gpu/graph/serialization/string_serializer.hpp" +#include "intel_gpu/graph/serialization/utils.hpp" #include "intel_gpu/plugin/graph.hpp" #include "intel_gpu/plugin/itt.hpp" #include "intel_gpu/plugin/infer_request.hpp" @@ -64,29 +65,6 @@ CompiledModel::CompiledModel(InferenceEngine::CNNNetwork &network, std::shared_p } } -static InferenceEngine::Layout layout_from_string(const std::string & name) { - static const std::unordered_map layouts = { - { "ANY", InferenceEngine::Layout::ANY }, - { "NCHW", InferenceEngine::Layout::NCHW }, - { "NHWC", InferenceEngine::Layout::NHWC }, - { "NCDHW", InferenceEngine::Layout::NCDHW }, - { "NDHWC", InferenceEngine::Layout::NDHWC }, - { "OIHW", InferenceEngine::Layout::OIHW }, - { "C", InferenceEngine::Layout::C }, - { "CHW", InferenceEngine::Layout::CHW }, - { "HWC", InferenceEngine::Layout::HWC }, - { "HW", InferenceEngine::Layout::HW }, - { "NC", InferenceEngine::Layout::NC }, - { "CN", InferenceEngine::Layout::CN }, - { "BLOCKED", InferenceEngine::Layout::BLOCKED } - }; - auto it = layouts.find(name); - if (it != layouts.end()) { - return it->second; - } - IE_THROW(NetworkNotRead) << "Unknown layout with name '" << name << "'"; -} - CompiledModel::CompiledModel(std::istream& networkModel, std::shared_ptr context, Config config) : InferenceEngine::ExecutableNetworkThreadSafeDefault{[&]() -> InferenceEngine::ITaskExecutor::Ptr { if (config.exclusiveAsyncRequests) { @@ -126,7 +104,7 @@ CompiledModel::CompiledModel(std::istream& networkModel, std::shared_ptr> precision; ib >> layout; - DataPtr input = std::make_shared(name, Precision::FromStr(precision), layout_from_string(layout)); + DataPtr input = std::make_shared(name, Precision::FromStr(precision), cldnn::layout_from_string(layout)); InputInfo::Ptr infoNew = std::make_shared(); infoNew->setInputData(input); inputs.emplace(std::make_pair(name, infoNew)); @@ -145,7 +123,7 @@ CompiledModel::CompiledModel(std::istream& networkModel, std::shared_ptr> precision; ib >> layout; - DataPtr output = std::make_shared(name, Precision::FromStr(precision), layout_from_string(layout)); + DataPtr output = std::make_shared(name, Precision::FromStr(precision), cldnn::layout_from_string(layout)); outputs.emplace(std::make_pair(name, output)); } diff --git a/src/plugins/intel_gpu/tests/test_cases/serialization_test.cpp b/src/plugins/intel_gpu/tests/test_cases/serialization_test.cpp new file mode 100644 index 00000000000..2d740195853 --- /dev/null +++ b/src/plugins/intel_gpu/tests/test_cases/serialization_test.cpp @@ -0,0 +1,61 @@ +// Copyright (C) 2018-2022 Intel Corporation +// SPDX-License-Identifier: Apache-2.0 +// + +#include "test_utils.h" +#include "intel_gpu/graph/serialization/binary_buffer.hpp" +#include "intel_gpu/graph/serialization/string_serializer.hpp" +#include "intel_gpu/graph/serialization/utils.hpp" + +using namespace cldnn; +using namespace ::tests; + +struct ie_layout_serialization_test : testing::TestWithParam { + void run_test() { + InferenceEngine::Layout test_layout = GetParam(); + + membuf mem_buf; + { + std::ostream out_mem(&mem_buf); + BinaryOutputBuffer ob = BinaryOutputBuffer(out_mem); + + std::stringstream ss; + ss << test_layout; + ob << ss.str(); + } + { + std::istream in_mem(&mem_buf); + BinaryInputBuffer ib = BinaryInputBuffer(in_mem, get_test_engine()); + + std::string str_layout; + ib >> str_layout; + EXPECT_EQ(cldnn::layout_from_string(str_layout), test_layout); + } + } +}; + +TEST_P(ie_layout_serialization_test, basic) { + run_test(); +} + +INSTANTIATE_TEST_SUITE_P( + gpu_serialization, + ie_layout_serialization_test, + testing::Values(InferenceEngine::Layout::ANY, + InferenceEngine::Layout::NCHW, + InferenceEngine::Layout::NHWC, + InferenceEngine::Layout::NCDHW, + InferenceEngine::Layout::NDHWC, + InferenceEngine::Layout::OIHW, + InferenceEngine::Layout::GOIHW, + InferenceEngine::Layout::OIDHW, + InferenceEngine::Layout::GOIDHW, + InferenceEngine::Layout::SCALAR, + InferenceEngine::Layout::C, + InferenceEngine::Layout::CHW, + InferenceEngine::Layout::HWC, + InferenceEngine::Layout::HW, + InferenceEngine::Layout::NC, + InferenceEngine::Layout::CN, + InferenceEngine::Layout::BLOCKED) +); diff --git a/src/tests/functional/plugin/gpu/shared_tests_instances/skip_tests_config.cpp b/src/tests/functional/plugin/gpu/shared_tests_instances/skip_tests_config.cpp index 578c007e191..eaac1e62286 100644 --- a/src/tests/functional/plugin/gpu/shared_tests_instances/skip_tests_config.cpp +++ b/src/tests/functional/plugin/gpu/shared_tests_instances/skip_tests_config.cpp @@ -50,7 +50,7 @@ std::vector disabledTestPatterns() { // Not allowed dynamic loop tests on GPU R"(.*smoke_StaticShapeLoop_dynamic_exit.*)", // Not expected behavior - R"(.*Behavior.*InferRequestIOBBlobSetLayoutTest.*layout=(95|OIHW).*)", + R"(.*Behavior.*InferRequestIOBBlobSetLayoutTest.*layout=(SCALAR|OIHW).*)", R"(.*Behavior.*InferRequestIOBBlobSetLayoutTest.*CanSetInBlobWithDifferentLayouts.*layout=NHWC.*)", R"(.*Behavior.*InferRequestIOBBlobSetLayoutTest.*CanSetOutBlobWithDifferentLayouts.*layout=(CN|HW).*)", R"(.*Behavior.*(Multi|Auto).*InferRequestSetBlobByType.*Batched.*)",