CMake ile TensorFlow Lite Geliştirme

Bu sayfada, TensorFlow Lite kitaplığının CMake aracıyla nasıl oluşturulacağı ve kullanılacağı açıklanmaktadır.

Aşağıdaki talimatlar Ubuntu 16.04.3 64 bit PC (AMD64), macOS Catalina (x86_64), Windows 10 ve TensorFlow devel Docker görüntüsü tensorflow/tensorflow:devel üzerinde test edilmiştir.

1. Adım: CMake aracını yükleyin

CMake 3.16 veya sonraki bir sürümünü gerektirir. Ubuntu'da, aşağıdaki komutu çalıştırmanız yeterlidir.

sudo apt-get install cmake

Veya resmi cmake kurulum kılavuzunu takip edebilirsiniz

2. adım: TensorFlow deposunu klonlama

git clone https://github.com/tensorflow/tensorflow.git tensorflow_src

3. adım: CMake derleme dizini oluşturma

mkdir tflite_build
cd tflite_build

4. Adım: Yapılandırmalarla CMake aracını çalıştır

Derlemeyi yayınlayın

Varsayılan olarak, optimize edilmiş bir sürüm ikili programı oluşturur. İş istasyonunuz için derleme oluşturmak istiyorsanız aşağıdaki komutu çalıştırmanız yeterlidir.

cmake ../tensorflow_src/tensorflow/lite

Hata ayıklama derlemesi

Sembol bilgileri içeren bir hata ayıklama derlemesi oluşturmanız gerekiyorsa -DCMAKE_BUILD_TYPE=Debug seçeneğini sağlamanız gerekir.

cmake ../tensorflow_src/tensorflow/lite -DCMAKE_BUILD_TYPE=Debug

Çekirdek birim testleriyle derleme

Çekirdek testlerini çalıştırabilmek için -DTFLITE_KERNEL_TEST=on işaretini sağlamanız gerekir. Birim testi çapraz derlemeyle ilgili özellikler sonraki alt bölümde bulunabilir.

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_KERNEL_TEST=on

Yüklenebilir paket derleyin

find_package(tensorflow-lite CONFIG) ile başka bir CMake projesi tarafından bağımlılık olarak kullanılabilecek yüklenebilir bir paket oluşturmak için -DTFLITE_ENABLE_INSTALL=ON seçeneğini kullanın.

İdeal olarak kendi kitaplık bağımlılıklarının sürümlerini de sağlamanız gerekir. Bunların, TF Lite'ı kullanan proje tarafından da kullanılması gerekir. -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON kullanabilir ve <PackageName>_DIR değişkenlerini kitaplık yüklemelerinize işaret edecek şekilde ayarlayabilirsiniz.

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

Çapraz derleme

CMake'i kullanarak ARM64 veya Android hedef mimarileri için ikili programlar oluşturabilirsiniz.

TF Lite'ı çapraz derlemek için SDK'nın yolunu (ör. Android'de ARM64 SDK veya NDK) -DCMAKE_TOOLCHAIN_FILE işaretiyle sağlamanız gerekir.

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Android çapraz derlemesinin ayrıntıları

Android çapraz derlemesi için Android NDK'yı yüklemeniz ve NDK yolunu yukarıda belirtilen -DCMAKE_TOOLCHAIN_FILE işaretiyle sağlamanız gerekir. Ayrıca -DANDROID_ABI işaretiyle hedef ABI'yı ayarlamanız gerekir.

cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
  -DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
Çekirdek (birim) testlerinin ayrıntıları, çapraz derlemeyi test eder

Birim testlerinin çapraz derlemesi, ana makine mimarisi için düzc derleyici gerektirir. Bu amaçla, ana makine araç zincirini kullanarak ayrı bir derleme dizininde önceden CMake ile düzc derleyiciyi derlemek için tensorflow/lite/tools/cmake/native_tools/flatbuffers konumunda bulunan bir CMakeList'ler bulunur.

mkdir flatc-native-build && cd flatc-native-build
cmake ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .

flatc'yi özel bir yükleme konumuna (ör. CMake derleme dizini yerine yerel olarak oluşturulmuş diğer araçları içeren bir dizine) de yükleyebilirsiniz:

cmake -DCMAKE_INSTALL_PREFIX=<native_tools_dir> ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .

TF Lite çapraz derlemesinin kendisi için yukarıda belirtilen -DTFLITE_KERNEL_TEST=on işaretiyle birlikte, yerel flatc ikili programını içeren dizine işaret eden ek -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> parametresinin sağlanması gerekir.

cmake -DCMAKE_TOOLCHAIN_FILE=${OE_CMAKE_TOOLCHAIN_FILE} -DTFLITE_KERNEL_TEST=on -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> ../tensorflow/lite/
Çapraz derlenmiş çekirdek (birim) testleri hedefte başlatılıyor

Birim testleri, ayrı yürütülebilir dosyalar olarak veya CTest yardımcı programı kullanılarak çalıştırılabilir. CTest açısından bakıldığında, TFLITE_ENABLE_XNNPACKorTFLITE_EXTERNAL_DELEGATE" parametrelerinden en az biri TF Lite derlemesi için etkinleştirilmişse sonuçta ortaya çıkan testler iki farklı etiketle oluşturulur (aynı test yürütülebilir): - düz (kullanılan arka uç testlerinin belirlenmesini beklediğini belirtir) net CPU'da çalıştırılan ek spesifikasyonları açıklayarak - TF Lite derlemesi için

Hem CTestTestfile.cmake hem de run-tests.cmake (aşağıda belirtildiği gibi) <build_dir>/kernels içinde kullanılabilir.

CPU arka ucuyla birim testlerinin başlatılması (CTestTestfile.cmake öğesinin geçerli dizinde hedef üzerinde olması koşuluyla):

ctest -L plain

Yetki verilmiş kullanıcıları kullanan birim test örneklerini başlatma (CTestTestfile.cmake ve run-tests.cmake dosyasının geçerli dizinde hedefte bulunması koşuluyla):

cmake -E env TESTS_ARGUMENTS=--use_xnnpack=true ctest -L delegate
cmake -E env TESTS_ARGUMENTS=--external_delegate_path=<PATH> ctest -L delegate

Birim testlerine temsilciyle ilgili ek başlatma bağımsız değişkenleri sağlamanın bu yolunun bilinen bir sınırlaması, yöntemin yalnızca beklenen dönüş değeri 0'a sahip olanları etkin bir şekilde desteklemesidir. Farklı dönüş değerleri test hatası olarak raporlanır.

OpenCL GPU temsilcisi

Hedef makinenizde OpenCL desteği varsa GPU gücünden yararlanmak için GPU temsilcisi kullanabilirsiniz.

OpenCL GPU yetki verme desteğini yapılandırmak için:

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

5. Adım: TensorFlow Lite'ı Derleme

tflite_build dizininde,

cmake --build . -j

6. Adım: TensorFlow Lite Karşılaştırma Aracı Oluşturma ve Etiket Resmi Örneği (İsteğe bağlı)

tflite_build dizininde,

cmake --build . -j -t benchmark_model
cmake --build . -j -t label_image

TensorFlow Lite'ı geliştirmek için Kullanılabilecek Seçenekler

Kullanılabilir seçeneklerin listesi aşağıda verilmiştir. Bunu -D<option_name>=[ON|OFF] ile geçersiz kılabilirsiniz. Örneğin, varsayılan olarak etkin olan XNNPACK'yi devre dışı bırakmak için -DTFLITE_ENABLE_XNNPACK=OFF.

Seçenek Adı Öne Çıkarın Android Linux macOS Windows
TFLITE_ENABLE_RUY RUY matrisi çoğaltmayı kitaplığı etkinleştir AÇIK KAPALI KAPALI KAPALI
TFLITE_ENABLE_GPU GPU yetkilendirmesini etkinleştir KAPALI KAPALI Yok Yok
TFLITE_ENABLE_XNNPACK XNNPACK yetkisini etkinleştir AÇIK AÇIK AÇIK AÇIK
TFLITE_ENABLE_MMAP MMAP'yi etkinleştir AÇIK AÇIK AÇIK Yok

TensorFlow Lite kullanan bir CMake projesi oluşturma

TFLite minimal örneğinin CMakeLists.txt dosyasını burada bulabilirsiniz.

TensorFlow Lite dizini için add_subdirectory() öğesine sahip olmanız ve tensorflow-lite ile target_link_libraries() arasında bağlantı oluşturmanız gerekir.

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 kitaplığı oluşturma

C API için TensorFlow Lite paylaşılan kitaplığı oluşturmak istiyorsanız önce 1. adımı ile 3. adımı uygulayın. Ardından aşağıdaki komutları çalıştırın.

cmake ../tensorflow_src/tensorflow/lite/c
cmake --build . -j

Bu komut, geçerli dizinde aşağıdaki paylaşılan kitaplığı oluşturur.

Platform Kütüphanenin adı
Linux libtensorflowlite_c.so
macOS libtensorflowlite_c.dylib
Windows tensorflowlite_c.dll