בדף הזה נסביר איך ליצור את ספריית 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_XNNPACKor
TFLITE_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 |