CMake ile LiteRT Oluşturma

Bu sayfada, LiteRT kitaplığını CMake aracı.

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

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

CMake 3.16 veya sonraki bir sürümü gerektirir. Ubuntu'da aşağıdaki komutu çalıştırarak komutuna dokunun.

sudo apt-get install cmake

İsterseniz resmi cmake kurulum kılavuzu

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ırma

Sürüm derlemesi

Varsayılan olarak optimize edilmiş bir sürüm ikili programı oluşturur. Belirli bir kitle için aşağıdaki komutu çalıştırmanız yeterlidir.

cmake ../tensorflow_src/tensorflow/lite

Derlemede hata ayıklama

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

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şareti. Ünite testi çapraz derleme ayrıntıları bulabilirsiniz.

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

Yüklenebilir paket derleyin

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

İdeal olarak kendi kitaplık bağımlılık sürümlerini de sağlamanız gerekir. Bunlar, LiteRT'e bağlı proje tarafından da kullanılmalıdır. Şunları yapabilirsiniz: -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON öğesini kullanın ve <PackageName>_DIR ayarlayın işaret edecek değişkenler kullanın.

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 programlar oluşturmak üzere CMake'i kullanabilirsiniz.

LiteRT'yi çapraz derlemek için öncelikle -DCMAKE_TOOLCHAIN_FILE içeren SDK (ör. ARM64 SDK veya Android'de NDK) tıklayın.

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

Android çapraz derlemesi için, Android NDK'ya gidin ve NDK yoluna Yukarıda bahsedilen -DCMAKE_TOOLCHAIN_FILE işareti. Ayrıca, hedef ABI'yı -DANDROID_ABI işareti.

cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
  -DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
Çekirdek (birim) tarafından çapraz derleme testinin ayrıntıları

Birim testlerinin çapraz derlenmesi için ana makine için düzc derleyici gerekir bahsedeceğim. Bu amaçla, Flatc'i oluşturmak için tensorflow/lite/tools/cmake/native_tools/flatbuffers ana makineyi kullanarak ayrı bir derleme dizininde önceden CMake ile derleyici kullanabilirsiniz.

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 yüklemek de mümkündür. (ör. CMake yerine yerel olarak oluşturulmuş diğer araçları içeren bir dizine derleme dizini):

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

LiteRT çapraz derlemesinin kendisi için ek parametre -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path>, şunu içeren dizini işaret eder: yerel flatc ikili programının Yukarıda bahsedilen -DTFLITE_KERNEL_TEST=on işareti.

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 hedeflendiği gibi başlatılır

Birim testleri, ayrı yürütülebilir dosyalar olarak veya CTest yardımcı programı kullanılarak çalıştırılabilir. Şu ana kadar (CTest açısından) parametrelerden en az biri TFLITE_ENABLE_XNNPACKorTFLITE_EXTERNAL_DELEGATE` LiteRT için etkinleştirildi oluşturulan testler, iki farklı etiketle oluşturulur. (aynı yürütülebilir test aracını kullanarak): - düz - üzerinde çalıştırılan testleri belirtir CPU arka ucu - yetki ver - ek lansman bekleyen testleri belirtir kullanılan delege spesifikasyonu için kullanılan bağımsız değişkenler

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

CPU arka ucu ile birim testlerinin başlatılması (CTestTestfile.cmake öğesinin mevcut dizindeki hedefte mevcut):

ctest -L plain

Yetki verilmiş kullanıcıları kullanarak birim testleri örnekleri oluşturun ( CTestTestfile.cmake ve run-tests.cmake dosya şurada hedeflendiği gibi mevcut: şu dizinde olacaktır):

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

Bu şekilde, yetki verilmiş kullanıcılarla ilgili ek bilgilerin sağlanmasına ilişkin bilinen bir sınırlama için lansman argümanı, birim testlerine ilişkin belirli bir nedeni, yalnızca beklenen dönüş değeri 0. Farklı dönüş değerleri test hatasıdır.

OpenCL GPU delegesi

Hedef makinenizde OpenCL desteği varsa bunu yapmak için GPU temsilcisi, tam olarak bunu yapmanızı öneririm.

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

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

5. Adım: LiteRT oluştur

tflite_build dizininde,

cmake --build . -j

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

tflite_build dizininde,

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

LiteRT oluşturmak için Kullanılabilen Seçenekler

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

Seçenek Adı Özellik Android Linux macOS Windows
TFLITE_ENABLE_RUY RUY'yi etkinleştir matris çarpma kütüphane AÇIK KAPALI KAPALI KAPALI
TFLITE_ENABLE_GPU GPU'yu etkinleştir delege KAPALI KAPALI Yok Yok
TFLITE_ENABLE_XNNPACK XNNPACK'ı etkinleştir delege AÇIK AÇIK AÇIK AÇIK
TFLITE_ENABLE_MMAP MMAP'yi etkinleştir AÇIK AÇIK AÇIK Yok

LiteRT kullanan bir CMake projesi oluşturma

Buradaki CMakeLists.txt dosyası Minimum TFLite örneği.

LiteRT dizini ve bağlantısı için add_subdirectory() işlevini kullanmanız gerekir target_link_libraries() ile tensorflow-lite.

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)

LiteRT C kitaplığı oluşturma

Şunun için LiteRT paylaşılan kitaplığı oluşturmak istiyorsanız: C API 1. adımı uygulayın: 3. adıma öncelik verin. Bundan sonra, ekleyebilirsiniz.

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