From e49b2c05f12bfa55ce26846c088f4c07687dc2c3 Mon Sep 17 00:00:00 2001 From: Maxim Vafin Date: Mon, 14 Aug 2023 18:56:06 +0200 Subject: [PATCH] [PT FE] Fix behavior of convert_partially method to align with new description (#19147) * [PT FE] Fix behaivior of convert_partially method to align with new description * Simplify * Do not add a message to exception of get_converted_model * Update src/frontends/pytorch/src/frontend.cpp * Supress normalize exception only when model is valid * Create TranslateSession in own scope --- src/frontends/pytorch/src/frontend.cpp | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/frontends/pytorch/src/frontend.cpp b/src/frontends/pytorch/src/frontend.cpp index 2ddf81670c0..57b64322f73 100644 --- a/src/frontends/pytorch/src/frontend.cpp +++ b/src/frontends/pytorch/src/frontend.cpp @@ -119,8 +119,13 @@ FrontEnd::FrontEnd() { } } -std::shared_ptr FrontEnd::convert(const InputModel::Ptr& model) const { - auto converted_model = convert_partially(model); +std::shared_ptr FrontEnd::convert(const ov::frontend::InputModel::Ptr& model) const { + FRONT_END_GENERAL_CHECK(std::dynamic_pointer_cast(model), "Invalid input model"); + std::shared_ptr converted_model; + { + TranslateSession translate_session(model, m_op_translators, m_telemetry); + converted_model = translate_session.get_converted_model(); + } std::string norm_err; try { @@ -146,14 +151,19 @@ void FrontEnd::convert(const std::shared_ptr& partiallyConverted) const { std::shared_ptr FrontEnd::convert_partially(const ov::frontend::InputModel::Ptr& model) const { FRONT_END_GENERAL_CHECK(std::dynamic_pointer_cast(model), "Invalid input model"); - try { + std::shared_ptr partial_model; + { TranslateSession translate_session(model, m_op_translators, m_telemetry); - return translate_session.get_converted_model(); - } catch (const std::runtime_error& e) { - std::cerr << "[ ERROR ] Unexpected error while converting pytorch model: " << e.what() << '\n'; - std::cerr << "Rethrowing. Misleading error message from pybind11 may come next. TODO."; - throw; + partial_model = translate_session.get_converted_model(); } + try { + normalize(partial_model); + } catch (...) { + // normalize can fail on transformation, but the model is still valid. We can return such model. + // If model can be validated we suppress normalize exception. + partial_model->validate_nodes_and_infer_types(); + } + return partial_model; } std::shared_ptr FrontEnd::decode(const InputModel::Ptr& model) const {