יצירת TensorFlow Lite עם CMake

בדף הזה נסביר איך ליצור את ספריית TensorFlow Lite ולהשתמש בה באמצעות הכלי CMake.

ההוראות הבאות נבדקו במערכות Ubuntu 16.04.3 64-bit PC (AMD64) , macOS Catalina (x86_64), Windows 10 ו-TensorFlow devel Docker אימג' tensorflow/tensorflow:devel.

שלב 1. התקנת הכלי CMake

כדי להשתמש בו נדרש CMake 3.16 ואילך. ב-Ubuntu, תוכלו פשוט להריץ את הפקודה הבאה.

sudo apt-get install cmake

לחלופין, תוכלו לעקוב אחר המדריך הרשמי להתקנת ה-cmake

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

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

שלב 3. יצירת ספריית build של CMake

mkdir tflite_build
cd tflite_build

שלב 4. הפעלת הכלי CMake עם הגדרות אישיות

גרסת build

כברירת מחדל, הוא יוצר קובץ הרצה עם אופטימיזציה לגרסה. כדי ליצור את ה-build לתחנת העבודה, פשוט מריצים את הפקודה הבאה.

cmake ../tensorflow_src/tensorflow/lite

גרסת build לניפוי באגים

אם אתם צריכים ליצור build לניפוי באגים שכולל פרטי סמלים, עליכם לספק את האפשרות -DCMAKE_BUILD_TYPE=Debug.

cmake ../tensorflow_src/tensorflow/lite -DCMAKE_BUILD_TYPE=Debug

פיתוח גרסאות build באמצעות בדיקות של יחידות ליבה

כדי שתוכלו להריץ בדיקות ליבה, אתם צריכים לספק את הדגל -DTFLITE_KERNEL_TEST=on. בקטע המשנה הבא ניתן למצוא את הפרטים לגבי הידור של בדיקות יחידה.

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_KERNEL_TEST=on

בניית חבילה להתקנה

כדי ליצור חבילה ניתנת להתקנה שיכולה לשמש כתלות בפרויקט אחר ב-CMake עם find_package(tensorflow-lite CONFIG), משתמשים באפשרות -DTFLITE_ENABLE_INSTALL=ON.

רצוי לספק גם גרסאות משלכם של יחסי תלות בספרייה. צריך להשתמש בהם גם בפרויקט שתלוי ב-TF Lite. אפשר להשתמש ב--DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON ולהגדיר את המשתנים <PackageName>_DIR כך שיצביעו על ההתקנות של הספרייה שלכם.

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_INSTALL=ON \
  -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON \
  -DSYSTEM_FARMHASH=ON \
  -DSYSTEM_PTHREADPOOL=ON \
  -Dabsl_DIR=<install path>/lib/cmake/absl \
  -DEigen3_DIR=<install path>/share/eigen3/cmake \
  -DFlatBuffers_DIR=<install path>/lib/cmake/flatbuffers \
  -Dgemmlowp_DIR=<install path>/lib/cmake/gemmlowp \
  -DNEON_2_SSE_DIR=<install path>/lib/cmake/NEON_2_SSE \
  -Dcpuinfo_DIR=<install path>/share/cpuinfo \
  -Druy_DIR=<install path>/lib/cmake/ruy

קומפילציה צולבת

אתם יכולים להשתמש ב-CMake כדי ליצור קבצים בינאריים לארכיטקטורות יעד ARM64 או Android.

כדי לבצע הידור צולב של TF Lite, צריך לספק את הנתיב ל-SDK (למשל ARM64 SDK או NDK במקרה של Android) עם הדגל -DCMAKE_TOOLCHAIN_FILE.

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
פרטים ספציפיים לגבי קומפילציה צולבת של Android

כדי ליצור הידור משולב של Android, צריך להתקין את Android NDK ולספק את נתיב ה-NDK עם הדגל -DCMAKE_TOOLCHAIN_FILE שהוזכר למעלה. צריך גם להגדיר יעד לממשק ABI עם הדגל -DANDROID_ABI.

cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
  -DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
פרטים ספציפיים לגבי בדיקות ליבה (יחידה) של הידור צולב

כדי לבצע הידור צולב של בדיקות היחידה נדרש מהדר שטוח (flatc) לארכיטקטורה המארחת. לשם כך יש רשימת CMakeList ב-tensorflow/lite/tools/cmake/native_tools/flatbuffers כדי ליצור מראש את מהדר ה-flatc עם CMake בספריית build נפרדת באמצעות שרשרת הכלים למארחים.

mkdir flatc-native-build && cd flatc-native-build
cmake ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .

אפשר גם להתקין את ה-flatc במיקום התקנה מותאם אישית (למשל, לספרייה שמכילה כלים אחרים שפותחו באופן מקומי במקום ספריית CMake build):

cmake -DCMAKE_INSTALL_PREFIX=<native_tools_dir> ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .

עבור ההידור המשולב של TF Lite, צריך לספק פרמטר נוסף -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> שמפנה לספרייה שמכילה את הקובץ הבינארי המקורי flatc יחד עם הדגל -DTFLITE_KERNEL_TEST=on שהוזכר למעלה.

cmake -DCMAKE_TOOLCHAIN_FILE=${OE_CMAKE_TOOLCHAIN_FILE} -DTFLITE_KERNEL_TEST=on -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> ../tensorflow/lite/
השקה של בדיקות ליבה (יחידה) של הידור צולב ביחס ליעד

בדיקות יחידה יכולות להיות הרצה כקובצי הפעלה נפרדים או באמצעות כלי השירות CTest. מבחינת CTest, אם לפחות אחד מהפרמטרים מופעל ב-TFLITE_ENABLE_XNNPACKorTFLITE_EXTERNAL_DELEGATE' מ-TF Lite, הבדיקות שמתקבלות נוצרות עם שתי תוויות שונות (באמצעות אותו קובץ הפעלה לבדיקה): - פשוט - ציון של הבדיקות שמשמשות להאצלת סמכויות - ציון של הבדיקות ששימשו להאצלת סמכויות של מעבד (CPU) ב-

גם CTestTestfile.cmake וגם run-tests.cmake (כפי שמתואר בהמשך) זמינים ב-<build_dir>/kernels.

השקה של בדיקות יחידה בקצה העורפי של המעבד (CPU) (בתנאי שה-CTestTestfile.cmake נמצא ביעד בספרייה הנוכחית):

ctest -L plain

דוגמאות להשקה של בדיקות יחידה באמצעות נציגים (בתנאי שהקובץ CTestTestfile.cmake ו-run-tests.cmake נמצאים ביעד בספרייה הנוכחית):

cmake -E env TESTS_ARGUMENTS=--use_xnnpack=true ctest -L delegate
cmake -E env TESTS_ARGUMENTS=--external_delegate_path=<PATH> ctest -L delegate

מגבלה ידועה של הדרך הזו להצגת ארגומנטי השקה נוספים שקשורים להאצלה היא שהיא תומכת בפועל רק באלה שהערך המוחזר הצפוי שלהם הוא 0. ערכים שונים של החזרה ידווחו ככשל בבדיקה.

בעל גישה ל-OpenCL GPU

אם למכונת היעד יש תמיכה ב-OpenCL, תוכלו להשתמש בהענקת גישה ל-GPU כדי למנף את העוצמה של ה-GPU.

כדי להגדיר תמיכה בהענקת גישה ל-OpenCL GPU:

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_GPU=ON

שלב 5. יצירת TensorFlow Lite

בספרייה tflite_build,

cmake --build . -j

שלב 6. דוגמה ליצירת כלי השוואה לשוק של TensorFlow Lite ולתמונת תווית (אופציונלי)

בספרייה tflite_build,

cmake --build . -j -t benchmark_model
cmake --build . -j -t label_image

האפשרויות הזמינות לבניית TensorFlow Lite

בהמשך מופיעה רשימת האפשרויות הזמינות. אפשר לשנות אותו באמצעות -D<option_name>=[ON|OFF]. לדוגמה, -DTFLITE_ENABLE_XNNPACK=OFF כדי להשבית את XNNPACK שמופעל כברירת מחדל.

שם האפשרות תכונה Android Linux macOS Windows
TFLITE_ENABLE_RUY הפעל את ספריית הכפל של RUY מופעל מושבתת מושבתת מושבתת
TFLITE_ENABLE_GPU הפעלת גישה ל-GPU מושבתת מושבתת לא רלוונטי לא רלוונטי
TFLITE_ENABLE_XNNPACK הפעלה של נציג XNNPACK מופעל מופעל מופעל מופעל
TFLITE_ENABLE_MMAP הפעלת MMAP מופעל מופעל מופעל לא רלוונטי

יצירת פרויקט CMake שמשתמש ב-TensorFlow Lite

לפניכם CMakeLists.txt של הדוגמה המינימלית של TFLite.

צריך להוסיף את add_subdirectory() לספריית TensorFlow Lite, ולקשר את tensorflow-lite עם target_link_libraries().

cmake_minimum_required(VERSION 3.16)
project(minimal C CXX)

set(TENSORFLOW_SOURCE_DIR "" CACHE PATH
  "Directory that contains the TensorFlow project" )
if(NOT TENSORFLOW_SOURCE_DIR)
  get_filename_component(TENSORFLOW_SOURCE_DIR
    "${CMAKE_CURRENT_LIST_DIR}/../../../../" ABSOLUTE)
endif()

add_subdirectory(
  "${TENSORFLOW_SOURCE_DIR}/tensorflow/lite"
  "${CMAKE_CURRENT_BINARY_DIR}/tensorflow-lite" EXCLUDE_FROM_ALL)

add_executable(minimal minimal.cc)
target_link_libraries(minimal tensorflow-lite)

יצירת ספריית TensorFlow Lite C

אם אתם רוצים ליצור ספרייה משותפת של TensorFlow Lite עבור C API, קודם צריך לבצע את שלב 1 עד שלב 3. לאחר מכן, מריצים את הפקודות הבאות.

cmake ../tensorflow_src/tensorflow/lite/c
cmake --build . -j

הפקודה הזו יוצרת את הספרייה המשותפת הבאה בספרייה הנוכחית.

פלטפורמה שם הספרייה
Linux libtensorflowlite_c.so
macOS libtensorflowlite_c.dylib
Windows tensorflowlite_c.dll