TIM-VX - 张量接口模块
TIM-VX是芯擎科技提供的软件集成模块,旨在便于在芯擎科技的机器学习加速器上部署神经网络。它作为后端绑定,为Android NN、Tensorflow-Lite、MLIR、TVM等运行时框架提供支持。
主要特性
框架支持
- Tensorflow-Lite(外部委托)
- Tengine(官方)
- TVM(分支)
- Paddle-Lite(官方)
- OpenCV(官方)
- MLIR方言(开发中)
如果您希望将TIM-VX添加到其他框架中,欢迎提出GitHub问题。
架构概览
技术文档
开始使用
构建和运行
cmake
使用预构建文件为x86构建TIM-VX:
mkdir host_build
cd host_build
cmake ..
make -j8
make install
所有安装文件(包括头文件和*.so)位于:host_build/install
cmake选项:
选项名称 | 摘要 | 默认值 |
---|---|---|
TIM_VX_ENABLE_TEST | 启用公共API和算子的单元测试用例 | OFF |
TIM_VX_ENABLE_LAYOUT_INFER | 构建时支持张量数据布局推理 | ON |
TIM_VX_USE_EXTERNAL_OVXLIB | 使用预构建的libovxlib库替换内部库 | OFF |
OVXLIB_LIB | libovxlib.so的完整路径(包括so名称),当TIM_VX_USE_EXTERNAL_OVXLIB =ON时必需 | 未设置 |
OVXLIB_INC | ovxlib的包含路径,当TIM_VX_USE_EXTERNAL_OVXLIB =ON时必需 | 未设置 |
EXTERNAL_VIV_SDK | 提供外部Vivante OpenVX驱动程序库 | 未设置 |
TIM_VX_BUILD_EXAMPLES | 构建示例应用程序 | OFF |
TIM_VX_ENABLE_40BIT | 在NPU驱动程序中启用大内存(超过4G)支持 | OFF |
TIM_VX_ENABLE_PLATFORM | 启用多设备支持 | OFF |
TIM_VX_ENABLE_PLATFORM_LITE | 启用精简版多设备支持,仅当TIM_VX_ENABLE_PLATFORM =ON时生效 | OFF |
VIP_LITE_SDK | VIPLite SDK的完整路径,当TIM_VX_ENABLE_PLATFORM_LITE =ON时必需 | 未设置 |
TIM_VX_ENABLE_GRPC | 启用gRPC支持,仅当TIM_VX_ENABLE_PLATFORM =ON时生效 | OFF |
TIM_VX_DBG_ENABLE_TENSOR_HNDL | 启用内置张量句柄 | ON |
TIM_VX_ENABLE_TENSOR_CACHE | 为常量张量启用张量缓存,请查看OpenSSL构建说明 | OFF |
运行单元测试:
cd host_build/src/tim
export LD_LIBRARY_PATH=`pwd`/../../../prebuilt-sdk/x86_64_linux/lib:<libgtest_main.so的路径>:$LD_LIBRARY_PATH
export VIVANTE_SDK_DIR=`pwd`/../../../prebuilt-sdk/x86_64_linux/
export VSIMULATOR_CONFIG=<应从芯片供应商处获取的硬件名称>
# 如果您想用gdb调试,请设置
export DISABLE_IDE_DEBUG=1
./unit_test
使用本地Google Test源码构建
cd <工作空间根目录>
git clone --depth 1 -b release-1.10.0 git@github.com:google/googletest.git
cd <tim_vx根目录>/build/
cmake ../ -DTIM_VX_ENABLE_TEST=ON -DFETCHCONTENT_SOURCE_DIR_GOOGLETEST=<工作空间根目录/googletest> <在此添加其他cmake定义>
为EVK开发板构建
- 按照 cmake 标准准备工具链文件
- 确保使用工具链单独交叉编译低级驱动程序,我们需要低级驱动程序的 SDK
- 在 cmake 定义中添加
-DEXTERNAL_VIV_SDK=<low-level-driver/out/sdk>
,同时记得添加-DCMAKE_TOOLCHAIN_FILE=<Toolchain_Config>
- 或者,如果使用带有外部 VIV-SDK 的 buildroot 工具链,请添加:
-DCONFIG=BUILDROOT -DCMAKE_SYSROOT=${CMAKE_SYSROOT} -DEXTERNAL_VIV_SDK=${BUILDROOT_SYSROOT}
- 然后进行编译
集成的重要注意事项
如果你想将 tim-vx 构建为静态库,并将其链接到你的共享库或应用程序中,请注意链接器,需要使用 "-Wl,--whole-archive"。
参考 samples/lenet/CMakeLists.txt
Bazel
开始之前,请安装 bazel。
TIM-VX 需要与 VeriSilicon OpenVX SDK 一起编译和链接,该 SDK 提供相关头文件和预编译库。默认提供了一个 linux-x86_64 SDK,包含 PC 上的模拟环境。特定平台的 SDK 可以从相应的 SoC 供应商处获得。
构建 TIM-VX:
bazel build libtim-vx.so
运行 LeNet 示例:
# 为运行时编译环境设置 VIVANTE_SDK_DIR
export VIVANTE_SDK_DIR=`pwd`/prebuilt-sdk/x86_64_linux
bazel build //samples/lenet:lenet_asymu8_cc
bazel run //samples/lenet:lenet_asymu8_cc
其他
要构建和运行带有 TIM-VX 的 Tensorflow-Lite,请参阅 README
要构建和运行带有 TIM-VX 的 TVM,请参阅 TVM README
参考板
芯片 | 厂商 | 参考资料 | 成功案例 |
---|---|---|---|
i.MX 8M Plus | NXP | 机器学习指南, BSP | SageMaker 与 8MP |
A311D | Khadas - VIM3 | A311D 数据表, BSP | Paddle-lite 演示 |
S905D3 | Khadas - VIM3L | S905D3 , BSP |
支持
在 GitHub 上创建问题或发送电子邮件至 ML_Support@verisilicon.com