2021-05-25 09:48:49 +08:00
2021-08-26 16:33:33 +08:00
# TIM-VX - Tensor Interface Module
2021-10-20 17:20:47 +08:00


2021-01-11 18:16:03 +08:00
2022-03-22 22:59:52 +08:00
- [TIM-VX - Tensor Interface Module ](#tim-vx---tensor-interface-module )
- [Framework Support ](#framework-support )
- [Architecture Overview ](#architecture-overview )
- [Technical documents ](#technical-documents )
- [Get started ](#get-started )
- [Build and Run ](#build-and-run )
- [cmake ](#cmake )
- [Build with local google test source ](#build-with-local-google-test-source )
- [Build for evk-boards ](#build-for-evk-boards )
- [Important notice for integration ](#important-notice-for-integration )
- [Bazel ](#bazel )
- [Other ](#other )
- [Reference board ](#reference-board )
- [Support ](#support )
2021-08-26 16:33:33 +08:00
TIM-VX is a software integration module provided by VeriSilicon to facilitate deployment of Neural-Networks on Verisilicon ML accelerators. It serves as the backend binding for runtime frameworks such as Android NN, Tensorflow-Lite, MLIR, TVM and more.
2021-01-11 18:16:03 +08:00
Main Features
2021-08-26 16:33:33 +08:00
- Over [150 operators ](https://github.com/VeriSilicon/TIM-VX/blob/main/src/tim/vx/ops/README.md ) with rich format support for both quantized and floating point
- Simplified C++ binding API calls to create Tensors and Operations [Guide ](https://github.com/VeriSilicon/TIM-VX/blob/main/docs/Programming_Guide.md )
2021-06-03 12:10:24 +08:00
- Dynamic graph construction with support for shape inference and layout inference
2021-01-11 18:16:03 +08:00
- Built-in custom layer extensions
- A set of utility functions for debugging
2021-02-25 17:18:12 +08:00
## Framework Support
2021-08-03 12:27:09 +08:00
- [Tensorflow-Lite ](https://github.com/VeriSilicon/tflite-vx-delegate ) (External Delegate)
2021-02-26 13:21:55 +08:00
- [Tengine ](https://github.com/OAID/Tengine ) (Official)
2021-08-03 12:27:09 +08:00
- [TVM ](https://github.com/VeriSilicon/tvm ) (Fork)
2022-01-12 14:39:43 +08:00
- [Paddle-Lite ](https://github.com/PaddlePaddle/Paddle-Lite ) (Official)
2022-04-01 10:27:52 +08:00
- [OpenCV ](https://github.com/opencv/opencv/pull/21036 ) (Offical)
2021-02-25 17:54:22 +08:00
- MLIR Dialect (In development)
2021-02-25 17:18:12 +08:00
2021-08-03 12:27:09 +08:00
Feel free to raise a github issue if you wish to add TIM-VX for other frameworks.
2021-01-11 18:16:03 +08:00
2021-10-21 19:31:41 +08:00
## Architecture Overview

2022-03-18 10:08:27 +08:00
## Technical documents
* [Add customized operator ](docs/customized_op.md )
2021-10-11 18:47:39 +08:00
# Get started
2021-01-11 18:16:03 +08:00
2021-10-11 18:47:39 +08:00
## Build and Run
2022-01-17 18:22:39 +08:00
TIM-VX supports both [bazel ](https://bazel.build ) and [cmake ](https://cmake.org ).
2021-10-11 18:47:39 +08:00
2022-01-17 18:22:39 +08:00
----
### cmake
2021-10-11 18:47:39 +08:00
2021-11-17 11:03:48 +08:00
To build TIM-VX for x86 with prebuilt:
2021-10-11 18:47:39 +08:00
```shell
mkdir host_build
cd host_build
cmake ..
make -j8
2021-10-21 19:18:42 +08:00
make install
2021-10-11 18:47:39 +08:00
```
2021-10-21 19:18:42 +08:00
All install files (both headers and *.so) is located in : `host_build/install`
2022-01-17 18:22:39 +08:00
cmake options:
2021-10-11 18:47:39 +08:00
2022-01-17 18:22:39 +08:00
| option name | Summary | Default |
| ----- | ----- | ----- |
|`TIM_VX_ENABLE_TEST`| Enable unit test case for public APIs and ops | OFF |
|`TIM_VX_ENABLE_LAYOUT_INFER`| Build with tensor data layout inference support| ON |
|`TIM_VX_USE_EXTERNAL_OVXLIB`| Replace internal with a prebuilt libovxlib library | OFF |
|`OVXLIB_LIB`|full path to libovxlib.so include so name, required if `TIM_VX_USE_EXTERNAL_OVXLIB` =ON | Not set |
|`OVXLIB_INC`|ovxlib's include path, required if `TIM_VX_USE_EXTERNAL_OVXLIB` =ON| Not set |
2022-01-26 16:00:14 +08:00
|`EXTERNAL_VIV_SDK`| Give external vivante openvx driver libraries | Not set|
2022-01-17 18:22:39 +08:00
|`TIM_VX_BUILD_EXAMPLES`| Build example applications | OFF |
2022-01-26 16:00:14 +08:00
|`TIM_VX_ENABLE_40BIT` | Enable large memory (over 4G) support in NPU driver | OFF |
2021-10-12 13:42:04 +08:00
2022-01-17 18:22:39 +08:00
----
2022-03-22 22:59:52 +08:00
Run unit test:
2021-10-11 18:47:39 +08:00
```shell
cd host_build/src/tim
2021-11-15 12:18:03 +08:00
export LD_LIBRARY_PATH=`pwd`/../../../prebuilt-sdk/x86_64_linux/lib:< path to libgtest_main . so > :$LD_LIBRARY_PATH
2021-11-21 13:00:24 +08:00
export VIVANTE_SDK_DIR=`pwd`/../../../prebuilt-sdk/x86_64_linux/lib
2021-11-15 12:18:03 +08:00
export VSIMULATOR_CONFIG=< hardware name should get from chip vendor >
# if you want to debug wit gdb, please set
export DISABLE_IDE_DEBUG=1
2021-10-11 18:47:39 +08:00
./unit_test
```
2021-11-17 11:03:48 +08:00
#### Build with local google test source
```shell
cd < wksp_root >
git clone --depth 1 -b release-1.10.0 git@github.com:google/googletest.git
cd < root_tim_vx > /build/
cmake ../ -DTIM_VX_ENABLE_TEST=ON -DFETCHCONTENT_SOURCE_DIR_GOOGLETEST=< wksp_root / googletest > < add other cmake define here >
```
2022-01-17 18:22:39 +08:00
----
2022-03-22 22:59:52 +08:00
#### Build for evk-boards
2021-11-17 11:03:48 +08:00
1. prepare toolchain file follow cmake standard
2. make sure cross build low-level driver with toolchain separately, we need the sdk from the low-level driver
2022-03-22 22:59:52 +08:00
3. add ```-DEXTERNAL_VIV_SDK=< low-level-driver / out / sdk > ``` to cmake definitions, also remember ```-DCMAKE_TOOLCHAIN_FILE=< Toolchain_Config > ```
4. or for using a buildroot toolchain with extrnal VIV-SDK add:
```cmake
-DCONFIG=BUILDROOT -DCMAKE_SYSROOT=${CMAKE_SYSROOT} -DEXTERNAL_VIV_SDK=${BUILDROOT_SYSROOT}
```
2022-01-28 13:12:22 +08:00
5. then make
2021-11-17 11:03:48 +08:00
2022-01-17 18:22:39 +08:00
----
#### Important notice for integration
2021-12-15 22:23:32 +08:00
If you want to build tim-vx as a static library, and link it to your shared library or application, please be carefull with the linker, "-Wl,--whole-archive" is required.
2022-01-17 18:22:39 +08:00
@see **samples/lenet/CMakeLists.txt** for reference
2021-12-15 22:23:32 +08:00
2021-10-21 19:31:41 +08:00
### Bazel
[Install bazel ](https://docs.bazel.build/versions/master/install.html ) to get started.
TIM-VX needs to be compiled and linked against VeriSilicon OpenVX SDK which provides related header files and pre-compiled libraries. A default linux-x86_64 SDK is provided which contains the simulation environment on PC. Platform specific SDKs can be obtained from respective SoC vendors.
To build TIM-VX:
```shell
bazel build libtim-vx.so
```
To run sample LeNet:
```shell
# set VIVANTE_SDK_DIR for runtime compilation environment
export VIVANTE_SDK_DIR=`pwd`/prebuilt-sdk/x86_64_linux
bazel build //samples/lenet:lenet_asymu8_cc
bazel run //samples/lenet:lenet_asymu8_cc
```
2021-10-11 18:47:39 +08:00
## Other
2021-08-03 12:27:09 +08:00
To build and run Tensorflow-Lite with TIM-VX, please see [README ](https://github.com/VeriSilicon/tflite-vx-delegate#readme )
2021-08-26 16:33:33 +08:00
To build and run TVM with TIM-VX, please see [TVM README ](https://github.com/VeriSilicon/tvm/blob/vsi_npu/README.VSI.md )
2021-09-22 09:43:10 +08:00
2021-11-10 11:10:00 +08:00
# Reference board
2022-03-22 22:59:52 +08:00
Chip | Vendor | References | Success Stories |
:------ |:----- |:------ |:------
i.MX 8M Plus | NXP | [ML Guide ](https://www.nxp.com.cn/docs/en/user-guide/IMX-MACHINE-LEARNING-UG.pdf ), [BSP ](https://www.nxp.com/design/software/embedded-software/i-mx-software/embedded-linux-for-i-mx-applications-processors:IMXLINUX?tab=Design_Tools_Tab ) | [SageMaker with 8MP ](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html )
A311D | Khadas - VIM3 | [A311D datasheet ](https://dl.khadas.com/Hardware/VIM3/Datasheet/A311D_Quick_Reference_Manual_01_Wesion.pdf ), [BSP ](https://dl.khadas.com/Firmware/VIM3/Ubuntu/EMMC/VIM3_Ubuntu-server-focal_Linux-4.9_arm64_EMMC_V0.9-20200530.7z ) | [Paddle-lite demo ](https://github.com/PaddlePaddle/Paddle-Lite/blob/develop/docs/demo_guides/verisilicon_timvx.md )
2021-11-22 12:00:45 +08:00
S905D3 | Khadas - VIM3L | [S905D3 ](https://dl.khadas.com/Hardware/VIM3/Datasheet/S905D3_datasheet_0.2_Wesion.pdf ) , [BSP ](https://dl.khadas.com/Firmware/VIM3L/Ubuntu/EMMC/VIM3L_Ubuntu-server-focal_Linux-4.9_arm64_EMMC_V0.9-20200530.7z )
2021-11-10 11:10:00 +08:00
2021-09-22 09:43:10 +08:00
# Support
2022-04-27 13:14:23 +08:00
Create issue on github or email to ML_Support at verisilicon dot com