LiteRT را با CMake بسازید

در این صفحه نحوه ساخت و استفاده از کتابخانه LiteRT با ابزار CMake توضیح داده شده است.

دستورالعمل‌های زیر روی رایانه‌های شخصی 64 بیتی اوبونتو 16.04.3 (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 را ایجاد کنید

mkdir tflite_build
cd tflite_build

مرحله 4. ابزار CMake را با تنظیمات اجرا کنید

ساخت را منتشر کنید

به طور پیش فرض یک نسخه باینری بهینه شده تولید می کند. اگر می خواهید برای ایستگاه کاری خود بسازید، به سادگی دستور زیر را اجرا کنید.

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 پشتیبانی می‌کند. مقادیر مختلف بازگشتی به عنوان خطای تست گزارش می شود.

نماینده GPU OpenCL

اگر دستگاه مورد نظر شما از 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 که به طور پیش فرض فعال است.

نام گزینه ویژگی اندروید لینوکس macOS ویندوز
TFLITE_ENABLE_RUY کتابخانه ضرب ماتریس RUY را فعال کنید روشن خاموش خاموش خاموش
TFLITE_ENABLE_GPU نماینده GPU را فعال کنید خاموش خاموش N/A N/A
TFLITE_ENABLE_XNNPACK نماینده XNNPACK را فعال کنید روشن روشن روشن روشن
TFLITE_ENABLE_MMAP MMAP را فعال کنید روشن روشن روشن N/A

یک پروژه CMake ایجاد کنید که از LiteRT استفاده می کند

در اینجا نمونه 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

اگر می خواهید کتابخانه اشتراکی LiteRT را برای C API بسازید، ابتدا مرحله 1 تا مرحله 3 را دنبال کنید. پس از آن دستورات زیر را اجرا کنید.

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

این دستور کتابخانه مشترک زیر را در دایرکتوری فعلی ایجاد می کند.

پلت فرم نام کتابخانه
لینوکس libtensorflowlite_c.so
macOS libtensorflowlite_c.dylib
ویندوز tensorflowlite_c.dll