* 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>
10 KiB
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.suffixwheresuffixis a unique string identifier. The device name can be passed to all methods of theov::Coreclass that work with devices, for exampleov::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_propertyov::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_modelto load the network to a specific device.ov::Core::get_propertyto get common or device specific properties.- All other methods of the
ov::Coreclass that acceptdeviceName.
ov::Core methods
ov::Core methods like:
ov::Core::compile_modelov::Core::import_modelov::Core::query_modelov::Core::query_modelov::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
HETEROdevice 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_propertymethod:
@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:
- ie_api.IECore.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 IECore class that work with devices, for example ie_api.IECore.load_network.
- ie_api.ieCore.get_property - Provides information about specific device.
- ie_api.IECore.get_config - Gets the current value of a specific configuration key.
- ie_api.IECore.set_config - Sets a new value for the configuration key.
The ie_api.CompiledModel class is also extended to support the Properties API:
- ie_api.CompiledModel.get_property
- ie_api.CompiledModel.get_config
- There is no method to call for set_config, but the equivalent action is described below.
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_networkto load the network to a specific device.IECore.get_propertyto get common or device specific properties.- All other methods of the
IECoreclass 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.