为 ARM 板构建 TensorFlow Lite

本页面介绍如何为基于 ARM 的计算机构建 TensorFlow Lite 库。

TensorFlow Lite 支持两种构建系统,并且每个构建系统支持的功能并不完全相同。查看下表以选择合适的构建系统。

功能 Bazel CMake
预定义工具链 armhf、aarch64 armel、armhf、aarch64
自定义工具链 难以使用 易于使用
选择 TF 操作 支持 不支持
GPU 委托 仅适用于 Android 任何支持 OpenCL 的平台
XNNPack 支持 支持
Python Wheel 支持 支持
C API 支持 支持
C++ API 适用于 Bazel 项目 适用于 CMake 项目

使用 CMake 进行 ARM 交叉编译

如果您有 CMake 项目,或者您想使用自定义工具链,那么最好使用 CMake 进行交叉编译。为此,提供了一个单独的 使用 CMake 交叉编译 TensorFlow Lite 页面。

使用 Bazel 进行 ARM 交叉编译

如果您有 Bazel 项目,或者您想使用 TF 操作,那么最好使用 Bazel 构建系统。您将使用与 Bazel 集成的 ARM GCC 8.3 工具链 来构建 ARM32/64 共享库。

目标架构 Bazel 配置 兼容设备
armhf (ARM32) --config=elinux_armhf RPI3、RPI4(使用 32 位 Raspberry Pi OS)
AArch64 (ARM64) --config=elinux_aarch64 Coral、RPI4(使用 Ubuntu 64 位)

以下说明已在 Ubuntu 16.04.3 64 位 PC (AMD64) 和 TensorFlow devel docker 镜像 tensorflow/tensorflow:devel 上测试。

要使用 Bazel 交叉编译 TensorFlow Lite,请按照以下步骤操作

步骤 1. 安装 Bazel

Bazel 是 TensorFlow 的主要构建系统。安装最新版本的 Bazel 构建系统

步骤 2. 克隆 TensorFlow 存储库

git clone https://github.com/tensorflow/tensorflow.git tensorflow_src

步骤 3. 构建 ARM 二进制文件

C 库
bazel build --config=elinux_aarch64 -c opt //tensorflow/lite/c:libtensorflowlite_c.so

您可以在以下位置找到共享库:bazel-bin/tensorflow/lite/c/libtensorflowlite_c.so

查看 TensorFlow Lite C API 页面以了解详细信息。

C++ 库
bazel build --config=elinux_aarch64 -c opt //tensorflow/lite:libtensorflowlite.so

您可以在以下位置找到共享库:bazel-bin/tensorflow/lite/libtensorflowlite.so

目前,没有直接的方法可以提取所有需要的头文件,因此您必须从 TensorFlow 存储库中包含 tensorflow/lite/ 中的所有头文件。此外,您还需要来自 FlatBuffers 和 Abseil 的头文件。

等等

您还可以使用工具链构建其他 Bazel 目标。以下是一些有用的目标。

  • //tensorflow/lite/tools/benchmark:benchmark_model
  • //tensorflow/lite/examples/label_image:label_image