فيديو مجمَّع من صناعة TensorFlow Lite بالتعاون مع CMake

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

تم اختبار التعليمات التالية على جهاز كمبيوتر يعمل بالإصدار 64 بت من نظام التشغيل Ubuntu 16.04.3 (AMD64)، وTensorFlow من TensorFlow devel Docker image tensorflow/tensorflow:devel.

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

تحتاج إلى تثبيت رمز مصدر TensorFlow وتنزيله من CMake. يُرجى الاطّلاع على صفحة إنشاء TensorFlow Lite باستخدام CMake للحصول على التفاصيل.

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

يتم اختبار الأمثلة التالية من خلال نظام التشغيل Raspberry Pi وUbuntu Server 20.04 LTS ومندل 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. يوضح هذا المستند مثالاً على Armhf، إذ تحتاج إلى استخدام سلسلة أدوات مختلفة لاستهدافات الأسلحة.

جارٍ التحقّق من قدرات وحدة المعالجة المركزية (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

Build for 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 ضمن ${home}/أدوات سلسلة الأدوات.

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.

تنزيل سلسلة الأدوات

تقوم هذه الأوامر بتثبيت سلسلة الأدوات gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf ضمن ${home}/أدوات سلسلة الأدوات.

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/

Build for Raspberry Pi Zero (ARMv6)

توضح هذه التعليمات كيفية إنشاء برنامج ثنائي ARMv6 متوافق مع نظام Raspberry Pi Zero.

تنزيل سلسلة الأدوات

تقوم هذه الأوامر بتثبيت سلسلة الأدوات gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf ضمن ${home}/أدوات سلسلة الأدوات.

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/