Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DOCS] ARM CPU plugin docs #10885

Merged
merged 19 commits into from
Mar 15, 2022
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ Jenkinsfile @openvinotoolkit/openvino-admins
/src/plugins/intel_gna/ @openvinotoolkit/openvino-ie-gna-maintainers
/src/inference/include/ie/gna/ @openvinotoolkit/openvino-ie-gna-maintainers

# IE ARM CPU:
/docs/OV_Runtime_UG/supported_plugins/ARM_CPU.md @openvinotoolkit/openvino_contrib-arm_plugin-maintainers

# IE Auto (MULTI) plugin:
/src/plugins/auto/ @openvinotoolkit/openvino-ie-auto-multi-maintainers
/src/inference/include/ie/multi-device/ @openvinotoolkit/openvino-ie-auto-multi-maintainers
Expand Down
76 changes: 76 additions & 0 deletions docs/OV_Runtime_UG/supported_plugins/ARM_CPU.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# Arm® CPU device {#openvino_docs_OV_UG_supported_plugins_ARM_CPU}


## Introducing the Arm® CPU Plugin
The ARM® CPU plugin is developed in order to enable deep neural networks inference on Arm® CPU, using [Compute Library](https://github.com/ARM-software/ComputeLibrary) as a backend.

The Arm® CPU plugin is not a part of the Intel® Distribution of OpenVINO™ toolkit and is not distributed in pre-built form. To use the plugin, it should be buid from source code. Plugin build procedure is described on [How to build Arm® CPU plugin](https://github.com/openvinotoolkit/openvino_contrib/wiki/How-to-build-ARM-CPU-plugin).
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be built


described on ... page ?


The set of supported layers is defined on [Operation set specification](https://github.com/openvinotoolkit/openvino_contrib/wiki/ARM-plugin-operation-set-specification).


## Supported inference data types
The Arm® CPU plugin supports the following data types as inference precision of internal primitives:

- Floating-point data types:
- f32
- f16
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

F32 as it is used below in this form.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I set f32 everywhere

- Quantized data types:
- i8


> **NOTE**: i8 support is experimental.

[Hello Query Device C++ Sample](../../../samples/cpp/hello_query_device/README.md) can be used to print out supported data types for all detected devices.


## Supported properties
The plugin supports the properties listed below.

### Read-write properties
All parameters must be set before calling `ov::Core::compile_model()` in order to take effect or passed as additional argument to `ov::Core::compile_model()`

- ov::enable_profiling
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suppose you also support streams, pinning, etc
@apankratovantonp please, provide a full list of properties.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thus these options are in the supported list they do not provide expected threading control. We even test only in latency (sync) mode only. I am going to enable tbb threading backend and provide full threading control as in the CPU plugin. It won't give any valuable throughput gain but give full threading control. So we can claim support of these options.


### Read-only properties
- ov::supported_properties
- ov::available_devices
- ov::range_for_async_infer_requests
- ov::range_for_streams
- ov::device::full_name
- ov::device::capabilities


## Known Layers Limitation
* `AvgPool` layer is supported via arm_compute library for 4D input tensor and via reference implementation for another cases.
* `BatchToSpace` layer is supported 4D tensors only and constant nodes: `block_shape` with `N` = 1 and `C`= 1, `crops_begin` with zero values and `crops_end` with zero values.
* `Convert` layer is supported via arm_compute library with configuration: src data type -> dst data type
- U8 -> U16, S16, S32
- U16 -> U8, U32
- S16 -> U8, S32
- F16 -> F32

for another cases layer is implemented via runtime reference.
* `ConvertLike` layer is supported configuration like `Convert`.
* `DepthToSpace` layer is supported 4D tensors only and for `BLOCKS_FIRST` of `mode` attribute.
* `Equal` does not support `broadcast` for inputs.
* `Gather` layer is supported constant scalar or 1D indices axes only. Layer is supported as via arm_compute library for non negative indices and via reference implementation otherwise.
* `Interpolate` layer is supported 4D tensors and zero value of `pads_begin` and `pads_end` attributes only.
* `Less` does not support `broadcast` for inputs.
* `LessEqual` does not support `broadcast` for inputs.
* `LRN` layer is supported `axes = {1}` or `axes = {2, 3}` only.
* `MaxPool-1` layer is supported via arm_compute library for 4D input tensor and via reference implementation for another cases.
* `Mod` layer is supported for FP32 only.
* `MVN` layer is supported via arm_compute library for 2D inputs and `false` value of `normalize_variance` and `false` value of `across_channels`, for another cases layer is implemented via runtime reference.
* `Normalize` layer is supported via arm_compute library with `MAX` value of `eps_mode` and `axes = {2 | 3}`, and for `ADD` value of `eps_mode` layer uses `'DecomposeNormalizeL2Add'`, for another cases layer is implemented via runtime reference.
* `NotEqual` does not support `broadcast` for inputs.
* `Pad` layer works with `pad_mode = {REFLECT | CONSTANT | SYMMETRIC}` parameters only.
* `Round` layer is supported via arm_compute library with `RoundMode::HALF_AWAY_FROM_ZERO` value of `mode`, for another cases layer is implemented via runtime reference.
* `SpaceToBatch` layer is supported 4D tensors only and constant nodes: `shapes`, `pads_begin` or `pads_end` with zero paddings for batch or channels and one values `shapes` for batch and channels.
* `SpaceToDepth` layer is supported 4D tensors only and for `BLOCKS_FIRST` of `mode` attribute.
* `StridedSlice` layer is supported via arm_compute library for tensors with dims < 5 and zero values of `ellipsis_mask` or zero values of `new_axis_mask` and `shrink_axis_mask`, for another cases layer is implemented via runtime reference.
* `Transpose` layer is supported via arm_compute library for tensors with dims < 5, for another cases layer is implemented via runtime reference.

## See Also
* [How to run YOLOv4 model inference using OpenVINO&trade; and OpenCV on Arm&reg;](https://opencv.org/how-to-run-yolov4-using-openvino-and-opencv-on-arm/)
* [Face recognition on Android&trade; using OpenVINO&trade; toolkit with Arm&reg; plugin](https://opencv.org/face-recognition-on-android-using-openvino-toolkit-with-arm-plugin/)
26 changes: 14 additions & 12 deletions docs/OV_Runtime_UG/supported_plugins/Device_Plugins.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
openvino_docs_OV_UG_supported_plugins_GPU
openvino_docs_IE_DG_supported_plugins_VPU
openvino_docs_OV_UG_supported_plugins_GNA
openvino_docs_OV_UG_supported_plugins_ARM_CPU

@endsphinxdirective

Expand All @@ -22,6 +23,7 @@ The OpenVINO Runtime provides capabilities to infer deep learning models on the
|[GPU plugin](GPU.md) |Intel® Graphics, including Intel® HD Graphics, Intel® UHD Graphics, Intel® Iris® Graphics, Intel® Xe Graphics, Intel® Xe MAX Graphics |
|[VPU plugins](VPU.md) |Intel® Neural Compute Stick 2 powered by the Intel® Movidius™ Myriad™ X, Intel® Vision Accelerator Design with Intel® Movidius™ VPUs |
|[GNA plugin](GNA.md) |Intel&reg; Speech Enabling Developer Kit, Amazon Alexa* Premium Far-Field Developer Kit, Intel&reg; Pentium&reg; Silver J5005 Processor, Intel&reg; Pentium&reg; Silver N5000 Processor, Intel&reg; Celeron&reg; J4005 Processor, Intel&reg; Celeron&reg; J4105 Processor, Intel&reg; Celeron&reg; Processor N4100, Intel&reg; Celeron&reg; Processor N4000, Intel&reg; Core&trade; i3-8121U Processor, Intel&reg; Core&trade; i7-1065G7 Processor, Intel&reg; Core&trade; i7-1060G7 Processor, Intel&reg; Core&trade; i5-1035G4 Processor, Intel&reg; Core&trade; i5-1035G7 Processor, Intel&reg; Core&trade; i5-1035G1 Processor, Intel&reg; Core&trade; i5-1030G7 Processor, Intel&reg; Core&trade; i5-1030G4 Processor, Intel&reg; Core&trade; i3-1005G1 Processor, Intel&reg; Core&trade; i3-1000G1 Processor, Intel&reg; Core&trade; i3-1000G4 Processor|
|[Arm&reg; CPU plugin](ARM_CPU.md) |Raspberry Pi&trade; 4 Model B, Apple&reg; Mac mini with M1 chip, NVIDIA&reg; Jetson Nano&trade;, Android&trade; devices |

OpenVINO runtime also has several execution capabilities which work on top of other devices:

Expand All @@ -38,17 +40,17 @@ Devices similar to the ones we have used for benchmarking can be accessed using
## Features support matrix
The table below demonstrates support of key features by OpenVINO device plugins.

| Capability | CPU | [GPU](./GPU.md) | GNA | VPU |
| ---------- | --- | --- | --- | --- |
| [Heterogeneous execution](../hetero_execution.md)| Yes | Yes | ? | ? |
| [Multi-device execution](../multi_device.md) | Yes | Yes | ? | ? |
| [Automatic batching](../automatic_batching.md) | No | Yes | ? | ? |
| [Multi-stream execution](@ref openvino_docs_optimization_guide_dldt_optimization_guide) | Yes | Yes | ? | ? |
| [Models caching](../Model_caching_overview.md) | Yes | Partial | ? | ? |
| [Dynamic shapes](../ov_dynamic_shapes.md) | Yes | Partial | ? | ? |
| Import/Export | Yes | No | ? | ? |
| [Preprocessing acceleration](../preprocessing_overview.md) | Yes | Yes | ? | ? |
| [Stateful models](../network_state_intro.md) | Yes | No | ? | ? |
| [Extensibility](@ref openvino_docs_Extensibility_UG_Intro) | Yes | Yes | ? | ? |
| Capability | CPU | [GPU](./GPU.md) | GNA | VPU | [Arm&reg; CPU](ARM_CPU.md) |
| ---------- | --- | --- | --- | --- | --- |
| [Heterogeneous execution](../hetero_execution.md)| Yes | Yes | ? | ? | No |
| [Multi-device execution](../multi_device.md) | Yes | Yes | ? | ? | No |
| [Automatic batching](../automatic_batching.md) | No | Yes | ? | ? | No |
| [Multi-stream execution](@ref openvino_docs_optimization_guide_dldt_optimization_guide) | Yes | Yes | ? | ? | Yes |
| [Models caching](../Model_caching_overview.md) | Yes | Partial | ? | ? | No |
| [Dynamic shapes](../ov_dynamic_shapes.md) | Yes | Partial | ? | ? | No |
| Import/Export | Yes | No | ? | ? | No |
| [Preprocessing acceleration](../preprocessing_overview.md) | Yes | Yes | ? | ? | No |
| [Stateful models](../network_state_intro.md) | Yes | No | ? | ? | No |
| [Extensibility](@ref openvino_docs_Extensibility_UG_Intro) | Yes | Yes | ? | ? | Yes |

For more details on plugin specific feature limitation see corresponding plugin pages.
Loading