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

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

تم اختبار التعليمات التالية على أجهزة الكمبيوتر الشخصي التي تعمل بالإصدار 16.04.3 من Ubuntu 16.04.3 64 بت (AMD64) وmacOS Catalina (x86_64) وWindows 10 وTensorFlow Devel Docker tensorflow/tensorflow:devel.

الخطوة 1. تثبيت أداة CMake

ويتطلب الإصدار 3.16 من CMake أو إصدار أحدث. على 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

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

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

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

بالنسبة إلى التجميع المتبادل في 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، إذا تم تفعيل معلمة على الأقلor

يتوفر كل من 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

الخطوة الخامسة. إصدار 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 المفعَّل تلقائيًا.

اسم الخيار الميزة Android Linux macOS Windows
TFLITE_ENABLE_RUY تفعيل مكتبة ضرب مصفوفة RUY مفعَّلة إيقاف إيقاف إيقاف
TFLITE_ENABLE_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

يُنشئ هذا الأمر المكتبة المشتركة التالية في الدليل الحالي.

النظام الأساسي اسم المكتبة
Linux libtensorflowlite_c.so
macOS libtensorflowlite_c.dylib
Windows tensorflowlite_c.dll