کامپایل متقابل TensorFlow Lite با CMake

این صفحه نحوه ساخت کتابخانه TensorFlow Lite را برای دستگاه های مختلف ARM شرح می دهد.

دستورالعمل‌های زیر بر روی کامپیوتر اوبونتو 16.04.3 64 بیتی (AMD64)، TensorFlow Devel Docker image tensorflow/tensorflow:devel آزمایش شده‌اند.

پیش نیازها

شما باید کد منبع TensorFlow را CMake نصب و دانلود کنید. لطفاً صفحه Build TensorFlow Lite با CMake را برای جزئیات بررسی کنید.

محیط مورد نظر خود را بررسی کنید

نمونه های زیر تحت سیستم عامل Raspberry Pi، سرور اوبونتو 20.04 LTS و مندل لینوکس 4.0 تست شده اند. بسته به نسخه هدفمند glibc و قابلیت های CPU، ممکن است نیاز داشته باشید که از نسخه های مختلف زنجیره ابزار و پارامترهای ساخت استفاده کنید.

در حال بررسی نسخه 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.

بررسی سازگاری ABI

اگر هدف شما ARM 32 بیتی است، بسته به قابلیت VFP دو ABI موجود است. armhf و armel . این سند یک مثال armhf را نشان می دهد، شما باید از زنجیره ابزار مختلف برای اهداف armel استفاده کنید.

بررسی قابلیت CPU

برای ARMv7، باید نسخه VFP پشتیبانی شده هدف و در دسترس بودن 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

ساخت برای AArch64 (ARM64)

این دستورالعمل نحوه ساخت باینری AArch64 را نشان می دهد که با Coral Mendel Linux 4.0 ، Raspberry Pi (با اوبونتو سرور 20.04.01 LTS 64 بیتی نصب شده) سازگار است.

Toolchain را دانلود کنید

این دستورات gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu را در زیر ${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

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/

ساخت برای ARMv7 NEON فعال است

این دستورالعمل نحوه ساخت ARMv7 با VFPv4 و باینری فعال NEON را نشان می دهد که با Raspberry Pi 3 و 4 سازگار است.

Toolchain را دانلود کنید

این دستورات gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf را در زیر ${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

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/

ساخت Raspberry Pi Zero (ARMv6)

این دستورالعمل نحوه ساخت باینری ARMv6 را نشان می دهد که با Raspberry Pi Zero سازگار است.

Toolchain را دانلود کنید

این دستورات gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf را در زیر ${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

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/