CMake ile TensorFlow Lite 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.

Adım 1. CMake aracını kurun

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

Adım 3. CMake derleme dizini oluşturun

mkdir tflite_build
cd tflite_build

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

Yapıyı yayınla

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

cmake ../tensorflow_src/tensorflow/lite

Yapıda hata ayıklama

Sembol bilgisine sahip bir hata ayıklama yapısı üretmeniz gerekiyorsa, -DCMAKE_BUILD_TYPE=Debug seçeneğini sağlamanız gerekir.

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

Çekirdek birim testleriyle oluşturun

Ç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 ayrıca 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ıza 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 mimarileri için ikili dosyalar oluşturmak üzere CMake'i kullanabilirsiniz.

TF Lite'ı çapraz derlemek için, yani -DCMAKE_TOOLCHAIN_FILE bayrağıyla SDK'ya giden yolu (örneğin, Android 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'yi yüklemeniz ve yukarıda belirtilen -DCMAKE_TOOLCHAIN_FILE bayrağıyla NDK yolunu sağlamanız gerekir. Ayrıca -DANDROID_ABI bayrağıyla hedef ABI belirlemeniz gerekir.

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

Birim testlerinin çapraz derlemesi, ana bilgisayar mimarisi için düzc derleyici gerektirir. Bu amaçla, ana araç zincirini kullanarak ayrı bir yapı dizininde önceden CMake ile düzc derleyicisini oluşturmak için tensorflow/lite/tools/cmake/native_tools/flatbuffers konumunda bulunan bir CMakeLists vardır.

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 da kurmak mümkündür (örn. CMake yapı 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, yukarıda bahsedilen -DTFLITE_KERNEL_TEST=on bayrağıyla birlikte yerel flatc ikilisini içeren dizini işaret eden -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> ek 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ır

Birim testleri, ayrı yürütülebilir dosyalar olarak veya CTest yardımcı programı kullanılarak çalıştırılabilir. CTest ile ilgili olarak, TF Lite yapısı için TFLITE_ENABLE_NNAPI, TFLITE_ENABLE_XNNPACK veya TFLITE_EXTERNAL_DELEGATE parametrelerinden en az biri etkinleştirilirse, ortaya çıkan 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 - temsilci - kullanılan temsilci belirtimi için kullanılan ek başlatma bağımsız değişkenlerini 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 ucuyla birim testlerinin başlatılması ( CTestTestfile.cmake geçerli dizinde hedefte bulunması koşuluyla):

ctest -L plain

Delegeler kullanarak birim testi başlatma örnekleri ( 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 temsilci ile ilgili ek başlatma bağımsız değişkenleri sağlamanın bu yolunun bilinen bir sınırlaması , yalnızca 0 beklenen dönüş değerine sahip olanları etkili bir şekilde desteklemesidir. Farklı dönüş değerleri test hatası olarak bildirilecektir.

OpenCL GPU temsilcisi

Hedef makinenizde OpenCL desteği varsa, GPU gücünüzü artırabilen GPU temsilcisini kullanabilirsiniz.

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

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

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

tflite_build dizininde,

cmake --build . -j

6. Adım. TensorFlow Lite Karşılaştırma Aracı 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 Kullanılabilir 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 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'ı 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 kitaplığı oluşturun

C API için TensorFlow Lite paylaşılan kitaplığı oluşturmak istiyorsanız, önce 1. adımdan 3. adıma 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 kitaplık adı
linux libtensorflowlite_c.so
Mac os işletim sistemi libtensorflowlite_c.dylib
pencereler tensorflowlite_c.dll
,

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.

Adım 1. CMake aracını kurun

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

Adım 3. CMake derleme dizini oluşturun

mkdir tflite_build
cd tflite_build

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

Yapıyı yayınla

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

cmake ../tensorflow_src/tensorflow/lite

Yapıda hata ayıklama

Sembol bilgisine sahip bir hata ayıklama yapısı üretmeniz gerekiyorsa, -DCMAKE_BUILD_TYPE=Debug seçeneğini sağlamanız gerekir.

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

Çekirdek birim testleriyle oluşturun

Ç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 ayrıca 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ıza 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 mimarileri için ikili dosyalar oluşturmak üzere CMake'i kullanabilirsiniz.

TF Lite'ı çapraz derlemek için, yani -DCMAKE_TOOLCHAIN_FILE bayrağıyla SDK'ya giden yolu (örneğin, Android 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'yi yüklemeniz ve yukarıda belirtilen -DCMAKE_TOOLCHAIN_FILE bayrağıyla NDK yolunu sağlamanız gerekir. Ayrıca -DANDROID_ABI bayrağıyla hedef ABI belirlemeniz gerekir.

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

Birim testlerinin çapraz derlemesi, ana bilgisayar mimarisi için düzc derleyici gerektirir. Bu amaçla, ana araç zincirini kullanarak ayrı bir yapı dizininde önceden CMake ile düzc derleyicisini oluşturmak için tensorflow/lite/tools/cmake/native_tools/flatbuffers konumunda bulunan bir CMakeLists vardır.

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 da kurmak mümkündür (örn. CMake yapı 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, yukarıda bahsedilen -DTFLITE_KERNEL_TEST=on bayrağıyla birlikte yerel flatc ikilisini içeren dizini işaret eden -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> ek 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ır

Birim testleri, ayrı yürütülebilir dosyalar olarak veya CTest yardımcı programı kullanılarak çalıştırılabilir. CTest ile ilgili olarak, TF Lite yapısı için TFLITE_ENABLE_NNAPI, TFLITE_ENABLE_XNNPACK veya TFLITE_EXTERNAL_DELEGATE parametrelerinden en az biri etkinleştirilirse, ortaya çıkan 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 - temsilci - kullanılan temsilci belirtimi için kullanılan ek başlatma bağımsız değişkenlerini 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 ucuyla birim testlerinin başlatılması ( CTestTestfile.cmake geçerli dizinde hedefte bulunması koşuluyla):

ctest -L plain

Delegeler kullanarak birim testi başlatma örnekleri ( 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 temsilci ile ilgili ek başlatma bağımsız değişkenleri sağlamanın bu yolunun bilinen bir sınırlaması , yalnızca 0 beklenen dönüş değerine sahip olanları etkili bir şekilde desteklemesidir. Farklı dönüş değerleri test hatası olarak bildirilecektir.

OpenCL GPU temsilcisi

Hedef makinenizde OpenCL desteği varsa, GPU gücünüzü artırabilen GPU temsilcisini kullanabilirsiniz.

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

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

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

tflite_build dizininde,

cmake --build . -j

6. Adım. TensorFlow Lite Karşılaştırma Aracı 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 Kullanılabilir 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 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'ı 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 kitaplığı oluşturun

C API için TensorFlow Lite paylaşılan kitaplığı oluşturmak istiyorsanız, önce 1. adımdan 3. adıma 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 kitaplık adı
linux libtensorflowlite_c.so
Mac os işletim sistemi libtensorflowlite_c.dylib
pencereler tensorflowlite_c.dll