Removed redundant evaluate methods (#8283)

* Removed redundant evaluate methods

* Added If to eval map

* Disable unsupported test cases
This commit is contained in:
Ilya Churaev authored and GitHub committed 2021-11-01 09:08:32 +03:00
1 parent 3775efd54a
commit 94206b9e2d
12 files changed
+46 -179

No files matched your search

@@ -18,7 +18,8 @@ using namespace testing;
using namespace std;
using namespace ngraph;
TEST(TransformationTests, if_constant_folding) {
// If doesn't have evaluate methods
TEST(TransformationTests, DISABLED_if_constant_folding) {
std::shared_ptr<ngraph::Function> fun(nullptr);
{
auto cond = std::make_shared<ngraph::opset5::Constant>(element::boolean, Shape{ 1 }, false);
@@ -155,12 +155,6 @@ public:
void validate_and_infer_types() override;
OPENVINO_SUPPRESS_DEPRECATED_START
bool evaluate(const HostTensorVector& outputs, const HostTensorVector& inputs) const override;
OPENVINO_SUPPRESS_DEPRECATED_END
bool has_evaluate() const override;
std::shared_ptr<Node> clone_with_new_inputs(const OutputVector& new_args) const override;
bool get_bilinear_interpolation_pad() const {
-5
View File
@@ -79,11 +79,6 @@ public:
const std::shared_ptr<v0::Result>& else_result);
void validate_and_infer_types() override;
OPENVINO_SUPPRESS_DEPRECATED_START
bool evaluate(const HostTensorVector& outputs, const HostTensorVector& inputs) const override;
OPENVINO_SUPPRESS_DEPRECATED_END
bool has_evaluate() const override;
private:
using OutputMap = std::map<int64_t, std::shared_ptr<MultiSubGraphOp::OutputDescription>>;
@@ -277,9 +277,23 @@ public:
/// \brief Get number of internal sub-graphs
///
/// \return Number of sub-graphs.
virtual size_t get_num_internal_subgraphs() const {
virtual size_t get_internal_subgraphs_size() const {
return m_bodies.size();
}
///
/// \brief Get number of input descriptions
///
/// \return Number of input descriptions
virtual size_t get_input_descriptions_size() const {
return m_input_descriptions.size();
}
///
/// \brief Get number of output descriptions
///
/// \return Number of output descriptions
virtual size_t get_output_descriptions_size() const {
return m_output_descriptions.size();
}
MultiSubGraphOp(const MultiSubGraphOp&) = delete;
MultiSubGraphOp(MultiSubGraphOp&&) = default;
@@ -176,157 +176,6 @@ std::shared_ptr<Node> op::v8::DeformableConvolution::clone_with_new_inputs(const
}
}
namespace deformable_convolution {
namespace {
template <element::Type_t ET>
inline bool evaluate(const HostTensorVector& inputs,
const HostTensorPtr& out,
const Strides& strides,
const CoordinateDiff& pads_begin,
const CoordinateDiff& pads_end,
const Strides& dilations,
const ngraph::op::PadType& auto_pad,
const int64_t group,
const int64_t deformable_group,
const bool use_bilinear_interpolation_padding) {
using T = typename element_type_traits<ET>::value_type;
if (inputs.size() == 3) {
runtime::reference::deformable_convolution<T>(inputs[0]->get_data_ptr<ET>(),
inputs[1]->get_data_ptr<ET>(),
inputs[2]->get_data_ptr<ET>(),
out->get_data_ptr<ET>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
inputs[2]->get_shape(),
out->get_shape(),
strides,
dilations,
pads_begin,
pads_end,
group,
deformable_group,
use_bilinear_interpolation_padding);
} else if (inputs.size() == 4) {
runtime::reference::deformable_convolution<T>(inputs[0]->get_data_ptr<ET>(),
inputs[1]->get_data_ptr<ET>(),
inputs[2]->get_data_ptr<ET>(),
inputs[3]->get_data_ptr<ET>(),
out->get_data_ptr<ET>(),
inputs[0]->get_shape(),
inputs[1]->get_shape(),
inputs[2]->get_shape(),
inputs[3]->get_shape(),
out->get_shape(),
strides,
dilations,
pads_begin,
pads_end,
group,
deformable_group,
use_bilinear_interpolation_padding);
}
return true;
}
bool evaluate_deformable_convolution(const HostTensorVector& inputs,
const HostTensorPtr& out,
const Strides& strides,
const Strides& dilations,
const CoordinateDiff& pads_begin,
const CoordinateDiff& pads_end,
const ngraph::op::PadType& auto_pad,
const int64_t group,
const int64_t deformable_group,
const bool use_bilinear_interpolation_padding) {
bool rc = true;
switch (inputs[0]->get_element_type()) {
NGRAPH_TYPE_CASE(evaluate_deformable_convolution,
f32,
inputs,
out,
strides,
pads_begin,
pads_end,
dilations,
auto_pad,
group,
deformable_group,
use_bilinear_interpolation_padding);
NGRAPH_TYPE_CASE(evaluate_deformable_convolution,
f16,
inputs,
out,
strides,
pads_begin,
pads_end,
dilations,
auto_pad,
group,
deformable_group,
use_bilinear_interpolation_padding);
NGRAPH_TYPE_CASE(evaluate_deformable_convolution,
i32,
inputs,
out,
strides,
pads_begin,
pads_end,
dilations,
auto_pad,
group,
deformable_group,
use_bilinear_interpolation_padding);
NGRAPH_TYPE_CASE(evaluate_deformable_convolution,
i16,
inputs,
out,
strides,
pads_begin,
pads_end,
dilations,
auto_pad,
group,
deformable_group,
use_bilinear_interpolation_padding);
default:
rc = false;
break;
}
return rc;
}
} // namespace
} // namespace deformable_convolution
bool op::v8::DeformableConvolution::evaluate(const HostTensorVector& outputs, const HostTensorVector& inputs) const {
NGRAPH_OP_SCOPE(DeformableConvolution_v8_evaluate);
deformable_convolution::evaluate_deformable_convolution(inputs,
outputs[0],
get_strides(),
get_dilations(),
get_pads_begin(),
get_pads_end(),
get_auto_pad(),
get_group(),
get_deformable_group(),
get_bilinear_interpolation_pad());
return true;
}
bool op::v8::DeformableConvolution::has_evaluate() const {
NGRAPH_OP_SCOPE(DeformableConvolution_v8_has_evaluate);
switch (get_input_element_type(0)) {
case ngraph::element::f16:
case ngraph::element::i16:
case ngraph::element::i32:
case ngraph::element::f32:
return true;
default:
break;
}
return false;
}
op::v1::DeformableConvolution::DeformableConvolution(const Output<Node>& arg,
const Output<Node>& offsets,
const Output<Node>& filters,
-11
View File
@@ -220,17 +220,6 @@ op::v8::If::OutputMap op::v8::If::get_mapping_outputs_on_body_description(
return outputs_map;
}
bool op::v8::If::evaluate(const HostTensorVector& outputs, const HostTensorVector& inputs) const {
NGRAPH_OP_SCOPE(v8_If_evaluate);
ngraph::runtime::reference::if_reference(m_bodies, m_output_descriptions, m_input_descriptions, outputs, inputs);
return true;
}
bool op::v8::If::has_evaluate() const {
NGRAPH_OP_SCOPE(v8_If_has_evaluate);
return true;
}
void op::v8::If::set_input(const Output<Node>& value,
const std::shared_ptr<v0::Parameter>& then_parameter,
const std::shared_ptr<v0::Parameter>& else_parameter) {
+1 -1
View File
@@ -46,7 +46,7 @@ bool ov::pass::ConstantFolding::run_on_function(std::shared_ptr<ov::Function> f)
} else {
// recursively constant fold operators containing subgraphs (ie: TensorIterator, Loop)
if (auto sub_graph_node = std::dynamic_pointer_cast<ngraph::op::util::MultiSubGraphOp>(node)) {
size_t sub_graphs_num = sub_graph_node->get_num_internal_subgraphs();
size_t sub_graphs_num = sub_graph_node->get_internal_subgraphs_size();
for (size_t sub_graph_ind = 0; sub_graph_ind < sub_graphs_num; ++sub_graph_ind) {
rewritten |= run_on_function(sub_graph_node->get_function(sub_graph_ind));
}
+2 -2
View File
@@ -162,7 +162,7 @@ bool convert_precision(pass::PassBase& pass,
pass.transformation_callback(node);
// Recursively apply transformation for sub-graph based operations
if (auto sub_graph_node = std::dynamic_pointer_cast<op::util::MultiSubGraphOp>(node)) {
size_t sub_graphs_num = sub_graph_node->get_num_internal_subgraphs();
size_t sub_graphs_num = sub_graph_node->get_internal_subgraphs_size();
for (size_t sub_graph_ind = 0; sub_graph_ind < sub_graphs_num; ++sub_graph_ind) {
is_changed |= convert_function_precision(sub_graph_node->get_function(sub_graph_ind), true);
}
@@ -228,7 +228,7 @@ precisions_set_t find_all_used_precisions(const std::shared_ptr<ngraph::Function
used_precisions.emplace(output.get_element_type());
}
if (auto sub_graph_node = std::dynamic_pointer_cast<ngraph::op::util::MultiSubGraphOp>(node)) {
size_t sub_graphs_num = sub_graph_node->get_num_internal_subgraphs();
size_t sub_graphs_num = sub_graph_node->get_internal_subgraphs_size();
for (size_t sub_graph_ind = 0; sub_graph_ind < sub_graphs_num; ++sub_graph_ind) {
auto sub_graph_precisions = find_all_used_precisions(sub_graph_node->get_function(sub_graph_ind));
used_precisions.insert(sub_graph_precisions.begin(), sub_graph_precisions.end());
+1 -1
View File
@@ -173,7 +173,7 @@ bool ov::pass::GraphRewrite::apply_matcher_passes(std::shared_ptr<Function> f,
// Recursive apply Matchers for sub-graph based nodes
if (auto sub_graph_node = std::dynamic_pointer_cast<ngraph::op::util::MultiSubGraphOp>(node)) {
size_t sub_graphs_num = sub_graph_node->get_num_internal_subgraphs();
size_t sub_graphs_num = sub_graph_node->get_internal_subgraphs_size();
for (size_t sub_graph_ind = 0; sub_graph_ind < sub_graphs_num; ++sub_graph_ind) {
auto sub_graph = sub_graph_node->get_function(sub_graph_ind);
run_on_function(sub_graph);
@@ -44,6 +44,7 @@
#include <ngraph/runtime/reference/group_convolution_backprop_data.hpp>
#include <ngraph/runtime/reference/gru_cell.hpp>
#include <ngraph/runtime/reference/hard_sigmoid.hpp>
#include <ngraph/runtime/reference/if.hpp>
#include <ngraph/runtime/reference/log_softmax.hpp>
#include <ngraph/runtime/reference/lrn.hpp>
#include <ngraph/runtime/reference/lstm_cell.hpp>
@@ -421,6 +422,24 @@ bool evaluate(const shared_ptr<op::v0::CumSum>& op, const HostTensorVector& outp
return true;
}
template <element::Type_t ET>
bool evaluate(const shared_ptr<op::v8::If>& op, const HostTensorVector& outputs, const HostTensorVector& inputs) {
std::vector<std::shared_ptr<Function>> bodies;
for (size_t i = 0; i < op->get_internal_subgraphs_size(); i++) {
bodies.emplace_back(op->get_function(i));
}
std::vector<ov::op::util::MultiSubGraphOp::MultiSubgraphInputDescriptionVector> in_descs;
for (size_t i = 0; i < op->get_input_descriptions_size(); i++) {
in_descs.emplace_back(op->get_input_descriptions(i));
}
std::vector<ov::op::util::MultiSubGraphOp::MultiSubgraphOutputDescriptionVector> out_descs;
for (size_t i = 0; i < op->get_output_descriptions_size(); i++) {
out_descs.emplace_back(op->get_output_descriptions(i));
}
runtime::reference::if_reference(bodies, out_descs, in_descs, outputs, inputs);
return true;
}
namespace embedding_offsets_sum_v3 {
template <element::Type_t t1, element::Type_t t2>
inline void evaluate(const shared_ptr<op::v3::EmbeddingSegmentsSum>& op,
@@ -104,3 +104,5 @@ NGRAPH_OP(Gather, op::v8)
NGRAPH_OP(MatrixNms, op::v8)
NGRAPH_OP(MulticlassNms, op::v8)
NGRAPH_OP(Slice, op::v8)
NGRAPH_OP(DeformableConvolution, ngraph::op::v8)
NGRAPH_OP(If, ngraph::op::v8)
@@ -69,6 +69,10 @@ INTERPRETER.onnx_model_dequantize_linear_1d_zero_scale_int8
INTERPRETER.onnx_model_dequantize_linear_1d_zero_scale_int8_4d
INTERPRETER.onnx_model_dequantize_linear_1d_zero_scale_uint8_negative_axis
# If doesn't have evaluate method and we cannot infer it
INTERPRETER.onnx_if_inside_if
INTERPRETER.onnx_if_inside_loop
# Legacy tests with unsupported features from opset4 LSTM/GRU/RNN
# Peepholes input unsupported
onnx_model_lstm_fwd_with_clip_peepholes