TensorFlow Lite را با CMake بسازید

در این صفحه نحوه ساخت و استفاده از کتابخانه TensorFlow Lite با ابزار 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 استفاده کنید.

در حالت ایده آل باید نسخه های خود را از وابستگی های کتابخانه نیز ارائه دهید. اینها همچنین باید توسط پروژه ای که به 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 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 .

برای خود کامپایل متقابل 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 فعال باشد، آزمایش های حاصل با دو برچسب مختلف تولید می شوند: - با استفاده از همان test-execut. مواردی که روی باطن 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_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 پشتیبانی می‌کند. مقادیر مختلف بازگشتی به عنوان خطای تست گزارش می شود.

نماینده GPU OpenCL

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

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

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

در اینجا نمونه CMakeLists.txt از TFLite حداقل است.

برای دایرکتوری TensorFlow Lite باید 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)

کتابخانه 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
سیستم عامل مک libtensorflowlite_c.dylib
پنجره ها tensorflowlite_c.dll