בנה את TensorFlow Lite עם CMake

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

ההוראות הבאות נבדקו על אובונטו 16.04.3 64-bit PC (AMD64), macOS Catalina (x86_64), Windows 10 ו- TensorFlow devel Docker image tensorflow/tensorflow:devel .

שלב 1. התקן את כלי CMake

זה דורש CMake 3.16 ומעלה. באובונטו, אתה יכול פשוט להפעיל את הפקודה הבאה.

sudo apt-get install cmake

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

שלב 2. שיבוט מאגר TensorFlow

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

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

mkdir tflite_build
cd tflite_build

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

שחרר build

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

cmake ../tensorflow_src/tensorflow/lite

בניית באגים

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

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

בנה עם בדיקות יחידות ליבה

על מנת שתוכל להריץ בדיקות ליבה, עליך לספק את הדגל -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 או אנדרואיד.

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

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

עבור הידור צולב של 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 עבור ארכיטקטורת המארח. לצורך כך, קיים CMakeLists הממוקם ב- 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 למיקום התקנה מותאם אישית (למשל לספרייה המכילה כלים אחרים שנבנו באופן מקורי במקום ספריית ה-Build CMake):

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_NNAPI, TFLITE_ENABLE_XNNPACK או TFLITE_EXTERNAL_DELEGATE מופעל עבור ה-TF Lite build, הבדיקות המתקבלות נוצרות עם שתי תוויות שונות (בשימוש באותו קובץ הפעלה לבדיקה): - רגיל - מציין את הבדיקות אלה פועלים ב-CPU backend - delegate - מציינים את הבדיקות המצפים לארגומנטים של השקה נוספים המשמשים למפרט הנציג בשימוש

הן CTestTestfile.cmake והן run-tests.cmake (כפי שיוצג להלן) זמינים ב- <build_dir>/kernels .

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

ctest -L plain

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

cmake -E env TESTS_ARGUMENTS=--use_nnapi=true\;--nnapi_accelerator_name=vsi-npu ctest -L delegate
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 Delegate שיכול למנף את כוח ה-GPU שלך.

כדי להגדיר תמיכת נציגים של OpenCL GPU:

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

שלב 5. בניית TensorFlow Lite

בספריית tflite_build ,

cmake --build . -j

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

בספריית 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 המופעל כברירת מחדל.

שם אפשרות תכונה דְמוּי אָדָם לינוקס macOS חלונות
TFLITE_ENABLE_RUY אפשר את ספריית הכפל של מטריצות RUY עַל כבוי כבוי כבוי
TFLITE_ENABLE_NNAPI אפשר נציג NNAPI עַל כבוי לא לא
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 . לאחר מכן, הפעל את הפקודות הבאות.

לינוקס / MacOS

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

חלונות

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

ספריה מלוכדת

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

פּלַטפוֹרמָה שם הספרייה
לינוקס libtensorflowlite_c.so
macOS libtensorflowlite_c.dylib
חלונות tensorflowlite_c.dll