عبر تجميع TensorFlow Lite مع CMake

توضح هذه الصفحة كيفية إنشاء مكتبة TensorFlow Lite لمختلف أجهزة ARM.

تم اختبار الإرشادات التالية على Ubuntu 16.04.3 PC 64 بت (AMD64) و TensorFlow devel docker image Tensorflow/tensorflow:devel .

المتطلبات الأساسية

تحتاج إلى تثبيت CMake وتنزيل كود مصدر TensorFlow. يرجى مراجعة صفحة Build TensorFlow Lite مع CMake للحصول على التفاصيل.

تحقق من البيئة المستهدفة الخاصة بك

تم اختبار الأمثلة التالية ضمن Raspberry Pi OS وUbuntu Server 20.04 LTS وMendel Linux 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 بت، فهناك نوعان من ABI متاحان اعتمادًا على مدى توفر VFP. ارمهف و ارميل . يعرض هذا المستند مثالًا لـarmhf، حيث تحتاج إلى استخدام سلسلة أدوات مختلفة لأهداف Armel.

التحقق من قدرة وحدة المعالجة المركزية

بالنسبة إلى 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 (مع تثبيت Ubuntu Server 20.04.01 LTS 64 بت ).

تحميل سلسلة الأدوات

تقوم هذه الأوامر بتثبيت gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu toolchain ضمن ${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

قم بتشغيل كميك

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.

تحميل سلسلة الأدوات

تقوم هذه الأوامر بتثبيت gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf Toolchain ضمن ${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

قم بتشغيل كميك

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.

تحميل سلسلة الأدوات

تقوم هذه الأوامر بتثبيت gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf Toolchain ضمن ${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

قم بتشغيل كميك

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/