إنشاء LiteRT باستخدام CMake

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

تم اختبار التعليمات التالية على جهاز كمبيوتر يعمل بنظام التشغيل Ubuntu 16.04.3 64 بت (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

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

إنشاء حزمة قابلة للتثبيت

يشير هذا المصطلح إلى إنشاء حزمة قابلة للتثبيت يمكن استخدامها كتبعية على جهاز آخر. يمكنك إنشاء مشروع باستخدام 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) (مثل حزمة تطوير البرامج (SDK) ARM64 أو 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
خصائص اختبار النواة (الوحدة) في التجميع المتبادل

يتطلب التجميع التبادلي لاختبارات الوحدة محول التحويل البرمجي المسطح للمضيف الهندسة المعمارية. لهذا الغرض، توجد قوائم CMakeLists موجودة في tensorflow/lite/tools/cmake/native_tools/flatbuffers لإنشاء الشقة برنامج التحويل البرمجي باستخدام 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_XNNPACKorTFLITE_EXTERNAL_DELEGATE` مفعّل لـ LiteRT الإصدار، يتم إنشاء الاختبارات الناتجة باستخدام تصنيفَين مختلفَين. (باستخدام الاختبار القابل للتنفيذ نفسه): - عادي - للإشارة إلى الاختبارات التي يتم إجراؤها عليها الخلفية لوحدة المعالجة المركزية (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. وسيتم الإبلاغ عن القيم المعروضة المختلفة باعتبارها فشل الاختبار.

تفويض وحدة معالجة الرسومات OpenCL

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

لضبط دعم تفويض وحدة معالجة الرسومات OpenCL:

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

الخطوة الخامسة. إنشاء LiteRT

في دليل tflite_build،

cmake --build . -j

الخطوة السادسة. مثال على أداة قياس الأداء في 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 نظام التشغيل Mac Windows
TFLITE_ENABLE_RUY تفعيل RUY مصفوفة الضرب مكتبة تفعيل إيقاف إيقاف إيقاف
TFLITE_ENABLE_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
نظام التشغيل Mac libtensorflowlite_c.dylib
Windows tensorflowlite_c.dll