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
shown in the [Python quickstart](python.md).
Note: This page shows how to compile only the C++ static library for
TensorFlow Lite. Alternative install options include: [install just the Python
interpreter API](python.md) (for inferencing only); [install the full
TensorFlow package from pip](https://www.tensorflow.org/install/pip);
or [build the full TensorFlow package](
https://www.tensorflow.org/install/source_rpi).
**Note:** This page shows how to compile only the C++ static library for
TensorFlow Lite. Alternative install options include:
[install just the Python interpreter API](python.md) (for inferencing only);
[install the full TensorFlow package from pip](https://www.tensorflow.org/install/pip);
or
[build the full TensorFlow package](https://www.tensorflow.org/install/source_rpi).
## 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/).
To cross compile TensorFlow Lite, first install the toolchain and libs:
To cross compile TensorFlow Lite follow the steps:
```bash
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
```
1. Clone official Raspberry Pi cross-compilation toolchain:
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
(`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:
2. Clone TensorFlow repository:
```bash
./tensorflow/lite/tools/make/download_dependencies.sh
```
```bash
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
./tensorflow/lite/tools/make/build_rpi_lib.sh
```
```bash
cd tensorflow_src && ./tensorflow/lite/tools/make/download_dependencies.sh
```
This should compile a static library in:
`tensorflow/lite/tools/make/gen/rpi_armv7l/lib/libtensorflow-lite.a`.
**Note:** You only need to do this once.
To build ARMv6 binary for Raspberry Pi Zero:
4. To build ARMv7 binary for Raspberry Pi 2, 3 and 4 execute:
```bash
./tensorflow/lite/tools/make/build_rpi_lib.sh TARGET_ARCH=armv6
```
```bash
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:
`tensorflow/lite/tools/make/gen/rpi_armv6/lib/libtensorflow-lite.a`.
**Note:** This should compile a static library in:
`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
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
sudo apt-get install build-essential
```
1. Log in to your Raspberry Pi and install the toolchain:
Now git-clone the TensorFlow repository
(`https://github.com/tensorflow/tensorflow`) and run this at the root of
the repository:
```bash
sudo apt-get install build-essential
```
```bash
./tensorflow/lite/tools/make/download_dependencies.sh
```
2. Clone TensorFlow repository:
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
./tensorflow/lite/tools/make/build_rpi_lib.sh
```
3. Run following script at the root of the TensorFlow repository to download
all the build dependencies:
This should compile a static library in:
`tensorflow/lite/tools/make/gen/lib/rpi_armv7/libtensorflow-lite.a`.
```bash
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
# alternative to Eigen on non-NEON ARM hardware like armv6.
ifeq ($(TARGET_ARCH), armv6)
TARGET_TOOLCHAIN_PREFIX := arm-linux-gnueabi-
TARGET_TOOLCHAIN_PREFIX := arm-linux-gnueabihf-
CXXFLAGS += \
-march=armv6 \
-mfpu=vfp \