בניית LiteRT ללוחות ARM

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

‫LiteRT תומך בשתי מערכות build, והתכונות הנתמכות מכל מערכת build לא זהות. כדאי לעיין בטבלה הבאה כדי לבחור את מערכת ה-Build המתאימה.

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

עיבוד בין מערכות ל-ARM באמצעות CMake

אם יש לכם פרויקט CMake או שאתם רוצים להשתמש בשרשרת כלים בהתאמה אישית, מומלץ להשתמש ב-CMake לצורך קומפילציה חוצה. לשם כך יש דף נפרד בנושא Cross compilation LiteRT with CMake.

עיבוד בין מערכות ל-ARM באמצעות Bazel

אם יש לכם פרויקט Bazel או שאתם רוצים להשתמש בפעולות TF, כדאי להשתמש במערכת ה-build של Bazel. תשתמשו בערכות הכלים המשולבות של ARM GCC 8.3 עם Bazel כדי ליצור ספרייה משותפת של ARM32/64.

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

ההוראות הבאות נבדקו במחשב Ubuntu 16.04.3 64-bit (AMD64) ובתמונת Docker של TensorFlow devel tensorflow/tensorflow:devel.

כדי לבצע קומפילציה צולבת של LiteRT באמצעות 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.

פרטים נוספים מופיעים בדף LiteRT C API.

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

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

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

וכו'

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

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