[CPU]GroupConvolutionLayer CPU test for AMX (#13539)

This commit is contained in:
Yuan Hu 2023-04-25 13:21:17 +08:00 committed by GitHub
parent d1f1fa2b39
commit e79db660ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 631 additions and 1 deletions

View File

@ -202,6 +202,29 @@ protected:
}
};
using ExpectFallbackGroupConvolutionLayerCPUTest = GroupConvolutionLayerCPUTest;
TEST_P(ExpectFallbackGroupConvolutionLayerCPUTest, CompareWithRefs) {
run();
if (isBias) {
checkBiasFusing(compiledModel);
}
ASSERT_TRUE(!selectedType.empty()) << "Node type is not defined.";
auto function = compiledModel.get_runtime_model();
for (const auto &node : function->get_ops()) {
const auto & rtInfo = node->get_rt_info();
auto getExecValue = [&rtInfo](const std::string & paramName) -> std::string {
auto it = rtInfo.find(paramName);
IE_ASSERT(rtInfo.end() != it);
return it->second.as<std::string>();
};
if ("Convolution" == getExecValue(ExecGraphInfoSerialization::LAYER_TYPE)) {
auto primType = getExecValue(ExecGraphInfoSerialization::IMPL_TYPE);
ASSERT_TRUE(selectedType != primType) << "primType is unexpected: " << primType;
}
}
}
TEST_P(GroupConvolutionLayerCPUTest, CompareWithRefs) {
run();
if (isBias) {
@ -217,6 +240,7 @@ std::vector<groupConvLayerCPUTestParamsSet> filterParamsSetForDevice(std::vector
std::vector<groupConvLayerCPUTestParamsSet> resParamsSet;
const int cpuParamsIndex = 1;
const int selectedTypeIndex = 3;
const int configIndex = 3;
for (auto param : paramsSet) {
auto cpuParams = std::get<cpuParamsIndex>(param);
@ -230,12 +254,27 @@ std::vector<groupConvLayerCPUTestParamsSet> filterParamsSetForDevice(std::vector
continue;
if (selectedTypeStr.find("avx512") != std::string::npos && !with_cpu_x86_avx512f())
continue;
if (selectedTypeStr.find("amx") != std::string::npos && !with_cpu_x86_avx512_core_amx())
continue;
auto additionalConfig = std::get<configIndex>(param);
if (additionalConfig.count(PluginConfigParams::KEY_ENFORCE_BF16) &&
PluginConfigParams::YES == additionalConfig[PluginConfigParams::KEY_ENFORCE_BF16] &&
!with_cpu_x86_bfloat16()) {
continue;
}
resParamsSet.push_back(param);
}
return resParamsSet;
}
std::vector<CPUSpecificParams> filterCPUInfoForDeviceSupportBF16(std::vector<CPUSpecificParams> CPUParams) {
std::vector<CPUSpecificParams> resParamsSet;
if (with_cpu_x86_bfloat16()) {
return filterCPUInfoForDevice(CPUParams);
}
return resParamsSet;
}
/* ===================== */
/* COMMON PARAMS */
@ -485,6 +524,570 @@ INSTANTIATE_TEST_SUITE_P(smoke_GroupConv_3D_Gemm_BF16, GroupConvolutionLayerCPUT
::testing::Values(cpuBF16PluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
/* ============= GroupConvolution params (brgemm_1D) ============= */
const std::vector<SizeVector> kernels_brgemm_1d = {{3}};
const std::vector<SizeVector> strides_brgemm_1d = { {1}, {2} };
const std::vector<std::vector<ptrdiff_t>> padBegins_brgemm_1d = { {0}, {1} };
const std::vector<std::vector<ptrdiff_t>> padEnds_brgemm_1d = { {0} };
const std::vector<SizeVector> dilations_brgemm_1d = { {1}, {2} };
/* ============= GroupConvolution params (brgemm_2D) ============= */
const std::vector<SizeVector> kernels_brgemm_2d = {{3, 3}};
const std::vector<SizeVector> strides_brgemm_2d = {{1, 1}, {2, 2}};
const std::vector<std::vector<ptrdiff_t>> padBegins_brgemm_2d = {{0, 0}, {1, 1}};
const std::vector<std::vector<ptrdiff_t>> padEnds_brgemm_2d = {{0, 0}};
const std::vector<SizeVector> dilations_brgemm_2d = {{1, 1}, {2, 2}};
/* ============= GroupConvolution params (brgemm_3D) ============= */
const std::vector<SizeVector> kernels_brgemm_3d = {{3, 3, 3}};
const std::vector<SizeVector> strides_brgemm_3d = {{1, 1, 1}, {2, 2, 2}};
const std::vector<std::vector<ptrdiff_t>> padBegins_brgemm_3d = {{0, 0, 0}, {1, 1, 1}};
const std::vector<std::vector<ptrdiff_t>> padEnds_brgemm_3d = {{0, 0, 0}};
const std::vector<SizeVector> dilations_brgemm_3d = {{1, 1, 1}, {2, 2, 2}};
/* ============= */
const SizeVector numGroups_brgemm_Blocked = {2};
/* ============= GroupConvolution (brgemm 1D) ============= */
const auto groupConvParams_ExplicitPadding_brgemm_1D = ::testing::Combine(
::testing::ValuesIn(kernels_brgemm_1d),
::testing::ValuesIn(strides_brgemm_1d),
::testing::ValuesIn(padBegins_brgemm_1d),
::testing::ValuesIn(padEnds_brgemm_1d),
::testing::ValuesIn(dilations_brgemm_1d),
::testing::ValuesIn(numOutChannels_Blocked),
::testing::ValuesIn(numGroups_brgemm_Blocked),
::testing::Values(ngraph::op::PadType::EXPLICIT)
);
const std::vector<CPUSpecificParams> CPUParams_brgemm_1D_BF16 = {
conv_avx512_1D_nspc_brgconv
};
const std::vector<CPUSpecificParams> CPUParams_brgemm_1D_FP32 = {
conv_avx512_1D_nspc_brgconv
};
std::vector<InputShape> inputShapes_brgemm_1d = {
{{}, {{ 2, 64, 7 }}},
{
//dynamic shapes
{-1, 64, {1, 200}},
{ //target static shapes
{ 2, 64, 7 },
{ 1, 64, 9 }
}
},
{
//dynamic shapes
{ {-1, 64, -1} },
{ //target static shapes
{ 2, 64, 7 },
{ 1, 64, 14 }
}
}
};
INSTANTIATE_TEST_SUITE_P(smoke_GroupConv_brgemm_1D_FP32, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_1D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_1d),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDevice(CPUParams_brgemm_1D_FP32)),
::testing::ValuesIn(fusingParamsSet),
::testing::Values(cpuEmptyPluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
INSTANTIATE_TEST_SUITE_P(smoke_GroupConv_brgemm_1D_FP32_fusingBias, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_1D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_1d),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDevice(CPUParams_brgemm_1D_FP32)),
::testing::Values(fusingAddPerChannel),
::testing::Values(cpuEmptyPluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
INSTANTIATE_TEST_SUITE_P(smoke_GroupConv_brgemm_1D_BF16, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_1D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_1d),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDeviceSupportBF16(CPUParams_brgemm_1D_BF16)),
::testing::ValuesIn(fusingParamsSetBF16),
::testing::Values(cpuBF16PluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
/* ============= GroupConvolution (brgemm_2D) ============= */
const auto groupConvParams_ExplicitPadding_brgemm_2D = ::testing::Combine(
::testing::ValuesIn(kernels_brgemm_2d),
::testing::ValuesIn(strides_brgemm_2d),
::testing::ValuesIn(padBegins_brgemm_2d),
::testing::ValuesIn(padEnds_brgemm_2d),
::testing::ValuesIn(dilations_brgemm_2d),
::testing::ValuesIn(numOutChannels_Blocked),
::testing::ValuesIn(numGroups_brgemm_Blocked),
::testing::Values(ngraph::op::PadType::EXPLICIT)
);
const std::vector<CPUSpecificParams> CPUParams_brgemm_2D_FP32 = {
conv_avx512_2D_nspc_brgconv
};
const std::vector<CPUSpecificParams> CPUParams_brgemm_2D_BF16 = {
conv_avx512_2D_nspc_brgconv,
conv_avx512_2D_nspc_brgconv_amx
};
std::vector<InputShape> inputShapes_brgemm_2d = {
{{}, {{ 1, 64, 7, 7 }}},
{
//dynamic shapes
{-1, 64, -1, {1, 200}},
{ //target static shapes
{ 2, 64, 7, 7 },
{ 1, 64, 9, 9 }
}
}
};
INSTANTIATE_TEST_SUITE_P(smoke_GroupConv_brgemm_2D_FP32, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_2D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_2d),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDevice(CPUParams_brgemm_2D_FP32)),
::testing::ValuesIn(fusingParamsSet),
::testing::Values(cpuEmptyPluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
std::vector<InputShape> inputShapes_brgemm_2d_dynBatch = {
{
//dynamic shapes
{ {1, 10}, 64, {7, 9}, {7, 9}},
{ //target static shapes
{ 2, 64, 7, 7 },
{ 1, 64, 9, 9 },
{ 3, 64, 9, 9 }
}
}
};
INSTANTIATE_TEST_SUITE_P(nightly_GroupConv_brgemm_2D_FP32_dynBatch, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_2D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_2d_dynBatch),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDevice(CPUParams_brgemm_2D_FP32)),
::testing::ValuesIn(fusingParamsSet),
::testing::Values(cpuEmptyPluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
std::vector<InputShape> inputShapes_brgemm_2d_cache = {
{
//dynamic shapes
{-1, 64, -1, {1, 200}},
{ //target static shapes
{ 1, 64, 7, 7 },
{ 1, 64, 9, 9 },
{ 1, 64, 7, 7 },
}
}
};
INSTANTIATE_TEST_SUITE_P(nightly_GroupConv_brgemm_2D_FP32, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_2D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_2d_cache),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDevice(CPUParams_brgemm_2D_FP32)),
::testing::ValuesIn(fusingParamsSet),
::testing::Values(cpuEmptyPluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
INSTANTIATE_TEST_SUITE_P(smoke_GroupConv_brgemm_2D_BF16, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_2D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_2d),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDeviceSupportBF16(CPUParams_brgemm_2D_BF16)),
::testing::ValuesIn(fusingParamsSetBF16),
::testing::Values(cpuBF16PluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
/* ============= GroupConvolution (brgemm_3D) ============= */
const auto groupConvParams_ExplicitPadding_brgemm_3D = ::testing::Combine(
::testing::ValuesIn(kernels_brgemm_3d),
::testing::ValuesIn(strides_brgemm_3d),
::testing::ValuesIn(padBegins_brgemm_3d),
::testing::ValuesIn(padEnds_brgemm_3d),
::testing::ValuesIn(dilations_brgemm_3d),
::testing::ValuesIn(numOutChannels_Blocked),
::testing::ValuesIn(numGroups_brgemm_Blocked),
::testing::Values(ngraph::op::PadType::EXPLICIT)
);
const std::vector<CPUSpecificParams> CPUParams_brgemm_3D_FP32 = {
conv_avx512_3D_nspc_brgconv
};
const std::vector<CPUSpecificParams> CPUParams_brgemm_3D_BF16 = {
conv_avx512_3D_nspc_brgconv,
conv_avx512_3D_nspc_brgconv_amx
};
std::vector<InputShape> inputShapes_brgemm_3d = {
{{}, {{ 1, 64, 7, 7, 7 }}},
{
//dynamic shapes
{-1, 64, -1, {1, 200}, -1},
{ //target static shapes
{ 2, 64, 7, 7, 7 },
{ 1, 64, 9, 9, 9 }
}
}
};
INSTANTIATE_TEST_SUITE_P(smoke_GroupConv_brgemm_3D_FP32, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_3D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_3d),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDevice(CPUParams_brgemm_3D_FP32)),
::testing::ValuesIn(fusingParamsSet),
::testing::Values(cpuEmptyPluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
INSTANTIATE_TEST_SUITE_P(smoke_GroupConv_brgemm_3D_BF16, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_3D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_3d),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDeviceSupportBF16(CPUParams_brgemm_3D_BF16)),
::testing::ValuesIn(fusingParamsSetBF16),
::testing::Values(cpuBF16PluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
/* ============= GroupConvolution params (brgemm_1x1_1D) ============= */
const std::vector<SizeVector> kernels_brgemm_1x1_1d = {{1}};
const std::vector<SizeVector> strides_brgemm_1x1_1d = { {1}, {2} };
const std::vector<std::vector<ptrdiff_t>> padBegins_brgemm_1x1_1d = { {0}};
const std::vector<std::vector<ptrdiff_t>> padEnds_brgemm_1x1_1d = { {0} };
const std::vector<SizeVector> dilations_brgemm_1x1_1d = { {1}, {2} };
/* ============= GroupConvolution params (brgemm_1x1_2D) ============= */
const std::vector<SizeVector> kernels_brgemm_1x1_2d = {{1, 1}};
const std::vector<SizeVector> strides_brgemm_1x1_2d = {{1, 1}, {2, 2}};
const std::vector<std::vector<ptrdiff_t>> padBegins_brgemm_1x1_2d = {{0, 0}};
const std::vector<std::vector<ptrdiff_t>> padEnds_brgemm_1x1_2d = {{0, 0}};
const std::vector<SizeVector> dilations_brgemm_1x1_2d = {{1, 1}, {2, 2}};
/* ============= GroupConvolution params (brgemm_1x1_3D) ============= */
const std::vector<SizeVector> kernels_brgemm_1x1_3d = {{1, 1, 1}};
const std::vector<SizeVector> strides_brgemm_1x1_3d = {{1, 1, 1}, {2, 2, 2}};
const std::vector<std::vector<ptrdiff_t>> padBegins_brgemm_1x1_3d = {{0, 0, 0}};
const std::vector<std::vector<ptrdiff_t>> padEnds_brgemm_1x1_3d = {{0, 0, 0}};
const std::vector<SizeVector> dilations_brgemm_1x1_3d = {{1, 1, 1}, {2, 2, 2}};
/* ============= */
const SizeVector numGroups_brgemm_1x1_Blocked = {2};
/* ============= GroupConvolution (brgemm_1x1 1D) ============= */
const auto groupConvParams_ExplicitPadding_brgemm_1x1_1D = ::testing::Combine(
::testing::ValuesIn(kernels_brgemm_1x1_1d),
::testing::ValuesIn(strides_brgemm_1x1_1d),
::testing::ValuesIn(padBegins_brgemm_1x1_1d),
::testing::ValuesIn(padEnds_brgemm_1x1_1d),
::testing::ValuesIn(dilations_brgemm_1x1_1d),
::testing::ValuesIn(numOutChannels_Blocked),
::testing::ValuesIn(numGroups_brgemm_1x1_Blocked),
::testing::Values(ngraph::op::PadType::EXPLICIT)
);
const std::vector<CPUSpecificParams> CPUParams_brgemm_1x1_1D_BF16 = {
conv_avx512_1D_1x1_nspc_brgconv,
};
const std::vector<CPUSpecificParams> CPUParams_brgemm_1x1_1D_FP32 = {
conv_avx512_1D_1x1_nspc_brgconv,
};
std::vector<InputShape> inputShapes_brgemm_1x1_1d = {
{{}, {{ 2, 64, 7 }}},
{
//dynamic shapes
{-1, 64, {1, 200}},
{ //target static shapes
{ 2, 64, 7 },
{ 1, 64, 9 }
}
},
{
//dynamic shapes
{ {-1, 64, -1} },
{ //target static shapes
{ 2, 64, 7 },
{ 1, 64, 14 }
}
}
};
INSTANTIATE_TEST_SUITE_P(smoke_GroupConv_brgemm_1x1_1D_FP32, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_1x1_1D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_1x1_1d),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDevice(CPUParams_brgemm_1x1_1D_FP32)),
::testing::ValuesIn(fusingParamsSet),
::testing::Values(cpuEmptyPluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
INSTANTIATE_TEST_SUITE_P(smoke_GroupConv_brgemm_1x1_1D_FP32_fusingBias, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_1x1_1D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_1x1_1d),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDevice(CPUParams_brgemm_1x1_1D_FP32)),
::testing::Values(fusingAddPerChannel),
::testing::Values(cpuEmptyPluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
INSTANTIATE_TEST_SUITE_P(smoke_GroupConv_brgemm_1x1_1D_BF16, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_1x1_1D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_1x1_1d),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDeviceSupportBF16(CPUParams_brgemm_1x1_1D_BF16)),
::testing::ValuesIn(fusingParamsSetBF16),
::testing::Values(cpuBF16PluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
/* ============= GroupConvolution (brgemm_1x1_2D) ============= */
const auto groupConvParams_ExplicitPadding_brgemm_1x1_2D = ::testing::Combine(
::testing::ValuesIn(kernels_brgemm_1x1_2d),
::testing::ValuesIn(strides_brgemm_1x1_2d),
::testing::ValuesIn(padBegins_brgemm_1x1_2d),
::testing::ValuesIn(padEnds_brgemm_1x1_2d),
::testing::ValuesIn(dilations_brgemm_1x1_2d),
::testing::ValuesIn(numOutChannels_Blocked),
::testing::ValuesIn(numGroups_brgemm_1x1_Blocked),
::testing::Values(ngraph::op::PadType::EXPLICIT)
);
const std::vector<CPUSpecificParams> CPUParams_brgemm_1x1_2D_FP32 = {
conv_avx512_2D_1x1_nspc_brgconv
};
const std::vector<CPUSpecificParams> CPUParams_brgemm_1x1_2D_BF16 = {
conv_avx512_2D_1x1_nspc_brgconv,
conv_avx512_2D_1x1_nspc_brgconv_amx
};
std::vector<InputShape> inputShapes_brgemm_1x1_2d = {
{{}, {{ 1, 64, 7, 7 }}},
{
//dynamic shapes
{-1, 64, -1, {1, 200}},
{ //target static shapes
{ 2, 64, 7, 7 },
{ 1, 64, 9, 9 }
}
}
};
INSTANTIATE_TEST_SUITE_P(smoke_GroupConv_brgemm_1x1_2D_FP32, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_1x1_2D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_1x1_2d),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDevice(CPUParams_brgemm_1x1_2D_FP32)),
::testing::ValuesIn(fusingParamsSet),
::testing::Values(cpuEmptyPluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
std::vector<InputShape> inputShapes_brgemm_1x1_2d_dynBatch = {
{
//dynamic shapes
{ {1, 10}, 64, {7, 9}, {7, 9}},
{ //target static shapes
{ 2, 64, 7, 7 },
{ 1, 64, 9, 9 },
{ 3, 64, 9, 9 }
}
}
};
INSTANTIATE_TEST_SUITE_P(nightly_GroupConv_brgemm_1x1_2D_FP32_dynBatch, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_1x1_2D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_1x1_2d_dynBatch),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDevice(CPUParams_brgemm_1x1_2D_FP32)),
::testing::ValuesIn(fusingParamsSet),
::testing::Values(cpuEmptyPluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
std::vector<InputShape> inputShapes_brgemm_1x1_2d_cache = {
{
//dynamic shapes
{-1, 64, -1, {1, 200}},
{ //target static shapes
{ 1, 64, 7, 7 },
{ 1, 64, 9, 9 },
{ 1, 64, 7, 7 },
}
}
};
INSTANTIATE_TEST_SUITE_P(nightly_GroupConv_brgemm_1x1_2D_FP32, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_1x1_2D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_1x1_2d_cache),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDevice(CPUParams_brgemm_1x1_2D_FP32)),
::testing::ValuesIn(fusingParamsSet),
::testing::Values(cpuEmptyPluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
INSTANTIATE_TEST_SUITE_P(smoke_GroupConv_brgemm_1x1_2D_BF16, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_1x1_2D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_1x1_2d),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDeviceSupportBF16(CPUParams_brgemm_1x1_2D_BF16)),
::testing::ValuesIn(fusingParamsSetBF16),
::testing::Values(cpuBF16PluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
/* ============= GroupConvolution (brgemm_1x1_3D) ============= */
const auto groupConvParams_ExplicitPadding_brgemm_1x1_3D = ::testing::Combine(
::testing::ValuesIn(kernels_brgemm_1x1_3d),
::testing::ValuesIn(strides_brgemm_1x1_3d),
::testing::ValuesIn(padBegins_brgemm_1x1_3d),
::testing::ValuesIn(padEnds_brgemm_1x1_3d),
::testing::ValuesIn(dilations_brgemm_1x1_3d),
::testing::ValuesIn(numOutChannels_Blocked),
::testing::ValuesIn(numGroups_brgemm_1x1_Blocked),
::testing::Values(ngraph::op::PadType::EXPLICIT)
);
const std::vector<CPUSpecificParams> CPUParams_brgemm_1x1_3D_FP32 = {
conv_avx512_3D_1x1_nspc_brgconv,
};
const std::vector<CPUSpecificParams> CPUParams_brgemm_1x1_3D_BF16 = {
conv_avx512_3D_1x1_nspc_brgconv,
conv_avx512_3D_1x1_nspc_brgconv_amx,
};
std::vector<InputShape> inputShapes_brgemm_1x1_3d = {
{{}, {{ 1, 64, 7, 7, 7 }}},
{
//dynamic shapes
{-1, 64, -1, {1, 200}, -1},
{ //target static shapes
{ 2, 64, 7, 7, 7 },
{ 1, 64, 9, 9, 9 }
}
}
};
INSTANTIATE_TEST_SUITE_P(smoke_GroupConv_brgemm_1x1_3D_FP32, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_1x1_3D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_1x1_3d),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDevice(CPUParams_brgemm_1x1_3D_FP32)),
::testing::ValuesIn(fusingParamsSet),
::testing::Values(cpuEmptyPluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
INSTANTIATE_TEST_SUITE_P(smoke_GroupConv_brgemm_1x1_3D_BF16, GroupConvolutionLayerCPUTest,
::testing::Combine(
::testing::Combine(
groupConvParams_ExplicitPadding_brgemm_1x1_3D,
::testing::Values(ElementType::f32),
::testing::Values(ElementType::undefined),
::testing::Values(ElementType::undefined),
::testing::ValuesIn(inputShapes_brgemm_1x1_3d),
::testing::Values(CommonTestUtils::DEVICE_CPU)),
::testing::ValuesIn(filterCPUInfoForDeviceSupportBF16(CPUParams_brgemm_1x1_3D_BF16)),
::testing::ValuesIn(fusingParamsSetBF16),
::testing::Values(cpuBF16PluginConfig)),
GroupConvolutionLayerCPUTest::getTestCaseName);
/* ============= GroupConvolution (1D) ============= */
const auto groupConvParams_ExplicitPadding_1D = ::testing::Combine(
::testing::ValuesIn(kernels1d),
@ -981,6 +1584,7 @@ std::vector<groupConvLayerCPUTestParamsSet> generateSingleGroupConvCPUTestCases(
const VecConfigRelatedParams vecPrcConnectParamsFP32 = {ConfigRelatedParams{cpuEmptyPluginConfig, fusingParamsSet}};
const VecConfigRelatedParams vecPrcConnectParams = {ConfigRelatedParams{cpuEmptyPluginConfig, fusingParamsSet},
ConfigRelatedParams{cpuBF16PluginConfig, fusingParamsSetBF16}};
const VecConfigRelatedParams vecPrcConnectParamsBF16 = {ConfigRelatedParams{cpuBF16PluginConfig, fusingParamsSetBF16}};
const VecConfigRelatedParams vecPrcConnectParamsFP32Default = {ConfigRelatedParams{cpuEmptyPluginConfig, VecFusingParams{emptyFusingSpec}}};
const VecConfigRelatedParams vecPrcConnectParamsDefault = {ConfigRelatedParams{cpuEmptyPluginConfig, VecFusingParams{emptyFusingSpec}},
@ -1266,6 +1870,30 @@ INSTANTIATE_TEST_SUITE_P(smoke_JIT_AVX512_DW_GroupConv, GroupConvolutionLayerCPU
/* ============= JIT AVX5122 PLANAR Convolution (not supported with groups) ============= */
/* ============================================= */
/* ============= brgemm GroupConvolution test, expect fallback to other implementation ============= */
const std::vector<CPUSpecificParams> CPUParams_Fallback_Brgemm_2D = {
conv_avx512_2D_nspc_brgconv,
conv_avx512_2D_nspc_brgconv_amx
};
const std::vector<CPUSpecificParams> CPUParams_Fallback_Brgemm_1D_Small_Shape = {
conv_avx512_1D_nspc_brgconv_amx
};
const std::vector<groupConvLayerCPUTestParamsSet> BRGEMM_EXPECT_FALLBACK_GroupConvTestCases = generateSingleGroupConvCPUTestCases(
// channel <= 16
// https://github.com/openvinotoolkit/oneDNN/blob/6df930dab5ab0a7dfaea6100acd03b479e2fa0a8/src/cpu/x64/jit_brgemm_conv_utils.cpp#L1712
makeSingleGroupConvCPUTestCases({3, 3}, {1, 1}, {1, 1}, {0, 0}, {0, 0}, ngraph::op::PadType::EXPLICIT,
4, 1, {5, 5}, 16, 16, CPUParams_Fallback_Brgemm_2D, vecPrcConnectParamsFP32),
// small shape on amx
// https://github.com/openvinotoolkit/oneDNN/blob/6df930dab5ab0a7dfaea6100acd03b479e2fa0a8/src/cpu/x64/jit_brgemm_conv_utils.cpp#L1719
makeSingleGroupConvCPUTestCases({3}, {1}, {1}, {0}, {0}, ngraph::op::PadType::EXPLICIT,
4, 1, {3}, 32, 32, CPUParams_Fallback_Brgemm_1D_Small_Shape, vecPrcConnectParamsBF16)
);
INSTANTIATE_TEST_SUITE_P(smoke_BRGEMM_EXPECT_FALLBACK_GroupConv, ExpectFallbackGroupConvolutionLayerCPUTest, ::testing::ValuesIn(filterParamsSetForDevice
(BRGEMM_EXPECT_FALLBACK_GroupConvTestCases)), ExpectFallbackGroupConvolutionLayerCPUTest::getTestCaseName);
/* ============= brgemm GroupConvolution test, expect fallback to other implementation, end ============= */
} // namespace
} // namespace CPULayerTestsDefinitions

View File

@ -110,6 +110,8 @@ namespace CPUTestUtils {
const auto conv_avx512_2D_1x1_nspc = CPUSpecificParams{{nhwc}, {nhwc}, {"jit_avx512_1x1"}, "jit_avx512_1x1"};
const auto conv_avx512_2D_1x1_nspc_brgconv = CPUSpecificParams{{nhwc}, {nhwc}, {"brgconv_avx512_1x1"}, "brgconv_avx512_1x1"};
const auto conv_avx512_2D_1x1_nspc_brgconv_amx = CPUSpecificParams{{nhwc}, {nhwc}, {"brgconv_avx512_amx_1x1"}, "brgconv_avx512_amx_1x1"};
const auto conv_avx512_3D_1x1_nspc_brgconv = CPUSpecificParams{{ndhwc}, {ndhwc}, {"brgconv_avx512_1x1"}, "brgconv_avx512_1x1"};
const auto conv_avx512_3D_1x1_nspc_brgconv_amx = CPUSpecificParams{{ndhwc}, {ndhwc}, {"brgconv_avx512_amx_1x1"}, "brgconv_avx512_amx_1x1"};
const auto conv_winograd = CPUSpecificParams{{nChw16c}, {nChw16c}, {"jit_avx512_winograd"}, "jit_avx512_winograd"};
} // namespace CPUTestUtils