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

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

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

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