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

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

تم اختبار التعليمات التالية على Ubuntu 16.04.3 64-bit PC (AMD64) ، TensorFlow devel docker image tensorflow / tensorflow: devel .

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

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

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

تم اختبار الأمثلة التالية ضمن نظام Raspberry Pi OS و Ubuntu Server 20.04 LTS و Mendel Linux 4.0. اعتمادًا على إصدار glibc المستهدف وقدرات وحدة المعالجة المركزية ، قد تحتاج إلى استخدام إصدار مختلف من toolchain وإنشاء معلمات.

التحقق من نسخة 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 . يُظهر هذا المستند مثالاً على الذراع ، تحتاج إلى استخدام سلسلة أدوات مختلفة لأهداف 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 بت ).

تنزيل 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 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

تشغيل 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

تقوم هذه الأوامر بتثبيت أداة arm-rpi-linux-gnueabihf ضمن $ {HOME} / toolchains.

curl -L https://github.com/rvagg/rpi-newer-crosstools/archive/eb68350c5c8ec1663b7fe52c742ac4271e3217c5.tar.gz -o rpi-toolchain.tar.gz
tar xzf rpi-toolchain.tar.gz -C ${HOME}/toolchains
mv ${HOME}/toolchains/rpi-newer-crosstools-eb68350c5c8ec1663b7fe52c742ac4271e3217c5 ${HOME}/toolchains/arm-rpi-linux-gnueabihf

تشغيل CMake

ARMCC_PREFIX=${HOME}/toolchains/arm-rpi-linux-gnueabihf/x64-gcc-6.5.0/arm-rpi-linux-gnueabihf/bin/arm-rpi-linux-gnueabihf-
ARMCC_FLAGS="-march=armv6 -mfpu=vfp -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=armv6 \
  -DTFLITE_ENABLE_XNNPACK=OFF \
  ../tensorflow/lite/