TensorFlow Lite'ı CMake ile oluşturun

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 image tensorflow/tensorflow:devel üzerinde test edilmiştir.

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

CMake 3.16 veya üstü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.

Adım 2. TensorFlow deposunu klonlayın

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

3. Adım. CMake derleme dizinini oluşturun

mkdir tflite_build
cd tflite_build

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

Derlemeyi yayınla

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

Derlemede hata ayıklama

Sembol bilgilerine 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 testleriyle derleme

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

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

Yüklenebilir 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, kütüphane bağımlılıklarının kendi sürümlerini de sağlamalısınız. Bunların ayrıca TF Lite'a bağlı proje tarafından da kullanılması gerekecektir. -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON komutunu kullanabilir ve <PackageName>_DIR değişkenlerini kitaplık kurulumlarınızı 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

ARM64 veya Android hedef mimarilerine yönelik ikili dosyalar oluşturmak için CMake'i kullanabilirsiniz.

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

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Android çapraz derlemenin ö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 hedef ABI'yi -DANDROID_ABI bayrağıyla 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 çapraz derlemesinin özellikleri

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

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üz kodlu ikili dosyayı içeren dizine işaret eden ek -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> 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/
Ç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 söz konusu olduğunda, TFLITE_ENABLE_NNAPI, TFLITE_ENABLE_XNNPACK veya TFLITE_EXTERNAL_DELEGATE parametrelerinden en az biri TF Lite yapısı için 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ıştırılanlar - delege - kullanılan delege spesifikasyonu için kullanılan ek başlatma argümanlarını bekleyen testleri belirtir

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

CPU arka ucuyla birim testlerinin başlatılması ( CTestTestfile.cmake geçerli dizinde hedefte bulunması koşuluyla):

ctest -L plain

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

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 bağımsız değişkenleri sağlamanın bu yolunun bilinen bir sınırlaması , yalnızca beklenen dönüş değeri 0 olanların etkili bir şekilde desteklenmesidir. Farklı dönüş değerleri 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

6. Adım. TensorFlow Lite Karşılaştırma Aracını ve Etiket Görüntüsü Örneği Oluşturun (İsteğe Bağlı)

tflite_build dizininde,

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

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

İşte mevcut seçeneklerin listesi. Bunu -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 AÇIK KAPALI KAPALI KAPALI
TFLITE_ENABLE_NNAPI NNAPI temsilcisini etkinleştir AÇIK KAPALI Yok Yok
TFLITE_ENABLE_GPU GPU temsilcisini etkinleştir KAPALI KAPALI Yok Yok
TFLITE_ENABLE_XNNPACK XNNPACK temsilcisini 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şturun

İşte TFLite minimal örneğinin CMakeLists.txt dosyası.

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 kütüphanesini oluşturun

C API için TensorFlow Lite paylaşımlı kitaplığı oluşturmak istiyorsanız önce adım 1'den adım 3'e kadar olan adımları 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 Kütüphane adı
Linux libtensorflowlite_c.so
Mac os işletim sistemi libtensorflowlite_c.dylib
pencereler tensorflowlite_c.dll