Model Creation in OpenVINO™ Runtime

OpenVINO™ Runtime with API 2.0 includes the nGraph engine as a common part. The ngraph namespace has been changed to ov, but all other parts of the ngraph API have been preserved.

The code snippets below show how to change the application code for migration to API 2.0.

nGraph API

# _____________    _____________
# | Parameter |    | Parameter |
# |   data1   |    |   data2   |
# |___________|    |___________|
#         |            |
#         |            |
#          \          /
#           \        /
#            \      /
#         ____\____/____
#         |   Concat   |
#         |   concat   |
#         |____________|
#               |
#               |
#               |
#        _______|_______
#        |    Result   |
#        |    result   |
#        |_____________|

import ngraph as ng
import numpy as np


data1 = ng.opset8.parameter([1, 3, 2, 2], np.int64)
data1.friendly_name = "data1" # operation name
data2 = ng.opset8.parameter([1, 2, 2, 2], np.int64)
data2.friendly_name = "data2" # operation name

concat = ng.opset8.concat([data1, data2], 1)
concat.friendly_name = "concat" # operation name

result = ng.opset8.result(concat)
result.friendly_name = "result" # operation name

f = ng.Function(result, [data1, data2], "function_name")
    // _____________    _____________
    // | Parameter |    | Parameter |
    // |   data1   |    |   data2   |
    // |___________|    |___________|
    //         |            |
    // data1_t |            | data2_t
    //          \          /
    //           \        /
    //            \      /
    //         ____\____/____
    //         |   Concat   |
    //         |   concat   |
    //         |____________|
    //               |
    //               | concat_t
    //               |
    //        _______|_______
    //        |    Result   |
    //        |    result   |
    //        |_____________|
    auto data1 = std::make_shared<ov::opset8::Parameter>(ov::element::i64, ov::Shape{1, 3, 2, 2});
    data1->set_friendly_name("data1");        // operation name
    data1->output(0).set_names({"data1_t"});  // tensor names
    auto data2 = std::make_shared<ov::opset8::Parameter>(ov::element::i64, ov::Shape{1, 2, 2, 2});
    data2->set_friendly_name("data2");        // operation name
    data2->output(0).set_names({"data2_t"});  // tensor names

    auto concat = std::make_shared<ov::opset8::Concat>(ov::OutputVector{data1, data2}, 1);
    concat->set_friendly_name("concat");        // operation name
    concat->output(0).set_names({"concat_t"});  // tensor name

    auto result = std::make_shared<ov::opset8::Result>(concat);
    result->set_friendly_name("result");  // operation name

    auto f = std::make_shared<ov::Model>(ov::ResultVector{result}, ov::ParameterVector{data1, data2}, "function_name");

API 2.0

# _____________    _____________
# | Parameter |    | Parameter |
# |   data1   |    |   data2   |
# |___________|    |___________|
#         |            |
# data1_t |            | data2_t
#          \          /
#           \        /
#            \      /
#         ____\____/____
#         |   Concat   |
#         |   concat   |
#         |____________|
#               |
#               | concat_t
#               |
#        _______|_______
#        |    Result   |
#        |    result   |
#        |_____________|

import openvino as ov
import openvino.runtime.opset12 as ops


data1 = ops.parameter([1, 3, 2, 2], ov.Type.i64)
data1.friendly_name = "data1"      # operation name
data1.output(0).name = "data1_t" # tensor name
data2 = ops.parameter([1, 2, 2, 2], ov.Type.i64)
data2.friendly_name = "data2"      # operation name
data2.output(0).name = "data2_t"   # tensor name

concat = ops.concat([data1, data2], 1)
concat.friendly_name = "concat"    # operation name
concat.output(0).name = "concat_t" # tensor name

result = ops.result(concat)
result.friendly_name = "result"    # operation name

model = ov.Model(result, [data1, data2], "model_name")
    // _____________    _____________
    // | Parameter |    | Parameter |
    // |   data1   |    |   data2   |
    // |___________|    |___________|
    //         |            |
    // data1_t |            | data2_t
    //          \          /
    //           \        /
    //            \      /
    //         ____\____/____
    //         |   Concat   |
    //         |   concat   |
    //         |____________|
    //               |
    //               | concat_t
    //               |
    //        _______|_______
    //        |    Result   |
    //        |    result   |
    //        |_____________|
    auto data1 = std::make_shared<ov::opset8::Parameter>(ov::element::i64, ov::Shape{1, 3, 2, 2});
    data1->set_friendly_name("data1");        // operation name
    data1->output(0).set_names({"data1_t"});  // tensor names
    auto data2 = std::make_shared<ov::opset8::Parameter>(ov::element::i64, ov::Shape{1, 2, 2, 2});
    data2->set_friendly_name("data2");        // operation name
    data2->output(0).set_names({"data2_t"});  // tensor names

    auto concat = std::make_shared<ov::opset8::Concat>(ov::OutputVector{data1, data2}, 1);
    concat->set_friendly_name("concat");        // operation name
    concat->output(0).set_names({"concat_t"});  // tensor name

    auto result = std::make_shared<ov::opset8::Result>(concat);
    result->set_friendly_name("result");  // operation name

    auto f = std::make_shared<ov::Model>(ov::ResultVector{result}, ov::ParameterVector{data1, data2}, "function_name");

Additional Resources