Files
openvino/docs/OV_Runtime_UG/PropertiesAPI.md
Ilya Lavrenov 68e873c6c8 Config and hetero (#10555)
* Updated properties documentation

* Fixed doc refernce

* merged snipet files

* fixed build

* Updated Hetero docs

* Self-review

Co-authored-by: Anton Pankratv <anton.pankratov@intel.com>
2022-02-21 16:01:47 +03:00

10 KiB
Raw Blame History

Introduction to OpenVINO™ Device Properties API

OpenVINO™ Properties API (C++)

@sphinxdirective .. raw:: html

<div id="switcher-cpp" class="switcher-anchor">C++</div>

@endsphinxdirective

The OpenVINO™ toolkit supports inferencing with several types of devices (processors or accelerators). This section provides a high-level description of the process of querying of different device properties and configuration values at runtime. Refer to the Hello Query Device С++ Sample sources and the Multi-Device Plugin documentation for examples of using the OpenVINO™ Properties API in user applications.

Using the OpenVINO™ Properties API in Your Code

The ov::Core class provides the following API to query device information, set or get different device configuration properties:

  • ov::Core::get_available_devices - Provides a list of available devices. If there are more than one instance of a specific device, the devices are enumerated with .suffix where suffix is a unique string identifier. The device name can be passed to all methods of the ov::Core class that work with devices, for example ov::Core::compile_model.
  • ov::Core::get_property - Gets the current value of a specific property.
  • ov::Core::set_property - Sets a new value for the property.

The ov::CompiledModel class is also extended to support the Properties API:

  • ov::CompiledModel::get_property
  • ov::CompiledModel::set)property

Properties API in the Core Class

get_available_devices

@snippet snippets/ov_properties_api.cpp part0

The function returns a list of available devices, for example:

MYRIAD.1.2-ma2480
MYRIAD.1.4-ma2480
CPU
GPU.0
GPU.1

Each device name can then be passed to:

  • ov::Core::compile_model to load the network to a specific device.
  • ov::Core::get_property to get common or device specific properties.
  • All other methods of the ov::Core class that accept deviceName.

ov::Core methods

ov::Core methods like:

  • ov::Core::compile_model
  • ov::Core::import_model
  • ov::Core::query_model
  • ov::Core::query_model
  • ov::Core::create_context

accept variadic list of properties as last arguments. Each property in such parameters lists should be used as function call to pass property value with specified property type

@snippet snippets/ov_properties_api.cpp part3

get_property()

For documentation about common configuration keys, refer to openvino/runtime/properties.hpp. Device specific configuration keys can be found in corresponding plugin folders.

  • The code below demonstrates how to query HETERO device priority of devices which will be used to infer the model:

@snippet snippets/ov_properties_api.cpp part1

  • To extract device properties such as available device, device name, supported configuration keys, and others, use the ov::Core::get_property method:

@snippet snippets/ov_properties_api.cpp part2

A returned value appears as follows: Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz.

Note

: All properties have a type, which is specified during property declaration. The list of common device-agnostic properties can be found in openvino/runtime/properties.hpp. Device specific properties (for example, for HDDL or MYRIAD devices) can be found in corresponding plugin folders.

Properties API in the CompiledModel Class

get_property()

The method is used to get configuration values the compiled model has been created with or compiled model specific property such as ov::optimal_number_of_infer_requests:

@snippet snippets/ov_properties_api.cpp part4

Or the current temperature of the MYRIAD device:

@snippet snippets/ov_properties_api.cpp part5

Or the number of threads that would be used for inference in CPU device:

@snippet snippets/ov_properties_api.cpp part6

set_property()

The only device that supports this method is Multi-Device.

OpenVINO™ Properties API (Python)

@sphinxdirective .. raw:: html

<div id="switcher-python" class="switcher-anchor">Python</div>

@endsphinxdirective

This section provides a high-level description of the process of querying of different device properties and configuration values. Refer to the Hello Properties Device Python Sample sources and the Multi-Device Plugin documentation for examples of using the OpenVINO™ Properties API in user applications.

Using the OpenVINO™ Properties API in Your Code

The OpenVINO™ Core class provides the following API to query device information, set or get different device configuration properties:

The ie_api.CompiledModel class is also extended to support the Properties API:

Properties API in the IECore Class

Get Available Devices

from openvino.inference_engine import IECore

ie = IECore()
print(ie.available_devices)

This code prints a list of available devices, for example:

MYRIAD.1.2-ma2480
MYRIAD.1.4-ma2480
FPGA.0
FPGA.1
CPU
GPU.0
GPU.1

Each device name can then be passed to:

  • IECore.load_network to load the network to a specific device.
  • IECore.get_property to get common or device specific properties.
  • All other methods of the IECore class that accept a device name.

Get Metric

To extract device properties such as available device, device name, supported configuration keys, and others, use the IECore.get_property method:

from openvino.inference_engine import IECore

ie = IECore()
ie.get_property(device_name="CPU", property_name="FULL_DEVICE_NAME")

A returned value appears as follows: Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz.

To list all supported properties for a device:

from openvino.inference_engine import IECore

ie = IECore()
ie.get_property(device_name="GPU", property_name="SUPPORTED_METRICS")

Get Configuration

The code below uses the IECore.get_config method and demonstrates how to understand whether the HETERO device dumps .dot files with split graphs during the split stage:

from openvino.inference_engine import IECore

ie = IECore()
ie.get_config(device_name="HETERO", config_name="HETERO_DUMP_GRAPH_DOT")

To list all supported configuration keys for a device:

from openvino.inference_engine import IECore

ie = IECore()
ie.get_property(device_name=device, property_name="SUPPORTED_CONFIG_KEYS")

For documentation about common configuration keys, refer to ie_plugin_config.hpp. Device specific configuration keys can be found in corresponding plugin folders.

Properties API in the CompiledModel Class

Get Metric

To get the name of the loaded network:

from openvino.inference_engine import IECore

ie = IECore()
net = ie.read_network(model=path_to_xml_file)
exec_net = ie.load_network(network=net, device_name=device)
exec_net.get_property("NETWORK_NAME")

Use exec_net.get_property("SUPPORTED_METRICS") to list all supported properties for an CompiledModel instance.

Get Configuration

The IECore.get_config method is used to get information about configuration values the compiled model has been created with:

from openvino.inference_engine import IECore

ie = IECore()
net = ie.read_network(model=path_to_xml_file)
exec_net = ie.load_network(network=net, device_name="CPU")
exec_net.get_config("CPU_THREADS_NUM")

Or the current temperature of MYRIAD device:

from openvino.inference_engine import IECore

ie = IECore()
net = ie.read_network(model=path_to_xml_file)
exec_net = ie.load_network(network=net, device_name="MYRIAD")
exec_net.get_config("DEVICE_THERMAL")

Use exec_net.get_property("SUPPORTED_CONFIG_KEYS") to list all supported configuration keys.

Set Configuration

The only device that supports this method in the CompiledModel class is the Multi-Device, where you can change the priorities of the devices for the Multi plugin in real time: exec_net.set_config({{"MULTI_DEVICE_PRIORITIES", "GPU,CPU"}}). See the Multi-Device documentation for more details.