TIM-VX/README.md

134 lines
5.2 KiB
Markdown
Raw Normal View History

# TIM-VX - Tensor Interface Module
![Bazel.VSim.X86.UnitTest](https://github.com/VeriSilicon/TIM-VX/actions/workflows/bazel_x86_vsim_unit_test.yml/badge.svg)
![CMake.VSim.X86.UnitTest](https://github.com/VeriSilicon/TIM-VX/actions/workflows/cmake_x86_vsim_unit_test.yml/badge.svg)
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.
Main Features
- 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)
- Dynamic graph construction with support for shape inference and layout inference
- Built-in custom layer extensions
- A set of utility functions for debugging
## Framework Support
- [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)
- [TVM](https://github.com/VeriSilicon/tvm) (Fork)
- [Paddle-Lite](https://github.com/PaddlePaddle/Paddle-Lite) (Official)
- [OpenCV](https://github.com/opencv/opencv/pull/21036) (In development)
- MLIR Dialect (In development)
Feel free to raise a github issue if you wish to add TIM-VX for other frameworks.
## Architecture Overview
![TIM-VX Architecture](docs/image/timvx_overview.svg)
2021-10-11 18:47:39 +08:00
# Get started
2021-10-11 18:47:39 +08:00
## Build and Run
TIM-VX supports both [bazel](https://bazel.build) and cmake.
### Cmake
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`
2021-10-11 18:47:39 +08:00
Cmake option:
`CONFIG`: Set Target Platform. Such as: `A311D`, `S905D3`, `vim3_android`, `YOCTO`. Default is `X86_64_linux`.
2021-10-12 13:42:04 +08:00
`TIM_VX_ENABLE_TEST`: Build the unit test. Default is OFF.
2021-10-11 18:47:39 +08:00
`TIM_VX_USE_EXTERNAL_OVXLIB`: Use external OVXLIB. Default is OFF.
2021-10-12 13:42:04 +08:00
`EXTERNAL_VIV_SDK`: use external VX driver libs. By default is OFF.
2021-10-11 18:47:39 +08:00
run unit test:
```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
```
#### 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>
```
#### Build for your evk-board
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
3. add -DEXTERNAL_VIV_SDK=<low-level-driver/out/sdk> to cmake definitions, also remember -DCMAKE_TOOLCHAIN_FILE=<Your_Toolchain_Config>
4. then make
#### Notes for integration
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.
@see samples/lenet/CMakeLists.txt for reference
### 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
To build and run Tensorflow-Lite with TIM-VX, please see [README](https://github.com/VeriSilicon/tflite-vx-delegate#readme)
To build and run TVM with TIM-VX, please see [TVM README](https://github.com/VeriSilicon/tvm/blob/vsi_npu/README.VSI.md)
# Reference board
Chip | Vendor | References
:------ |:----- |:------
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)
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)
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)
# Support
create issue on github or email to ML_Support@verisilicon.com