Genel bakış
Cihaz üzerinde makine öğrenimi (ODML) uygulamaları için 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 derlemeleri kullanarak model ikili programı boyutlarını küçültmenizi sağlar. Seçimli derlemeler, model kümenizdeki kullanılmayan işlemleri atlayarak modelin mobil cihazınızda çalışması için yalnızca çalışma zamanı ve işlem çekirdekleriyle kompakt bir kitaplık oluşturur.
Seçmeli derleme aşağıdaki üç işlem kitaplığında geçerlidir.
- TensorFlow Lite yerleşik işlem kitaplığı
- TensorFlow Lite özel işlemleri
- TensorFlow işlem kitaplığını seçin
Aşağıdaki tabloda, seçmeli derlemelerin bazı yaygın kullanım alanları üzerindeki etkisi gösterilmektedir:
Model Adı | Alan | Hedef mimari | AAR dosya boyutları |
---|---|---|---|
Mobilenet_1.0_224(float) | Görüntü sınıflandırma | ermeabi-v7a | tensorflow-lite.aar (296.635 bayt) |
kol64-v8a | tensorflow-lite.aar (382.892 bayt) | ||
BİLGİ | Ses perdesi çıkarma | ermeabi-v7a | tensorflow-lite.aar (375.813 bayt) tensorflow-lite-select-tf-ops.aar (1.676.380 bayt) |
kol64-v8a | tensorflow-lite.aar (421.826 bayt) tensorflow-lite-select-tf-ops.aar (2.298.630 bayt) |
||
i3d-kinetics-400 | Video sınıflandırma | ermeabi-v7a | tensorflow-lite.aar (240.085 bayt) tensorflow-lite-select-tf-ops.aar (1.708.597 bayt) |
kol64-v8a | tensorflow-lite.aar (273.713 bayt) tensorflow-lite-select-tf-ops.aar (2.339.697 bayt) |
Bazel ile seçmeli olarak TensorFlow Lite'ı derleme
Bu bölümde, TensorFlow kaynak kodlarını indirdiğiniz ve Bazel'a yerel geliştirme ortamını kurduğunuz varsayılır.
Android projesi için AAR dosyaları oluşturma
Model dosya yollarınızı aşağıdaki gibi sağlayarak özel TensorFlow Lite AAR'lerini 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'ın yerleşik ve özel işlemleri için bazel-bin/tmp/tensorflow-lite.aar
AAR dosyasını oluşturur. Modelleriniz "Select TensorFlow" işlemlerini içeriyorsa aar dosyasını da (isteğe bağlı) bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
oluşturur. Bunun birkaç farklı mimariye sahip "şişman" bir AAR derlediğini unutmayın. Bunların tümüne ihtiyacınız yoksa dağıtım ortamınıza uygun alt kümeyi kullanın.
Özel işlemlerle derleme
Özel işlemler içeren Tensorflow Lite modelleri geliştirdiyseniz bu modelleri, derleme komutuna aşağıdaki işaretleri ekleyerek derleyebilirsiniz:
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
işareti, özel işlemlerinizin kaynak dosyalarını, tflite_custom_ops_deps
işareti ise bu kaynak dosyalarını derlemek için kullanılan 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ı
Projenizde Bazel kullanılıyorsa ve belirli bir model grubu için özel TFLite bağımlılıkları tanımlamak istiyorsanız proje deponuzda aşağıdaki kuralları tanımlayabilirsiniz:
Yalnızca yerleşik operasyonlara 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",
],
)
TF işlemlerini seç olan 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şılan kitaplıklar oluşturun
Belirtilen modeller için kendi özel TFLite C/C++ paylaşılan nesnelerinizi oluşturmak istiyorsanız aşağıdaki adımları uygulayabilirsiniz:
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şılan nesneleri oluşturma
Özel bir TFLite C paylaşılan nesnesi oluşturmak istiyorsanız tmp/BUILD
dosyasına aşağıdakini 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 aşağıdaki gibi oluşturulabilir:
bazel build -c opt --cxxopt=--std=c++17 \
//tmp:tensorflowlite_c
ve Android için (64 bit için android_arm
yerine android_arm64
kullanın):
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 tmp/BUILD
dosyasına aşağıdakini 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 aşağıdaki gibi oluşturulabilir:
bazel build -c opt --cxxopt=--std=c++17 \
//tmp:tensorflowlite
ve Android için (64 bit için android_arm
yerine android_arm64
kullanın):
bazel build -c opt --cxxopt=--std=c++17 --config=android_arm \
//tmp:tensorflowlite
Select TF operasyonlarına sahip modeller için aşağıdaki paylaşılan kitaplığı da 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 aşağıdaki gibi 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
yerine android_arm64
kullanın):
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 Seçerek TensorFlow Lite'ı Derleme
Bu bölümde, yerel makinenize Docker'ı yüklediğiniz ve buradan TensorFlow Lite Dockerfile'ı indirdiğiniz varsayılır.
Yukarıdaki Dockerfile'ı indirdikten sonra aşağıdaki komutu ç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şturma
Şu komutu çalıştırarak Docker ile derleme komut dosyasını 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'yi 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
işareti, kitaplıkları oluşturmadan önce ödeme yapmak istediğiniz TensorFlow deposunun bir kaydetme, dalı veya etiketidir. Varsayılan olarak en son sürüm dalıdır. Yukarıdaki komut, TensorFlow Lite'ın yerleşik ve özel işlemleri için AAR dosyasını tensorflow-lite.aar
ve isteğe bağlı olarak mevcut dizininizdeki Select TensorFlow işlemleri için tensorflow-lite-select-tf-ops.aar
AAR dosyasını oluşturur.
--cache_dir önbellek dizinini belirtir. Sağlanmazsa komut dosyası, önbelleğe alma için mevcut çalışma dizininin altında bazel-build-cache
adlı bir dizin oluşturur.
Projeye AAR dosyaları ekleyin
AAR'yi doğrudan projenize aktararak veya özel AAR'yi yerel Maven deponuzda yayınlayarak AAR dosyalarını ekleyin. AAR dosyalarını oluşturursanız tensorflow-lite-select-tf-ops.aar
için de AAR dosyalarını eklemeniz gerektiğini unutmayın.
iOS için Selective Build
Derleme ortamını ayarlamak ve TensorFlow çalışma alanını yapılandırmak için lütfen Yerel olarak derleme bölümüne bakın. Ardından, iOS için seçmeli derleme komut dosyasını kullanmak üzere kılavuzdaki adımları uygulayın.