Genel Bakış
Cihaz üzerinde makine öğrenimi (ODML) uygulamaları için modeller dağıtırken mobil cihazlarda sınırlı bellek olduğunu unutmamak önemlidir. Model ikili boyutları, modelde kullanılan işlem sayısıyla yakından ilişkilidir. LiteRT, seçici derlemeler kullanarak model ikili boyutlarını küçültmenize olanak tanır. Seçici derlemeler, model kümenizde kullanılmayan işlemleri atlar ve modelin mobil cihazınızda çalışması için gereken yalnızca çalışma zamanı ve işlem çekirdeklerini içeren kompakt bir kitaplık oluşturur.
Seçmeli derleme, aşağıdaki üç işlem kitaplığında geçerlidir.
Aşağıdaki tabloda, bazı yaygın kullanım alanlarında seçici derlemelerin etkisi gösterilmektedir:
| Model Adı | Alan | Hedef mimari | AAR dosya boyutları |
|---|---|---|---|
| Mobilenet_1.0_224(float) | Görüntü sınıflandırma | armeabi-v7a | tensorflow-lite.aar (296.635 bayt) |
| arm64-v8a | tensorflow-lite.aar (382.892 bayt) | ||
| SPICE | 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-kinetics-400 | Video sınıflandırma | 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) |
Bazel ile LiteRT'yi seçerek derleme
Bu bölümde, TensorFlow kaynak kodlarını indirdiğiniz ve yerel geliştirme ortamını Bazel'e göre ayarladığınız varsayılmaktadır.
Android projesi için AAR dosyaları oluşturma
Model dosya yollarınızı aşağıdaki gibi sağlayarak özel LiteRT AAR'leri 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, yerleşik ve özel LiteRT işlemleri için bazel-bin/tmp/tensorflow-lite.aar
AAR dosyasını oluşturur. Modelleriniz Select
TensorFlow işlemleri içeriyorsa isteğe bağlı olarak aar dosyasını
bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar oluşturur. Bu işlemin, birkaç farklı mimari içeren "kalın" bir AAR oluşturduğunu unutmayın. Bunların hepsine ihtiyacınız yoksa dağıtım ortamınıza uygun alt grubu kullanın.
Özel işlemlerle geliştirme
Özel işlemlerle LiteRT modelleri geliştirdiyseniz aşağıdaki işaretleri derleme komutuna ekleyerek bunları 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 işareti, özel işlemlerinizin kaynak dosyalarını, tflite_custom_ops_deps işareti ise bu kaynak dosyaları oluşturmak için gereken 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 işlemler içeren 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 ops (TF işlemlerini seç) seçeneği bulunan 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",
],
)
İleri Düzey Kullanımlar: Özel C/C++ paylaşılan kitaplıkları oluşturma
Belirli 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şımlı nesneleri oluşturma
Özel bir TFLite C paylaşılan nesnesi oluşturmak istiyorsanız tmp/BUILD dosyasına aşağıdakileri 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 LiteRT 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
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şımlı nesneleri oluşturma
Özel bir TFLite C++ paylaşılan nesnesi oluşturmak istiyorsanız tmp/BUILD dosyasına aşağıdakileri 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
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 işlemleri içeren 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
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 LiteRT'yi seçerek oluşturma
Bu bölümde, yerel makinenize Docker'ı yüklediğiniz ve LiteRT Dockerfile'ı buradan 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
Docker ile derleme için komut dosyasını indirmek üzere şu komutu çalıştırın:
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
Ardından, model dosya yollarınızı aşağıdaki gibi sağlayarak özel LiteRT 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 kullanmak istediğiniz TensorFlow deposunun bir commit'i, dalı veya etiketidir. Varsayılan olarak en son yayın dalıdır. Yukarıdaki komut, yerleşik ve özel LiteRT işlemleri için AAR dosyasını
tensorflow-lite.aar ve isteğe bağlı olarak geçerli dizininizdeki Select TensorFlow işlemleri için AAR dosyasını tensorflow-lite-select-tf-ops.aar oluşturur.
--cache_dir, önbellek dizinini belirtir. Sağlanmazsa komut dosyası, önbelleğe alma için geçerli çalışma dizini altında bazel-build-cache adlı bir dizin oluşturur.
Projeye AAR dosyaları ekleme
AAR dosyalarını doğrudan AAR'yi projenize aktararak veya özel AAR'yi yerel Maven deponuza yayınlayarak ekleyin. tensorflow-lite-select-tf-ops.aar için AAR dosyalarını oluşturursanız bunları da eklemeniz gerektiğini unutmayın.
iOS için Seçmeli Derleme
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çici derleme komut dosyasını kullanmak üzere kılavuzu uygulayın.