CMake ile TensorFlow Lite oluşturun

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

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

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

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

CMake 3.16 veya üstünü gerektirir. Ubuntu'da aşağıdaki komutu basitçe çalıştırabilirsiniz.

sudo apt-get install cmake

Veya resmi cmake kurulum kılavuzunu takip edebilirsiniz.

Adım 2. TensorFlow deposunu klonlayın

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

Adım 3. CMake derleme dizini oluşturun

mkdir tflite_build
cd tflite_build

Adım 4. Konfigürasyonlarla CMake aracını çalıştırın

Sürüm derlemesi

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

cmake ../tensorflow_src/tensorflow/lite

Hata ayıklama derlemesi

Sembol bilgisine sahip bir hata ayıklama yapısı 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 testleri ile derleme

Çekirdek testlerini çalıştırabilmek için '-DTFLITE_KERNEL_TEST=on' bayrağını sağlamanız gerekir. Birim testi çapraz derleme özellikleri bir sonraki alt bölümde bulunabilir.

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

Kurulabilir paket oluşturun

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

İdeal olarak, kendi kitaplık bağımlılık sürümlerinizi de sağlamalısınız. Bunların da TF Lite'a bağlı proje tarafından kullanılması gerekecektir. -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON kullanabilir ve <PackageName>_DIR değişkenlerini kitaplık kurulumlarınızı gösterecek şekilde ayarlayabilirsiniz.

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_INSTALL=ON \
  -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON \
  -Dabsl_DIR=<install path>/lib/cmake/absl \
  -DEigen3_DIR=<install path>/share/eigen3/cmake \
  -DFlatbuffers_DIR=<install path>/lib/cmake/flatbuffers \
  -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

ARM64 veya Android hedef mimarileri için ikili dosyalar oluşturmak için CMake'i kullanabilirsiniz.

TF Lite'ı çapraz derlemek için, -DCMAKE_TOOLCHAIN_FILE bayrağıyla SDK'ya giden yolu (örneğin Android'in durumunda ARM64 SDK veya NDK) sağlamanız gerekir.

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Android çapraz derlemesinin özellikleri

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

cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
  -DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
Çekirdek (birim) testleri çapraz derlemenin özellikleri

Birim testlerinin çapraz derlenmesi, ana bilgisayar mimarisi için düz derleyici gerektirir. Bu amaçla, tensorflow/lite/tools/cmake/native_tools/flatbuffers içinde, ana bilgisayar araç zincirini kullanarak ayrı bir derleme dizininde CMake ile flatc derleyicisini önceden oluşturmak için bir CMakeLists 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 kurulum konumuna kurmak da mümkündür (örneğin, CMake derleme dizini yerine yerel olarak oluşturulmuş diğer araçları içeren bir dizine):

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, yerel düzc ikili dosyasını içeren dizine işaret eden -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> ek parametresinin, yukarıda belirtilen -DTFLITE_KERNEL_TEST=on bayrağıyla birlikte sağlanması gerekir.

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

Birim testleri, ayrı yürütülebilir dosyalar olarak veya CTest yardımcı programı kullanılarak çalıştırılabilir. CTest söz konusu olduğunda, TF Lite derlemesi için TFLITE_ENABLE_NNAPI, TFLITE_ENABLE_XNNPACK veya TFLITE_EXTERNAL_DELEGATE parametrelerinden en az biri etkinleştirilirse, elde edilen testler iki farklı etiketle oluşturulur (aynı test yürütülebilir dosyasını kullanarak): - düz - testleri belirtir CPU arka ucunda çalışan - temsilci - kullanılan delege belirtimi için kullanılan ek başlatma argümanları bekleyen testleri belirtir

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

CPU arka ucu ile birim testlerinin başlatılması (geçerli dizinde hedefte CTestTestfile.cmake bulunması şartıyla):

ctest -L plain

Temsilcileri kullanarak birim testlerinin örneklerini başlatın (geçerli dizinde hedefte CTestTestfile.cmake ve run-tests.cmake dosyasının bulunması şartıyla):

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

Birim testlerine temsilciyle ilgili ek başlatma argümanları sağlamanın bu yolunun bilinen bir sınırlaması , yalnızca beklenen getiri değeri 0 olanları etkili bir şekilde desteklemesidir. Farklı dönüş değerleri bir test hatası olarak rapor edilecektir.

OpenCL GPU temsilcisi

Hedef makinenizde OpenCL desteği varsa, GPU gücünüzden yararlanabilecek GPU temsilcisini kullanabilirsiniz.

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

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

Adım 5. TensorFlow Lite'ı Oluşturun

tflite_build dizininde,

cmake --build . -j

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

tflite_build dizininde,

cmake --build . -j -t benchmark_model
tutucu17 l10n-yer
cmake --build . -j -t label_image

TensorFlow Lite oluşturmak için Mevcut Seçenekler

İşte mevcut seçeneklerin listesi. -D<option_name>=[ON|OFF] ile geçersiz kılabilirsiniz. Örneğin, varsayılan olarak etkin olan XNNPACK'i devre dışı bırakmak için -DTFLITE_ENABLE_XNNPACK=OFF .

Seçenek Adı Özellik Android Linux Mac os işletim sistemi pencereler
TFLITE_ENABLE_RUY RUY matris çarpım kitaplığını etkinleştir ÜZERİNDE KAPALI KAPALI KAPALI
TFLITE_ENABLE_NNAPI NNAPI temsilcisini etkinleştir ÜZERİNDE KAPALI Yok Yok
TFLITE_ENABLE_GPU GPU temsilcisini etkinleştir KAPALI KAPALI Yok Yok
TFLITE_ENABLE_XNNPACK XNNPACK temsilcisini etkinleştir ÜZERİNDE ÜZERİNDE ÜZERİNDE ÜZERİNDE
TFLITE_ENABLE_MMAP MMAP'yi etkinleştir ÜZERİNDE ÜZERİNDE ÜZERİNDE Yok

TensorFlow Lite kullanan bir CMake projesi oluşturun

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

TensorFlow Lite dizini için add_subdirectory()'ye sahip olmanız ve tensorflow-lite target_link_libraries() ile bağlamanı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şturun

C API için TensorFlow Lite paylaşılan kitaplığı oluşturmak istiyorsanız, önce adım 1 ila adım 3'ü izleyin. Bundan sonra 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.

platformu kitaplık adı
Linux libtensorflowlite_c.so
Mac os işletim sistemi libtensorflowlite_c.dylib
pencereler tensorflowlite_c.dll