Trang này mô tả cách xây dựng thư viện TensorFlow Lite cho các thiết bị ARM khác nhau.
Các hướng dẫn sau đây đã đượ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 với 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 trong 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 của bạn và khả năng của CPU, bạn có thể cần sử dụng các phiên bản chuỗi công cụ và tham số xây dựng khác nhau.
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, thì có sẵn hai ABI tùy thuộc vào tính khả dụng của VFP. armhf và armel . Tài liệu này hiển thị một ví dụ về armhf, 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 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
Bản dựng cho AArch64 (ARM64)
Hướng dẫn này cho biết 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ản dựng cho ARMv7 NEON được bật
Hướng dẫn này cho biết 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/
Bản dựng cho Raspberry Pi Zero (ARMv6)
Hướng dẫn này cho biết 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/