בניית TensorFlow Lite ללוחות ARM

בדף הזה נסביר איך ליצור את ספריות TensorFlow Lite למחשבים מבוססי ARM.

ב-TensorFlow Lite יש תמיכה בשתי מערכות build, ותכונות נתמכות מכל מערכת build הן לא זהות. בטבלה הבאה תוכלו לבחור מערכת build מתאימה.

תכונה Bazel CMake
רשתות כלים מוגדרות מראש Armhf, aarch64 Armel, Armhf, aarch64
שרשראות כלים בהתאמה אישית קשה יותר לשימוש קל לשימוש
בחירת פעולות TF נתמך לא אפשרי
הענקת גישה ל-GPU זמינה רק ב-Android כל פלטפורמה שתומכת ב-OpenCL
XNNPack נתמך נתמך
גלגל Python נתמך נתמך
C API נתמך נתמך
API של C++ תמיכה בפרויקטים של Bazel תמיכה בפרויקטים של CMake

עיבוד מוצלב ל-ARM עם CMake

אם יש לכם פרויקט ב-CMake, או אם אתם רוצים להשתמש בשרשרת כלים בהתאמה אישית, עדיף להשתמש ב-CMake עבור קומפילציה צולבת. לשם כך יש דף נפרד ל-Cross compilation TensorFlow Lite עם CMake.

עיבוד מוצלב ל-ARM עם Bazel

אם יש לכם פרויקט של Bazel או שאתם רוצים להשתמש ב-TF Ops, עדיף לכם להשתמש במערכת Bazel Build. תשתמשו בשרשראות הכלים המשולבות של ARM32/64 עם Bazel כדי ליצור ספרייה משותפת מסוג ARM32/64.

ארכיטקטורת יעד הגדרת Bazel מכשירים תואמים
Armhf (ARM32) --config=elinux_armhf RPI3, RPI4 עם מערכת הפעלה Raspberry Pi 32 סיביות
AArch64 (ARM64) --config=elinux_aarch64 קורל, RPI4 עם Ubuntu 64 ביט

ההוראות הבאות נבדקו ב-Ubuntu 16.04.3 64-bit PC (AMD64) וב-TensorFlow devel reporter image tensorflow/tensorflow:devel.

כדי לבצע הידור של TensorFlow Lite עם Bazel:

שלב 1. להתקנת Bazel

Bazel היא מערכת ה-build הראשית של TensorFlow. מתקינים את הגרסה האחרונה של מערכת ה-build של Bazel.

שלב 2. מאגר שכפול TensorFlow

git clone https://github.com/tensorflow/tensorflow.git tensorflow_src

שלב 3. יצירת קובץ בינארי של ARM

ספריית C
bazel build --config=elinux_aarch64 -c opt //tensorflow/lite/c:libtensorflowlite_c.so

אפשר למצוא ספרייה משותפת ב: bazel-bin/tensorflow/lite/c/libtensorflowlite_c.so.

הפרטים מופיעים בדף TensorFlow Lite C API.

ספריית C++
bazel build --config=elinux_aarch64 -c opt //tensorflow/lite:libtensorflowlite.so

אפשר למצוא ספרייה משותפת ב: bazel-bin/tensorflow/lite/libtensorflowlite.so.

בשלב הזה אין דרך פשוטה לחלץ את כל קובצי הכותרות הנדרשים, ולכן צריך לכלול את כל קובצי הכותרות ב-tensorflow/lite/ מהמאגר של TensorFlow. בנוסף, צריך קובצי כותרת מ-FlastBuffers ומ-Abseil.

וכו'

אפשר גם לבנות יעדים אחרים של Bazel באמצעות שרשרת הכלים. הנה כמה יעדים שימושיים.

  • //tensorflow/lite/tools/benchmark:benchmark_model
  • //tensorflow/lite/examples/label_image:label_image