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

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

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

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

Bạn cần cài đặt và tải mã nguồn TensorFlow xuống bằng CMake. Vui lòng kiểm tra Xây dựng LiteRT bằng CMake để biết thông tin chi tiết.

Kiểm tra môi trường mục tiêu

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

Đang 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.

Đang kiểm tra khả năng tương thích với ABI

Nếu mục tiêu của bạn là ARM 32 bit, sẽ có 2 ABI tuỳ thuộc vào VFP tình trạng còn hàng. armhfarmel. Tài liệu này hiển thị một hình ảnh cánh tay ví dụ: bạn cần sử dụng các chuỗi công cụ khác nhau cho các mục tiêu armel.

Kiểm tra chức 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à khả năng sử dụng 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

Bản dựng cho AArch64 (ARM64)

Hướng dẫn này trình bày cách tạo tệp nhị phân AArch64 tương thích với Coral Mendel Linux 4.0, Raspberry Pi (có Máy chủ Ubuntu 20.04.01 LTS 64 bit cài đặt).

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

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}/chuỗi công cụ.

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 trình bày cách xây dựng ARMv7 bằng tệp nhị phân có bật VFPv4 và NEON Tương thích với Raspberry Pi 3 và 4.

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

Những lệnh này sẽ cài đặt 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/

Bản dựng cho Raspberry Pi Zero (ARMv6)

Hướng dẫn này trình bày cách tạo tệp nhị phân ARMv6 tương thích với Raspberry Pi Zero.

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

Những lệnh này sẽ cài đặt 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/