Biên dịch chéo TensorFlow Lite với CMake

Trang này mô tả cách xây dựng thư viện TensorFlow Lite cho nhiều thiết bị ARM khác nhau.

Các hướng dẫn sau đã được thử nghiệm trên PC 64-bit Ubuntu 16.04.3 (AMD64), TensorFlow devel docker image tensorflow/tensorflow:devel .

Điều kiện tiên quyết

Bạn cần cài đặt và tải xuống mã nguồn TensorFlow của CMake. Vui lòng kiểm tra trang Build TensorFlow Lite with CMake để biết chi tiết.

Kiểm tra môi trường mục tiêu của bạn

Các ví dụ sau được thử nghiệm trên Raspberry Pi OS, Ubuntu Server 20.04 LTS và Mendel Linux 4.0. Tùy thuộc vào phiên bản glibc mục tiêu và khả năng của CPU, bạn có thể cần sử dụng phiên bản khác nhau của chuỗi công cụ và tham số bản dựng.

Kiểm tra phiên bản glibc

ldd --version
ldd (Debian GLIBC 2.28-10) 2.28
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

Kiểm tra khả năng tương thích ABI

Nếu mục tiêu của bạn là ARM 32-bit, có sẵn hai ABI tùy thuộc vào tính khả dụng của VFP. armhfarmel . Tài liệu này hiển thị một ví dụ về armhf, bạn cần sử dụng chuỗi công cụ khác nhau cho các mục tiêu armel.

Kiểm tra khả năng của CPU

Đối với ARMv7, bạn nên biết phiên bản VFP được hỗ trợ của mục tiêu và tính khả dụng của NEON.

cat /proc/cpuinfo
processor   : 0
model name  : ARMv7 Processor rev 3 (v7l)
BogoMIPS    : 108.00
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part    : 0xd08
CPU revision    : 3

Xây dựng cho AArch64 (ARM64)

Hướng dẫn này chỉ ra cách xây dựng tệp nhị phân AArch64 tương thích với Coral Mendel Linux 4.0 , Raspberry Pi (đã cài đặt Ubuntu Server 20.04.01 LTS 64-bit ).

Tải xuống chuỗi công cụ

Các lệnh này cài đặt chuỗi công cụ gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu trong ${HOME}/toolchains.

curl -LO https://storage.googleapis.com/mirror.tensorflow.org/developer.arm.com/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
mkdir -p ${HOME}/toolchains
tar xvf gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz -C ${HOME}/toolchains

Chạy CMake

ARMCC_PREFIX=${HOME}/toolchains/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-
ARMCC_FLAGS="-funsafe-math-optimizations"
cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc \
  -DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ \
  -DCMAKE_C_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
  -DCMAKE_SYSTEM_NAME=Linux \
  -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
  ../tensorflow/lite/

Đã bật bản dựng cho ARMv7 NEON

Hướng dẫn này cho thấy cách xây dựng ARMv7 với nhị phân hỗ trợ VFPv4 và NEON tương thích với Raspberry Pi 3 và 4.

Tải xuống chuỗi công cụ

Các lệnh này cài đặt chuỗi công cụ gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf trong ${HOME}/toolchains.

curl -LO https://storage.googleapis.com/mirror.tensorflow.org/developer.arm.com/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
mkdir -p ${HOME}/toolchains
tar xvf gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz -C ${HOME}/toolchains

Chạy CMake

ARMCC_FLAGS="-march=armv7-a -mfpu=neon-vfpv4 -funsafe-math-optimizations -mfp16-format=ieee"
ARMCC_PREFIX=${HOME}/toolchains/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc \
  -DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ \
  -DCMAKE_C_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
  -DCMAKE_SYSTEM_NAME=Linux \
  -DCMAKE_SYSTEM_PROCESSOR=armv7 \
  ../tensorflow/lite/

Xây dựng cho Raspberry Pi Zero (ARMv6)

Hướng dẫn này cho thấy cách xây dựng nhị phân ARMv6 tương thích với Raspberry Pi Zero.

Tải xuống chuỗi công cụ

Các lệnh này cài đặt chuỗi công cụ gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf trong ${HOME}/toolchains.

curl -LO https://storage.googleapis.com/mirror.tensorflow.org/developer.arm.com/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
mkdir -p ${HOME}/toolchains
tar xvf gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz -C ${HOME}/toolchains

Chạy CMake

ARMCC_FLAGS="-march=armv6 -mfpu=vfp -mfloat-abi=hard -funsafe-math-optimizations"
ARMCC_PREFIX=${HOME}/toolchains/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc \
  -DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ \
  -DCMAKE_C_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
  -DCMAKE_SYSTEM_NAME=Linux \
  -DCMAKE_SYSTEM_PROCESSOR=armv6 \
  -DTFLITE_ENABLE_XNNPACK=OFF \
  ../tensorflow/lite/