[GNA] Fix UT for adding extra segments to PWL-s after convolution (#16732)

This commit is contained in:
Marcin Kusmierski 2023-04-14 11:25:10 +02:00 committed by GitHub
parent 435a79a2a3
commit d6f7e5e84d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 79 additions and 48 deletions

View File

@ -14,7 +14,7 @@ endif()
# TODO: fix CVS-71010 and remove BUILD_SHARED_LIBS # TODO: fix CVS-71010 and remove BUILD_SHARED_LIBS
if(NOT BUILD_SHARED_LIBS) if(NOT BUILD_SHARED_LIBS)
set(exclude_path EXCLUDED_SOURCE_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/(gna_api_stub|gna_wait_test|gna_export_import_test|gna_infer_request_test|gna_plugin_load_network_test|gna_mock_api_initializer).cpp") set(exclude_path EXCLUDED_SOURCE_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/(gna_api_stub|gna_wait_test|gna_export_import_test|gna_infer_request_test|gna_plugin_load_network_test|gna_mock_api_initializer|gna_extra_pwl_segments_tests).cpp")
endif() endif()
addIeTargetTest( addIeTargetTest(

View File

@ -5,7 +5,9 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "any_copy.hpp" #include "any_copy.hpp"
#include "common/gna_target.hpp"
#include "gna_infer_request.hpp" #include "gna_infer_request.hpp"
#include "gna_mock_api.hpp"
#include "gna_plugin.hpp" #include "gna_plugin.hpp"
#include "ngraph_functions/builders.hpp" #include "ngraph_functions/builders.hpp"
@ -30,6 +32,7 @@ struct PWLExtraSegmentsParamsWithConv {
ngraph::helpers::ActivationTypes activation_type; ngraph::helpers::ActivationTypes activation_type;
size_t expected_segments_num; size_t expected_segments_num;
bool use_pooling; bool use_pooling;
std::map<std::string, std::string> config;
}; };
const std::unordered_map<ngraph::helpers::ActivationTypes, std::string> kNGraphActivationMapForTests{ const std::unordered_map<ngraph::helpers::ActivationTypes, std::string> kNGraphActivationMapForTests{
@ -93,7 +96,7 @@ public:
void SetUp() override; void SetUp() override;
protected: protected:
InferenceEngine::CNNNetwork cnn_network_; InferenceEngine::CNNNetwork m_cnn_network;
}; };
std::string GNAPWLExtraSegmentsTestFixture::getTestCaseName( std::string GNAPWLExtraSegmentsTestFixture::getTestCaseName(
@ -103,10 +106,14 @@ std::string GNAPWLExtraSegmentsTestFixture::getTestCaseName(
result << "ConvolutionType=" << params.conv_params.convolution_type << "_"; result << "ConvolutionType=" << params.conv_params.convolution_type << "_";
result << "ActivationType=" << params.activation_type << "_"; result << "ActivationType=" << params.activation_type << "_";
result << "PoolingOn=" << (params.use_pooling ? "yes" : "no"); result << "PoolingOn=" << (params.use_pooling ? "yes" : "no");
for (auto const& config_entry : params.config) {
result << "_config_entry=" << config_entry.first << "_" << config_entry.second;
}
return result.str(); return result.str();
} }
void GNAPWLExtraSegmentsTestFixture::SetUp() { void GNAPWLExtraSegmentsTestFixture::SetUp() {
PWLExtraSegmentsParamsWithConv tests_params;
auto params = GetParam(); auto params = GetParam();
const auto& conv_params = params.conv_params; const auto& conv_params = params.conv_params;
const auto& precision = params.precision; const auto& precision = params.precision;
@ -151,9 +158,15 @@ void GNAPWLExtraSegmentsTestFixture::SetUp() {
auto function = std::make_shared<ov::Model>(ov::ResultVector({result}), auto function = std::make_shared<ov::Model>(ov::ResultVector({result}),
ov::ParameterVector({input}), ov::ParameterVector({input}),
"convolution_with_activation_exrta_segments"); "convolution_with_activation_exrta_segments");
cnn_network_ = InferenceEngine::CNNNetwork(function); m_cnn_network = InferenceEngine::CNNNetwork(function);
} }
const std::map<std::string, std::string> configs_30 = {{"GNA_DEVICE_MODE", "GNA_SW_EXACT"},
{"GNA_EXEC_TARGET", "GNA_TARGET_3_0"}};
const std::map<std::string, std::string> configs_35 = {{"GNA_DEVICE_MODE", "GNA_SW_EXACT"},
{"GNA_EXEC_TARGET", "GNA_TARGET_3_5"}};
auto kPrecision32 = ov::element::f32; auto kPrecision32 = ov::element::f32;
const ov::Shape kInput1D = {1, 1, 1, 8}; const ov::Shape kInput1D = {1, 1, 1, 8};
@ -166,23 +179,23 @@ const std::vector<size_t> kPadEnd1D = {0, 0};
const ConvolutionParameters kConvolutionParams1D = const ConvolutionParameters kConvolutionParams1D =
{kDnnConvolutional1dOp, kInput1D, kKernel1D, kStride1D, kDilation1D, kOutChanneldsNum1D, kPadBegin1D, kPadEnd1D}; {kDnnConvolutional1dOp, kInput1D, kKernel1D, kStride1D, kDilation1D, kOutChanneldsNum1D, kPadBegin1D, kPadEnd1D};
const PWLExtraSegmentsParamsWithConv kConvolution1DReluWithoutPoolParams = {kConvolutionParams1D, const PWLExtraSegmentsParamsWithConv kConvolution1DReluWithoutPoolParams_30 =
kPrecision32, {kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Relu, 2, false, configs_30};
ngraph::helpers::ActivationTypes::Relu, const PWLExtraSegmentsParamsWithConv kConvolution1DReluWithPoolParams_30 =
2, {kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Relu, 2, true, configs_30};
false}; const PWLExtraSegmentsParamsWithConv kConvolution1DSigmoidWithoutPoolParams_30 =
const PWLExtraSegmentsParamsWithConv kConvolution1DReluWithPoolParams = {kConvolutionParams1D, {kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, false, configs_30};
kPrecision32, const PWLExtraSegmentsParamsWithConv kConvolution1DSigmoidWithPoolParams_30 =
ngraph::helpers::ActivationTypes::Relu, {kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, true, configs_30};
2,
true}; const PWLExtraSegmentsParamsWithConv kConvolution1DReluWithoutPoolParams_35 =
const PWLExtraSegmentsParamsWithConv kConvolution1DSigmoidWithoutPoolParams = {kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Relu, 4, false, configs_35};
{kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, false}; const PWLExtraSegmentsParamsWithConv kConvolution1DReluWithPoolParams_35 =
const PWLExtraSegmentsParamsWithConv kConvolution1DSigmoidWithPoolParams = {kConvolutionParams1D, {kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Relu, 4, true, configs_35};
kPrecision32, const PWLExtraSegmentsParamsWithConv kConvolution1DSigmoidWithoutPoolParams_35 =
ngraph::helpers::ActivationTypes::Sigmoid, {kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, false, configs_35};
12, const PWLExtraSegmentsParamsWithConv kConvolution1DSigmoidWithPoolParams_35 =
true}; {kConvolutionParams1D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, true, configs_35};
const ov::Shape kInput2D = {1, 8, 20, 16}; const ov::Shape kInput2D = {1, 8, 20, 16};
const ov::Shape kKernel2D = {1, 1}; const ov::Shape kKernel2D = {1, 1};
@ -194,46 +207,64 @@ const std::vector<size_t> kPadEnd2D = {0, 0};
const ConvolutionParameters kConvolutionParams2D = const ConvolutionParameters kConvolutionParams2D =
{kDnnConvolutional2dOp, kInput2D, kKernel2D, kStride2D, kDilation2D, kOutChanneldsNum2D, kPadBegin2D, kPadEnd2D}; {kDnnConvolutional2dOp, kInput2D, kKernel2D, kStride2D, kDilation2D, kOutChanneldsNum2D, kPadBegin2D, kPadEnd2D};
const PWLExtraSegmentsParamsWithConv kConvolution2DReluWithoutPoolParams = {kConvolutionParams2D, const PWLExtraSegmentsParamsWithConv kConvolution2DReluWithoutPoolParams_30 =
kPrecision32, {kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Relu, 4, false, configs_30};
ngraph::helpers::ActivationTypes::Relu, const PWLExtraSegmentsParamsWithConv kConvolution2DReluWithPoolParams_30 =
4, {kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Relu, 4, true, configs_30};
false}; const PWLExtraSegmentsParamsWithConv kConvolution2DSigmoidWithoutPoolParams_30 =
const PWLExtraSegmentsParamsWithConv kConvolution2DReluWithPoolParams = {kConvolutionParams2D, {kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, false, configs_30};
kPrecision32, const PWLExtraSegmentsParamsWithConv kConvolution2DSigmoidWithPoolParams_30 =
ngraph::helpers::ActivationTypes::Relu, {kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, true, configs_30};
4,
true}; const PWLExtraSegmentsParamsWithConv kConvolution2DReluWithoutPoolParams_35 =
const PWLExtraSegmentsParamsWithConv kConvolution2DSigmoidWithoutPoolParams = {kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Relu, 4, false, configs_35};
{kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, false}; const PWLExtraSegmentsParamsWithConv kConvolution2DReluWithPoolParams_35 =
const PWLExtraSegmentsParamsWithConv kConvolution2DSigmoidWithPoolParams = {kConvolutionParams2D, {kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Relu, 4, true, configs_35};
kPrecision32, const PWLExtraSegmentsParamsWithConv kConvolution2DSigmoidWithoutPoolParams_35 =
ngraph::helpers::ActivationTypes::Sigmoid, {kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, false, configs_35};
12, const PWLExtraSegmentsParamsWithConv kConvolution2DSigmoidWithPoolParams_35 =
true}; {kConvolutionParams2D, kPrecision32, ngraph::helpers::ActivationTypes::Sigmoid, 12, true, configs_35};
INSTANTIATE_TEST_CASE_P(GNAPWLExtraSegmentsConv1DTests, INSTANTIATE_TEST_CASE_P(GNAPWLExtraSegmentsConv1DTests,
GNAPWLExtraSegmentsTestFixture, GNAPWLExtraSegmentsTestFixture,
::testing::Values(kConvolution1DReluWithoutPoolParams, ::testing::Values(kConvolution1DReluWithoutPoolParams_30,
kConvolution1DReluWithPoolParams, kConvolution1DReluWithPoolParams_30,
kConvolution1DSigmoidWithoutPoolParams, kConvolution1DSigmoidWithoutPoolParams_30,
kConvolution1DSigmoidWithPoolParams), kConvolution1DSigmoidWithPoolParams_30,
kConvolution1DReluWithoutPoolParams_35,
kConvolution1DReluWithPoolParams_35,
kConvolution1DSigmoidWithoutPoolParams_35,
kConvolution1DSigmoidWithPoolParams_35),
GNAPWLExtraSegmentsTestFixture::getTestCaseName); GNAPWLExtraSegmentsTestFixture::getTestCaseName);
INSTANTIATE_TEST_CASE_P(GNAPWLExtraSegmentsConv2DTests, INSTANTIATE_TEST_CASE_P(GNAPWLExtraSegmentsConv2DTests,
GNAPWLExtraSegmentsTestFixture, GNAPWLExtraSegmentsTestFixture,
::testing::Values(kConvolution2DReluWithoutPoolParams, ::testing::Values(kConvolution2DReluWithoutPoolParams_30,
kConvolution2DReluWithPoolParams, kConvolution2DReluWithPoolParams_30,
kConvolution2DSigmoidWithoutPoolParams, kConvolution2DSigmoidWithoutPoolParams_30,
kConvolution2DSigmoidWithPoolParams), kConvolution2DSigmoidWithPoolParams_30,
kConvolution2DReluWithoutPoolParams_35,
kConvolution2DReluWithPoolParams_35,
kConvolution2DSigmoidWithoutPoolParams_35,
kConvolution2DSigmoidWithPoolParams_35),
GNAPWLExtraSegmentsTestFixture::getTestCaseName); GNAPWLExtraSegmentsTestFixture::getTestCaseName);
TEST_P(GNAPWLExtraSegmentsTestFixture, check_number_of_segments) { TEST_P(GNAPWLExtraSegmentsTestFixture, check_number_of_segments) {
auto params = GetParam(); auto params = GetParam();
const ov::AnyMap& gna_config = {ov::intel_gna::execution_mode(ov::intel_gna::ExecutionMode::SW_EXACT)}; auto target_name = params.config["GNA_EXEC_TARGET"];
GNAPluginForPWLExtraSegmentsTest plugin(ov::any_copy(gna_config)); auto target_device = ov::intel_gna::target::StringToDevice(target_name);
auto target_gna = ov::intel_gna::target::DeviceToGna(target_device);
EXPECT_NO_THROW(plugin.LoadNetwork(cnn_network_)); GNACppApi enableMocks;
EXPECT_CALL(enableMocks, Gna2DeviceGetVersion(testing::_, testing::_))
.WillOnce(testing::Invoke([=](uint32_t deviceIndex, enum Gna2DeviceVersion* deviceVersion) {
*deviceVersion = target_gna;
return Gna2StatusSuccess;
}));
GNAPluginForPWLExtraSegmentsTest plugin(params.config);
EXPECT_NO_THROW(plugin.LoadNetwork(m_cnn_network));
EXPECT_NO_THROW(plugin.Test(params.expected_segments_num)); EXPECT_NO_THROW(plugin.Test(params.expected_segments_num));
} }