در این صفحه نحوه ساخت و استفاده از کتابخانه LiteRT با ابزار CMake توضیح داده شده است.
دستورالعملهای زیر روی رایانههای شخصی 64 بیتی اوبونتو 16.04.3 (AMD64)، macOS Catalina (x86_64)، Windows 10 و TensorFlow Devel Docker image tensorflow/tensorflow:devel آزمایش شدهاند.
به CMake 3.16 یا بالاتر نیاز دارد. در اوبونتو به سادگی می توانید دستور زیر را اجرا کنید.
sudo apt-get install cmake
یا می توانید راهنمای نصب رسمی cmake را دنبال کنید
git clone https://github.com/tensorflow/tensorflow.git tensorflow_src
mkdir tflite_build
cd tflite_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
استفاده کنید.
در حالت ایده آل باید نسخه های خود را از وابستگی های کتابخانه نیز ارائه دهید. اینها همچنین باید توسط پروژه ای که به 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 یا اندروید استفاده کنید.
برای کامپایل متقابل LiteRT، باید مسیر SDK (مانند ARM64 SDK یا NDK در مورد اندروید) را با پرچم -DCMAKE_TOOLCHAIN_FILE
ارائه دهید.
cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
برای کامپایل متقابل اندروید، باید 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 از قبل در یک فهرست ساخت جداگانه با استفاده از زنجیره ابزار میزبان ساخته شود.
mkdir flatc-native-build && cd flatc-native-build
cmake ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .
همچنین امکان نصب flatc در یک مکان نصب سفارشی وجود دارد (مثلاً در دایرکتوری حاوی سایر ابزارهای ساخته شده بومی به جای دایرکتوری ساخت 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/
تست های واحد را می توان به عنوان فایل های اجرایی جداگانه یا با استفاده از ابزار CTest اجرا کرد. تا آنجا که به CTest مربوط می شود، اگر حداقل یکی از پارامترهای TFLITE_ENABLE_XNNPACK or
TFLITE_EXTERNAL_DELEGATE برای ساخت LiteRT فعال باشد، آزمایش های حاصل با دو برچسب مختلف (با استفاده از یک آزمایش اجرایی مشابه) تولید می شوند: - ساده - نشان دهنده تست ها هستند. در باطن CPU - delegate - نشان دهنده آزمایش هایی است که انتظار راه اندازی آرگومان های اضافی مورد استفاده برای مشخصات نماینده استفاده شده را دارند
هر دو 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 استفاده کنید که می تواند قدرت GPU شما را افزایش دهد.
برای پیکربندی پشتیبانی نمایندگی OpenCL GPU:
cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_GPU=ON
در دایرکتوری tflite_build
،
cmake --build . -j
در دایرکتوری tflite_build
،
cmake --build . -j -t benchmark_model
cmake --build . -j -t label_image
در اینجا لیستی از گزینه های موجود است. می توانید با -D<option_name>=[ON|OFF]
آن را لغو کنید. به عنوان مثال، -DTFLITE_ENABLE_XNNPACK=OFF
برای غیرفعال کردن XNNPACK که به طور پیش فرض فعال است.
نام گزینه | ویژگی | اندروید | لینوکس | macOS | ویندوز |
---|---|---|---|---|---|
TFLITE_ENABLE_RUY | کتابخانه ضرب ماتریس RUY را فعال کنید | روشن | خاموش | خاموش | خاموش |
TFLITE_ENABLE_GPU | نماینده GPU را فعال کنید | خاموش | خاموش | N/A | N/A |
TFLITE_ENABLE_XNNPACK | نماینده XNNPACK را فعال کنید | روشن | روشن | روشن | روشن |
TFLITE_ENABLE_MMAP | MMAP را فعال کنید | روشن | روشن | روشن | N/A |
در اینجا نمونه CMakeLists.txt از TFLite حداقل است.
برای دایرکتوری LiteRT باید add_subdirectory() داشته باشید و 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 API بسازید، ابتدا مرحله 1 تا مرحله 3 را دنبال کنید. پس از آن دستورات زیر را اجرا کنید.
TENSORFLOW_VERSION=$(grep "TF_VERSION = " "../tensorflow_src/tensorflow/tf_version.bzl" | cut -d= -f2 | sed 's/[ "-]//g')
IFS='.' read -r -a array <<< "$TENSORFLOW_VERSION"
TF_MAJOR=${array[0]}
TF_MINOR=${array[1]}
TF_PATCH=${array[2]}
TF_CXX_FLAGS="-DTF_MAJOR_VERSION=${TF_MAJOR} -DTF_MINOR_VERSION=${TF_MINOR} -DTF_PATCH_VERSION=${TF_PATCH} -DTF_VERSION_SUFFIX=''"
cmake -DCMAKE_C_FLAGS="${TF_CXX_FLAGS}" -DCMAKE_CXX_FLAGS="${TF_CXX_FLAGS}" ../tensorflow_src/tensorflow/lite/c
cmake --build . -j
این دستور کتابخانه مشترک زیر را در دایرکتوری فعلی ایجاد می کند.
پلت فرم | نام کتابخانه |
---|---|
لینوکس | libtensorflowlite_c.so |
macOS | libtensorflowlite_c.dylib |
ویندوز | tensorflowlite_c.dll |