قم ببناء TensorFlow Lite باستخدام CMake

تصف هذه الصفحة كيفية إنشاء مكتبة TensorFlow Lite واستخدامها باستخدام أداة CMake .

تم اختبار الإرشادات التالية على Ubuntu 16.04.3 64-bit PC (AMD64) و macOS Catalina (x86_64) و Windows 10 و TensorFlow devel Docker image 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

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

بناء مع اختبارات وحدة النواة

لكي تتمكن من تشغيل اختبارات kernel ، تحتاج إلى توفير علامة "-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 \
  -Dabsl_DIR=<install path>/lib/cmake/absl \
  -DEigen3_DIR=<install path>/share/eigen3/cmake \
  -DFlatbuffers_DIR=<install path>/lib/cmake/flatbuffers \
  -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
مواصفات اختبارات kernel (الوحدة) عبر التجميع

يتطلب التجميع المتقاطع لاختبارات الوحدة مترجمًا مسطحًا لمعمارية المضيف. لهذا الغرض ، توجد قوائم 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 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/
يتم تشغيل اختبارات kernel (الوحدة) المجمعة على الهدف

يمكن تشغيل اختبارات الوحدة كملفات تنفيذية منفصلة أو باستخدام الأداة المساعدة CTest. بقدر ما يتعلق الأمر بـ CTest ، إذا تم تمكين واحدة على الأقل من المعلمات TFLITE_ENABLE_NNAPI, TFLITE_ENABLE_XNNPACK أو TFLITE_EXTERNAL_DELEGATE لبناء TF Lite ، يتم إنشاء الاختبارات الناتجة باستخدام تسميتين مختلفتين (باستخدام نفس الاختبار القابل للتنفيذ): - عادي - تدل على الاختبارات تلك التي تعمل على خلفية وحدة المعالجة المركزية (CPU) - مفوض - تشير إلى الاختبارات التي تتوقع وسيطات تشغيل إضافية مستخدمة لمواصفات المفوض المستخدمة

يتوفر كل من CTestTestfile.cmake و run-tests.cmake (كما هو مشار إليه أدناه) في <build_dir>/kernels .

إطلاق اختبارات الوحدة مع الواجهة الخلفية لوحدة المعالجة المركزية (بشرط أن يكون 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 . سيتم الإبلاغ عن قيم إرجاع مختلفة كفشل اختبار.

مفوض OpenCL GPU

إذا كان جهازك المستهدف يدعم OpenCL ، فيمكنك استخدام مندوب GPU الذي يمكنه الاستفادة من قوة وحدة معالجة الرسومات الخاصة بك.

لتكوين دعم مفوض OpenCL GPU:

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_GPU=ON

الخطوة 5. قم ببناء TensorFlow Lite

في دليل tflite_build ،

cmake --build . -j

الخطوة السادسة: إنشاء أداة قياس الأداء 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 الذي يتم تمكينه افتراضيًا.

اسم الخيار ميزة ذكري المظهر لينكس macOS شبابيك
TFLITE_ENABLE_RUY تفعيل مكتبة ضرب مصفوفة RUY على إيقاف إيقاف إيقاف
TFLITE_ENABLE_NNAPI تمكين مفوض NNAPI على إيقاف غير متاح غير متاح
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

يقوم هذا الأمر بإنشاء المكتبة المشتركة التالية في الدليل الحالي.

برنامج اسم المكتبة
لينكس libtensorflowlite_c.so
macOS libtensorflowlite_c.dylib
شبابيك tensorflowlite_c.dll