[FIX][CPU] Convert CF: added convert childs number check (#19022)

* [FIX][CPU] Convert CF: added convert childs number check

* code style fix

* WIP: [CPU][TESTS] Convert CF: Added subgraph test with two outputs for Convert node

* MatMulDecompressConvertTest refactoring + instances fixes

* removed KeepConstAndDecompressionForMatMul pass and added cpu callback for KeepConstAndDecompression

* MatMulDecompressConvertTest2: added graphs and small problem description

* small review fix
This commit is contained in:
Anton Voronov authored and GitHub committed 2023-08-11 12:10:00 +04:00
1 parent 85609d4881
commit 2a3132941c
4 files changed
+208 -97

No files matched your search

@@ -14,7 +14,6 @@ namespace pass {
class TRANSFORMATIONS_API EnableDecompressionConvertConstantFolding;
class TRANSFORMATIONS_API DisableDecompressionConvertConstantFolding;
class TRANSFORMATIONS_API KeepConstAndDecompression;
class TRANSFORMATIONS_API KeepConstAndDecompressionForMatMul;
} // namespace pass
} // namespace ov
@@ -48,14 +47,3 @@ public:
OPENVINO_RTTI("KeepConstAndDecompression", "0");
KeepConstAndDecompression();
};
/**
* @ingroup ie_transformation_common_api
* @brief Disables ConstantFolding for Convert operation (just before MatMul operation only) and prevents conversion
* of f16 Consts to f32.
*/
class ov::pass::KeepConstAndDecompressionForMatMul : public MatcherPass {
public:
OPENVINO_RTTI("KeepConstAndDecompressionForMatMul", "0");
KeepConstAndDecompressionForMatMul();
};
@@ -59,6 +59,10 @@ pass::KeepConstAndDecompression::KeepConstAndDecompression() {
ov::is_shape_subgraph(node->shared_from_this()))
return false;
if (transformation_callback(node)) {
return false;
}
disable_constant_folding(node);
if (!is_type<ov::op::v0::Constant>(node->input_value(0).get_node_shared_ptr()))
@@ -70,28 +74,3 @@ pass::KeepConstAndDecompression::KeepConstAndDecompression() {
auto m = std::make_shared<pattern::Matcher>(node_pattern, matcher_name);
register_matcher(m, callback);
}
pass::KeepConstAndDecompressionForMatMul::KeepConstAndDecompressionForMatMul() {
MATCHER_SCOPE(KeepConstAndDecompressionForMatMul);
auto matmul = pass::pattern::wrap_type<ov::op::v0::MatMul>();
matcher_pass_callback callback = [=](pass::pattern::Matcher& m) {
auto node = m.get_match_root();
// input to matmul is decompression Convert
const auto& inp_convert = node->input_value(1).get_node_shared_ptr();
if (!is_type<ov::op::v0::Convert>(inp_convert) || !is_decompression(inp_convert))
return false;
disable_constant_folding(inp_convert);
if (!is_type<ov::op::v0::Constant>(inp_convert->input_value(0).get_node_shared_ptr()))
return false;
enable_keep_fp16_const(inp_convert->input_value(0).get_node_shared_ptr());
return false;
};
auto m = std::make_shared<pass::pattern::Matcher>(matmul, matcher_name);
this->register_matcher(m, callback);
}