构建适用于 ARM 主板的 TensorFlow Lite

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

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

特征 Bazel CMake
预定义工具链 armhf、aarch64 armel、armhf、aarch64
自定义工具链 较难使用 易于使用
选择 TF 操作 支持 不支持
GPU 代理 仅适用于 Android 设备 任何支持 OpenCL 的平台
XNNPack 支持 支持
Python 轮盘 支持 支持
C API 支持 支持
C++ API 支持 Bazel 项目 CMake 项目支持

使用 CMake 对 ARM 进行交叉编译

如果您有 CMake 项目,或者想要使用自定义工具链,则最好使用 CMake 进行交叉编译。您可以通过单独的使用 CMake 交叉编译 TensorFlow Lite 页面执行此操作。

使用 Bazel 对 ARM 进行交叉编译

如果您有 Bazel 项目或想要使用 TF 操作,最好使用 Bazel 构建系统。您将使用集成的 ARM GCC 8.3 工具链与 Bazel 来构建 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 上进行了测试。

如需将 TensorFlow Lite 与 Bazel 交叉编译,请按以下步骤操作:

第 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