בדף זה נסביר איך לבנות את ספריית LiteRT ולהשתמש בה עם CMake.
ההוראות הבאות נבדקו ב-Ubuntu 16.04.3 64-bit PC (AMD64) , macOS Catalina (x86_64), Windows 10 ו-TensorFlow קובץ אימג' של 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. יצירה של ספריית CMake build
mkdir tflite_build
cd tflite_build
שלב 4. הפעלת כלי CMake באמצעות הגדרות
גרסת ה-build
היא יוצרת קובץ בינארי של גרסה שעבר אופטימיזציה כברירת מחדל. אם רוצים ליצור עבור את תחנת העבודה, פשוט מריצים את הפקודה הבאה.
cmake ../tensorflow_src/tensorflow/lite
גרסת build של ניפוי באגים
אם צריך ליצור גרסת build של ניפוי באגים שיש בה מידע על סמלים, עליכם:
לספק את האפשרות -DCMAKE_BUILD_TYPE=Debug
.
cmake ../tensorflow_src/tensorflow/lite -DCMAKE_BUILD_TYPE=Debug
פיתוח באמצעות בדיקות של יחידת ליבה (kernel)
כדי שתוכלו להריץ בדיקות ליבה, צריך לספק
סימון -DTFLITE_KERNEL_TEST=on
. מפרטים של בדיקות יחידות בשילוב עם הידור מסוים יכולים להיות
שנמצא בסעיף המשנה הבא.
cmake ../tensorflow_src/tensorflow/lite -DTFLITE_KERNEL_TEST=on
בניית חבילה שניתנת להתקנה
כדי לבנות חבילה ניתנת להתקנה שיכולה לשמש כתלות של גורם אחר
CMake פרויקט באמצעות find_package(tensorflow-lite CONFIG)
, משתמשים
אפשרות -DTFLITE_ENABLE_INSTALL=ON
.
רצוי גם לספק גרסאות משלכם של יחסי תלות בספרייה.
גם הפרויקט שתלוי ב-LiteRT צריך להשתמש בהם. אפשר
יש להשתמש ב--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.
כדי לבצע הידור צולב של ה-LiteRT, עליכם לספק את הנתיב אל
את ה-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
הנחיות ספציפיות לגבי בדיקות ליבה (unit) של הידור (cross-compilation)
לצורך הידור מוצלב של בדיקות היחידה נדרש מהדר שטוח (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 .
אפשר גם להתקין את ה-flat במיקום מותאם אישית להתקנה. (לדוגמה, לספרייה שמכילה כלים שפותחו באופן טבעי במקום ה-CMake ):
cmake -DCMAKE_INSTALL_PREFIX=<native_tools_dir> ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .
עבור ההידור של LiteRT בהידור עצמו, פרמטר נוסף
-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/
השקת בדיקות ליבה (kernel) (יחידה) שעברו הידור סביב היעד
אפשר להריץ בדיקות יחידה כקובצי הפעלה נפרדים או להשתמש בכלי CTest. עד עכשיו
מאחר שיש בעיה ב-CTest, אם לפחות אחד מהפרמטרים
TFLITE_ENABLE_XNNPACKor
TFLITE_EXTERNAL_DELEGATE` מופעל עבור LiteRT
build, הבדיקות שמתקבלות נוצרות עם שתי תוויות שונות
(באמצעות אותו קובץ הפעלה לבדיקה): - פשוט – ציון הבדיקות שבהן מריצים
הקצה העורפי של המעבד (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 הוא 0. ערכי החזרה שונים ידווחו בתור כשל בבדיקה.
משתמש שקיבל הרשאה ל-OpenCL GPU
אם במחשב היעד יש תמיכה ב-OpenCL, אפשר להשתמש מקבל הגישה ל-GPU שיכול לנצל את עוצמת ה-GPU.
כדי להגדיר תמיכה בהענקת גישה ל-OpenCL GPU:
cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_GPU=ON
שלב 5. בניית LiteRT
בספרייה tflite_build
,
cmake --build . -j
שלב 6. דוגמה ליצירת כלי השוואה לשוק LiteRT ולתמונה של תווית (אופציונלי)
בספרייה tflite_build
,
cmake --build . -j -t benchmark_model
cmake --build . -j -t label_image
האפשרויות הזמינות לבניית LiteRT
בהמשך מופיעה רשימה של האפשרויות הזמינות. אפשר לשנות את ההגדרה הזו באמצעות
-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 המשתמש ב-LiteRT
הנה CMakeLists.txt של דוגמה ל-TFLite מינימלי.
יש צורך ב-add_subdirectory() עבור ספריית LiteRT וקישור
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)
יצירת ספריית LiteRT C
אם רוצים ליצור ספרייה משותפת של LiteRT עבור 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 |