Genel Bakış
Cihaz içi makine öğrenimi (ODML) uygulamalarına yönelik modelleri dağıtırken, mobil cihazlarda kullanılabilen sınırlı belleğin farkında olmak önemlidir. Model ikili boyutları, modelde kullanılan işlem sayısıyla yakından ilişkilidir. TensorFlow Lite, seçici yapıları kullanarak model ikili boyutlarını azaltmanıza olanak tanır. Seçici yapılar, model kümenizde kullanılmayan işlemleri atlar ve yalnızca modelin mobil cihazınızda çalışması için gereken çalışma zamanı ve işlem çekirdeklerini içeren kompakt bir kitaplık oluşturur.
Seçmeli yapı aşağıdaki üç işlem kitaplığında geçerlidir.
- TensorFlow Lite yerleşik işlem kitaplığı
- TensorFlow Lite özel işlemleri
- TensorFlow işlem kütüphanesini seçin
Aşağıdaki tablo, bazı yaygın kullanım durumları için seçici derlemelerin etkisini göstermektedir:
Model adı | İhtisas | Hedef mimari | AAR dosya boyutları |
---|---|---|---|
Mobilenet_1.0_224(float) | Görüntü sınıflandırması | armeabi-v7a | tensorflow-lite.aar (296.635 bayt) |
arm64-v8a | tensorflow-lite.aar (382.892 bayt) | ||
BAHARAT | Ses perdesi çıkarma | armeabi-v7a | tensorflow-lite.aar (375.813 bayt) tensorflow-lite-select-tf-ops.aar (1.676.380 bayt) |
arm64-v8a | tensorflow-lite.aar (421.826 bayt) tensorflow-lite-select-tf-ops.aar (2.298.630 bayt) | ||
i3d-kinetik-400 | Video sınıflandırması | armeabi-v7a | tensorflow-lite.aar (240.085 bayt) tensorflow-lite-select-tf-ops.aar (1.708.597 bayt) |
arm64-v8a | tensorflow-lite.aar (273.713 bayt) tensorflow-lite-select-tf-ops.aar (2.339.697 bayt) |
TensorFlow Lite'ı Bazel ile seçici olarak oluşturun
Bu bölümde TensorFlow kaynak kodlarını indirdiğinizi ve yerel geliştirme ortamını Bazel'e kurduğunuzu varsayarız.
Android projesi için AAR dosyaları oluşturun
Model dosya yollarınızı aşağıdaki gibi sağlayarak özel TensorFlow Lite AAR'ları oluşturabilirsiniz.
sh tensorflow/lite/tools/build_aar.sh \
--input_models=/a/b/model_one.tflite,/c/d/model_two.tflite \
--target_archs=x86,x86_64,arm64-v8a,armeabi-v7a
Yukarıdaki komut, TensorFlow Lite yerleşik ve özel operasyonlar için bazel-bin/tmp/tensorflow-lite.aar
AAR dosyasını oluşturacaktır; ve isteğe bağlı olarak, modelleriniz Select TensorFlow ops içeriyorsa bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
aar dosyasını oluşturur. Bunun birkaç farklı mimariye sahip "şişman" bir AAR oluşturduğunu unutmayın; hepsine ihtiyacınız yoksa dağıtım ortamınıza uygun alt kümeyi kullanın.
Özel operasyonlarla oluşturun
Özel işlemlerle Tensorflow Lite modelleri geliştirdiyseniz bunları build komutuna aşağıdaki bayrakları ekleyerek oluşturabilirsiniz:
sh tensorflow/lite/tools/build_aar.sh \
--input_models=/a/b/model_one.tflite,/c/d/model_two.tflite \
--target_archs=x86,x86_64,arm64-v8a,armeabi-v7a \
--tflite_custom_ops_srcs=/e/f/file1.cc,/g/h/file2.h \
--tflite_custom_ops_deps=dep1,dep2
tflite_custom_ops_srcs
bayrağı, özel operasyonlarınızın kaynak dosyalarını içerir ve tflite_custom_ops_deps
bayrağı, bu kaynak dosyalarını oluşturmak için bağımlılıkları içerir. Bu bağımlılıkların TensorFlow deposunda bulunması gerektiğini unutmayın.
Gelişmiş Kullanımlar: Özel Bazel kuralları
Projeniz Bazel kullanıyorsa ve belirli bir model grubu için özel TFLite bağımlılıkları tanımlamak istiyorsanız proje havuzunuzda aşağıdaki kuralları tanımlayabilirsiniz:
Yalnızca yerleşik işlemlere sahip modeller için:
load(
"@org_tensorflow//tensorflow/lite:build_def.bzl",
"tflite_custom_android_library",
"tflite_custom_c_library",
"tflite_custom_cc_library",
)
# A selectively built TFLite Android library.
tflite_custom_android_library(
name = "selectively_built_android_lib",
models = [
":model_one.tflite",
":model_two.tflite",
],
)
# A selectively built TFLite C library.
tflite_custom_c_library(
name = "selectively_built_c_lib",
models = [
":model_one.tflite",
":model_two.tflite",
],
)
# A selectively built TFLite C++ library.
tflite_custom_cc_library(
name = "selectively_built_cc_lib",
models = [
":model_one.tflite",
":model_two.tflite",
],
)
Select TF işlemlerine sahip modeller için:
load(
"@org_tensorflow//tensorflow/lite/delegates/flex:build_def.bzl",
"tflite_flex_android_library",
"tflite_flex_cc_library",
)
# A Select TF ops enabled selectively built TFLite Android library.
tflite_flex_android_library(
name = "selective_built_tflite_flex_android_lib",
models = [
":model_one.tflite",
":model_two.tflite",
],
)
# A Select TF ops enabled selectively built TFLite C++ library.
tflite_flex_cc_library(
name = "selective_built_tflite_flex_cc_lib",
models = [
":model_one.tflite",
":model_two.tflite",
],
)
Gelişmiş Kullanımlar: Özel C/C++ paylaşımlı kütüphaneler oluşturun
Verilen modellere göre kendi özel TFLite C/C++ paylaşımlı nesnelerinizi oluşturmak istiyorsanız aşağıdaki adımları takip edebilirsiniz:
TensorFlow kaynak kodunun kök dizininde aşağıdaki komutu çalıştırarak geçici bir BUILD dosyası oluşturun:
mkdir -p tmp && touch tmp/BUILD
Özel C paylaşımlı nesneleri oluşturma
Özel bir TFLite C paylaşımlı nesnesi oluşturmak istiyorsanız aşağıdakini tmp/BUILD
dosyasına ekleyin:
load(
"//tensorflow/lite:build_def.bzl",
"tflite_custom_c_library",
"tflite_cc_shared_object",
)
tflite_custom_c_library(
name = "selectively_built_c_lib",
models = [
":model_one.tflite",
":model_two.tflite",
],
)
# Generates a platform-specific shared library containing the TensorFlow Lite C
# API implementation as define in `c_api.h`. The exact output library name
# is platform dependent:
# - Linux/Android: `libtensorflowlite_c.so`
# - Mac: `libtensorflowlite_c.dylib`
# - Windows: `tensorflowlite_c.dll`
tflite_cc_shared_object(
name = "tensorflowlite_c",
linkopts = select({
"//tensorflow:ios": [
"-Wl,-exported_symbols_list,$(location //tensorflow/lite/c:exported_symbols.lds)",
],
"//tensorflow:macos": [
"-Wl,-exported_symbols_list,$(location //tensorflow/lite/c:exported_symbols.lds)",
],
"//tensorflow:windows": [],
"//conditions:default": [
"-z defs",
"-Wl,--version-script,$(location //tensorflow/lite/c:version_script.lds)",
],
}),
per_os_targets = True,
deps = [
":selectively_built_c_lib",
"//tensorflow/lite/c:exported_symbols.lds",
"//tensorflow/lite/c:version_script.lds",
],
)
Yeni eklenen hedef şu şekilde oluşturulabilir:
bazel build -c opt --cxxopt=--std=c++17 \
//tmp:tensorflowlite_c
ve Android için (64 bit için android_arm
android_arm64
ile değiştirin):
bazel build -c opt --cxxopt=--std=c++17 --config=android_arm \
//tmp:tensorflowlite_c
Özel C++ paylaşılan nesneleri oluşturma
Özel bir TFLite C++ paylaşılan nesnesi oluşturmak istiyorsanız aşağıdakini tmp/BUILD
dosyasına ekleyin:
load(
"//tensorflow/lite:build_def.bzl",
"tflite_custom_cc_library",
"tflite_cc_shared_object",
)
tflite_custom_cc_library(
name = "selectively_built_cc_lib",
models = [
":model_one.tflite",
":model_two.tflite",
],
)
# Shared lib target for convenience, pulls in the core runtime and builtin ops.
# Note: This target is not yet finalized, and the exact set of exported (C/C++)
# APIs is subject to change. The output library name is platform dependent:
# - Linux/Android: `libtensorflowlite.so`
# - Mac: `libtensorflowlite.dylib`
# - Windows: `tensorflowlite.dll`
tflite_cc_shared_object(
name = "tensorflowlite",
# Until we have more granular symbol export for the C++ API on Windows,
# export all symbols.
features = ["windows_export_all_symbols"],
linkopts = select({
"//tensorflow:macos": [
"-Wl,-exported_symbols_list,$(location //tensorflow/lite:tflite_exported_symbols.lds)",
],
"//tensorflow:windows": [],
"//conditions:default": [
"-Wl,-z,defs",
"-Wl,--version-script,$(location //tensorflow/lite:tflite_version_script.lds)",
],
}),
per_os_targets = True,
deps = [
":selectively_built_cc_lib",
"//tensorflow/lite:tflite_exported_symbols.lds",
"//tensorflow/lite:tflite_version_script.lds",
],
)
Yeni eklenen hedef şu şekilde oluşturulabilir:
bazel build -c opt --cxxopt=--std=c++17 \
//tmp:tensorflowlite
ve Android için (64 bit için android_arm
android_arm64
ile değiştirin):
bazel build -c opt --cxxopt=--std=c++17 --config=android_arm \
//tmp:tensorflowlite
Select TF operasyonlarına sahip modeller için ayrıca aşağıdaki paylaşılan kütüphaneyi de oluşturmanız gerekir:
load(
"@org_tensorflow//tensorflow/lite/delegates/flex:build_def.bzl",
"tflite_flex_shared_library"
)
# Shared lib target for convenience, pulls in the standard set of TensorFlow
# ops and kernels. The output library name is platform dependent:
# - Linux/Android: `libtensorflowlite_flex.so`
# - Mac: `libtensorflowlite_flex.dylib`
# - Windows: `libtensorflowlite_flex.dll`
tflite_flex_shared_library(
name = "tensorflowlite_flex",
models = [
":model_one.tflite",
":model_two.tflite",
],
)
Yeni eklenen hedef şu şekilde oluşturulabilir:
bazel build -c opt --cxxopt='--std=c++17' \
--config=monolithic \
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
//tmp:tensorflowlite_flex
ve Android için (64 bit için android_arm
android_arm64
ile değiştirin):
bazel build -c opt --cxxopt='--std=c++17' \
--config=android_arm \
--config=monolithic \
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
//tmp:tensorflowlite_flex
Docker ile TensorFlow Lite'ı Seçerek Oluşturun
Bu bölümde Docker'ı yerel makinenize yüklediğinizi ve TensorFlow Lite Docker dosyasını buraya indirdiğinizi varsayarız.
Yukarıdaki Docker dosyasını indirdikten sonra aşağıdakileri çalıştırarak docker görüntüsünü oluşturabilirsiniz:
docker build . -t tflite-builder -f tflite-android.Dockerfile
Android projesi için AAR dosyaları oluşturun
Aşağıdakileri çalıştırarak Docker ile derlemeye yönelik betiği indirin:
curl -o build_aar_with_docker.sh \
https://raw.githubusercontent.com/tensorflow/tensorflow/master/tensorflow/lite/tools/build_aar_with_docker.sh &&
chmod +x build_aar_with_docker.sh
Daha sonra model dosya yollarınızı aşağıdaki gibi sağlayarak özel TensorFlow Lite AAR'ı oluşturabilirsiniz.
sh build_aar_with_docker.sh \
--input_models=/a/b/model_one.tflite,/c/d/model_two.tflite \
--target_archs=x86,x86_64,arm64-v8a,armeabi-v7a \
--checkpoint=master \
[--cache_dir=<path to cache directory>]
checkpoint
bayrağı, kitaplıkları oluşturmadan önce teslim almak istediğiniz TensorFlow deposunun bir taahhüdü, bir dalı veya etiketidir; varsayılan olarak en son sürüm dalıdır. Yukarıdaki komut, TensorFlow Lite yerleşik ve özel operasyonlar için tensorflow-lite.aar
AAR dosyasını ve isteğe bağlı olarak mevcut dizininizdeki TensorFlow seçim operasyonları için tensorflow-lite-select-tf-ops.aar
AAR dosyasını oluşturacaktır.
--cache_dir önbellek dizinini belirtir. Sağlanmazsa, komut dosyası önbelleğe alma için geçerli çalışma dizini altında bazel-build-cache
adında bir dizin oluşturacaktır.
AAR dosyalarını projeye ekleyin
AAR'ı doğrudan projenize aktararak veya özel AAR'ı yerel Maven deponuzda yayınlayarak AAR dosyalarını ekleyin. tensorflow-lite-select-tf-ops.aar
oluşturursanız AAR dosyalarını da eklemeniz gerektiğini unutmayın.
iOS için Seçmeli Yapı
Derleme ortamını ayarlamak ve TensorFlow çalışma alanını yapılandırmak için lütfen Yerel olarak oluşturma bölümüne bakın ve ardından iOS için seçmeli derleme komut dosyasını kullanmak üzere kılavuzu izleyin.