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

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

تم اختبار الإرشادات التالية على Ubuntu 16.04.3 PC 64 بت (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 \
  -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 لإنشاء مترجم 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، فسيتم إنشاء الاختبارات الناتجة بمسميتين مختلفتين (باستخدام نفس الاختبار القابل للتنفيذ): - عادي - للإشارة إلى الاختبارات يتم تشغيل تلك الاختبارات على الواجهة الخلفية لوحدة المعالجة المركزية - المفوض - للإشارة إلى الاختبارات التي تتوقع وسائط تشغيل إضافية مستخدمة لمواصفات المفوض المستخدمة

يتوفر كل من 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 الذي يمكنه الاستفادة من قوة 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 على عن لا يوجد لا يوجد
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
ماك libtensorflowlite_c.dylib
شبابيك tensorflowlite_c.dll