Merge pull request #38666 from marcin-sielski:master

PiperOrigin-RevId: 312420674
Change-Id: Ia8cde2c26dbb2bc56ff28dcb549d94ce4fd6d647
This commit is contained in:
TensorFlower Gardener 2020-05-19 22:23:24 -07:00
commit e3eb5101bb
2 changed files with 68 additions and 57 deletions

View File

@ -5,87 +5,98 @@ Raspberry Pi. If you just want to start using TensorFlow Lite to execute your
models, the fastest option is to install the TensorFlow Lite runtime package as models, the fastest option is to install the TensorFlow Lite runtime package as
shown in the [Python quickstart](python.md). shown in the [Python quickstart](python.md).
Note: This page shows how to compile only the C++ static library for **Note:** This page shows how to compile only the C++ static library for
TensorFlow Lite. Alternative install options include: [install just the Python TensorFlow Lite. Alternative install options include:
interpreter API](python.md) (for inferencing only); [install the full [install just the Python interpreter API](python.md) (for inferencing only);
TensorFlow package from pip](https://www.tensorflow.org/install/pip); [install the full TensorFlow package from pip](https://www.tensorflow.org/install/pip);
or [build the full TensorFlow package]( or
https://www.tensorflow.org/install/source_rpi). [build the full TensorFlow package](https://www.tensorflow.org/install/source_rpi).
## Cross-compile for Raspberry Pi ## Cross-compile for Raspberry Pi
This has been tested on Ubuntu 16.04.3 64bit and TensorFlow devel docker image Instruction has been tested on Ubuntu 16.04.3 64-bit PC (AMD64) and TensorFlow
devel docker image
[tensorflow/tensorflow:nightly-devel](https://hub.docker.com/r/tensorflow/tensorflow/tags/). [tensorflow/tensorflow:nightly-devel](https://hub.docker.com/r/tensorflow/tensorflow/tags/).
To cross compile TensorFlow Lite, first install the toolchain and libs: To cross compile TensorFlow Lite follow the steps:
```bash 1. Clone official Raspberry Pi cross-compilation toolchain:
sudo apt-get update
sudo apt-get install crossbuild-essential-armhf
# The following is only needed for Pi Zero build.
sudo apt-get install crossbuild-essential-armel
```
If you are using Docker, you may not use `sudo`. ```bash
git clone https://github.com/raspberrypi/tools.git rpi_tools
```
Now git-clone the TensorFlow repository 2. Clone TensorFlow repository:
(`https://github.com/tensorflow/tensorflow`)—if you're using the TensorFlow
Docker image, the repo is already provided in `/tensorflow_src/`—and then run
this script at the root of the TensorFlow repository to download all the
build dependencies:
```bash ```bash
./tensorflow/lite/tools/make/download_dependencies.sh git clone https://github.com/tensorflow/tensorflow.git tensorflow_src
```
Note that you only need to do this once. ```
You should then be able to compile: **Note:** If you're using the TensorFlow Docker image, the repo is already
provided in `/tensorflow_src/`.
To build ARMv7 binary for Raspberry Pi 2, 3 and 4: 3. Run following script at the root of the TensorFlow repository to download
all the build dependencies:
```bash ```bash
./tensorflow/lite/tools/make/build_rpi_lib.sh cd tensorflow_src && ./tensorflow/lite/tools/make/download_dependencies.sh
``` ```
This should compile a static library in: **Note:** You only need to do this once.
`tensorflow/lite/tools/make/gen/rpi_armv7l/lib/libtensorflow-lite.a`.
To build ARMv6 binary for Raspberry Pi Zero: 4. To build ARMv7 binary for Raspberry Pi 2, 3 and 4 execute:
```bash ```bash
./tensorflow/lite/tools/make/build_rpi_lib.sh TARGET_ARCH=armv6 PATH=../rpi_tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin:$PATH ./tensorflow/lite/tools/make/build_rpi_lib.sh
``` ```
This should compile a static library in: **Note:** This should compile a static library in:
`tensorflow/lite/tools/make/gen/rpi_armv6/lib/libtensorflow-lite.a`. `tensorflow/lite/tools/make/gen/rpi_armv7l/lib/libtensorflow-lite.a`.
5. To build ARMv6 binary for Raspberry Pi Zero execute:
```bash
PATH=../rpi_tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin:$PATH ./tensorflow/lite/tools/make/build_rpi_lib.sh TARGET_ARCH=armv6
```
**Note:** This should compile a static library in:
`tensorflow/lite/tools/make/gen/rpi_armv6/lib/libtensorflow-lite.a`.
## Compile natively on Raspberry Pi ## Compile natively on Raspberry Pi
This has been tested on Raspberry Pi 3b, Raspbian GNU/Linux 9.1 (stretch), gcc version 6.3.0 20170516 (Raspbian 6.3.0-18+rpi1). Instruction has been tested on Raspberry Pi Zero, Raspbian GNU/Linux 10
(buster), gcc version 8.3.0 (Raspbian 8.3.0-6+rpi1):
Log in to your Raspberry Pi and install the toolchain: To natively compile TensorFlow Lite follow the steps:
```bash 1. Log in to your Raspberry Pi and install the toolchain:
sudo apt-get install build-essential
```
Now git-clone the TensorFlow repository ```bash
(`https://github.com/tensorflow/tensorflow`) and run this at the root of sudo apt-get install build-essential
the repository: ```
```bash 2. Clone TensorFlow repository:
./tensorflow/lite/tools/make/download_dependencies.sh
```
Note that you only need to do this once. ```bash
git clone https://github.com/tensorflow/tensorflow.git tensorflow_src
You should then be able to compile: ```
```bash 3. Run following script at the root of the TensorFlow repository to download
./tensorflow/lite/tools/make/build_rpi_lib.sh all the build dependencies:
```
This should compile a static library in: ```bash
`tensorflow/lite/tools/make/gen/lib/rpi_armv7/libtensorflow-lite.a`. cd tensorflow_src && ./tensorflow/lite/tools/make/download_dependencies.sh
```
**Note:** You only need to do this once.
4. You should then be able to compile TensorFlow Lite with:
```bash
./tensorflow/lite/tools/make/build_rpi_lib.sh
```
**Note:** This should compile a static library in:
`tensorflow/lite/tools/make/gen/lib/rpi_armv6/libtensorflow-lite.a`.

View File

@ -32,7 +32,7 @@ ifeq ($(TARGET),rpi)
# TODO(petewarden) In the future, we'll want to use OpenBLAS as a faster # TODO(petewarden) In the future, we'll want to use OpenBLAS as a faster
# alternative to Eigen on non-NEON ARM hardware like armv6. # alternative to Eigen on non-NEON ARM hardware like armv6.
ifeq ($(TARGET_ARCH), armv6) ifeq ($(TARGET_ARCH), armv6)
TARGET_TOOLCHAIN_PREFIX := arm-linux-gnueabi- TARGET_TOOLCHAIN_PREFIX := arm-linux-gnueabihf-
CXXFLAGS += \ CXXFLAGS += \
-march=armv6 \ -march=armv6 \
-mfpu=vfp \ -mfpu=vfp \