Genel Bakış
Cihaz üzerinde makine öğrenimi (ODML) uygulamaları için modelleri dağıtırken mobil cihazlarda kullanılabilen belleğin sınırlı olduğunu bilmek önemlidir. Model ikili boyutları, bu modelde kullanılan işlem sayısıyla modeli. LiteRT, aşağıdakileri kullanarak modelin ikili program boyutlarını küçültmenizi sağlar: derlemeler içeriyor. Seçmeli derlemeler, model kümenizdeki kullanılmayan işlemleri atlar ve yalnızca çalışma zamanı ile işlem çekirdeklerini içeren kompakt bir kitaplık modelin mobil cihazınızda çalıştırılmasını sağlayın.
Seçmeli derleme aşağıdaki üç işlem kitaplığında geçerlidir.
Aşağıdaki tabloda, bazı yaygın kullanım alanları için seçmeli derlemelerin etkisi gösterilmektedir vakalar:
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 LiteRT'i seçerek derleme
Bu bölümde, TensorFlow kaynak kodlarını indirdiğiniz ve yerel kalkınmanın Bazel.
Android projesi için AAR dosyaları oluşturma
Model dosya yollarınızı sağlayarak özel LiteRT AAR'leri oluşturabilirsiniz. aşağıdaki gibi ekleyebilirsiniz.
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, bazel-bin/tmp/tensorflow-lite.aar
AAR dosyasını oluşturur
LiteRT yerleşik ve özel işlemler için; ve isteğe bağlı olarak,
modellerinizde şunlar varsa bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
dosyasını seçin:
TensorFlow operasyonlarını seçin Bunun bir "şişman" oluşturacağını unutmayın Birkaç farklı AAR
mimariler; bunların hepsine ihtiyacınız yoksa, kullanmak istediğiniz
dağıtım ortamınızı destekler.
Özel işlemlerle derleme
Özel işlemler içeren LiteRT modelleri geliştirdiyseniz bunları oluşturabilirsiniz derleme komutuna aşağıdaki flag'leri ekleyin:
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ı ve
tflite_custom_ops_deps
işareti, bu kaynağı derlemek için bağımlılıklar içerir
dosyası olarak da kaydedebilir. 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 özel TFLite tanımlamak istiyorsanız bağımlılıklarını görmek için, şemanızda aşağıdaki kuralları proje deposu:
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
Hedeflerinize yönelik kendi özel TFLite C/C++ paylaşılan nesnelerinizi oluşturmak için aşağıdaki adımları uygulayabilirsiniz:
Kök dizinde aşağıdaki komutu çalıştırarak geçici bir BUILD dosyası oluşturun TensorFlow kaynak kodunun dizinini oluşturur:
mkdir -p tmp && touch tmp/BUILD
Özel C paylaşılan nesneleri oluşturma
Özel bir TFLite C paylaşılan nesnesi oluşturmak isterseniz aşağıdakini
tmp/BUILD
dosyası:
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
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 şunu ekleyin:
tmp/BUILD
dosyasına:
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ğıdakileri de derlemeniz gerekir: şunları da sağlar:
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çici LiteRT Derleme
Bu bölümde, birinci taraf verileri için Yerel makinenizde Docker ve LiteRT Dockerfile indirildi burada bulabilirsiniz.
Yukarıdaki Dockerfile'ı indirdikten sonra Docker görüntüsü oluşturmak için çalışıyor:
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
Ardından model dosyanızı sağlayarak özel LiteRT AAR'sini oluşturabilirsiniz. yollarını belirleyin.
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, TensorFlow deposunun kayıt, dal veya etiketidir.
kitaplıkları oluşturmadan önce ödeme yapmak istiyorsunuz; varsayılan olarak en yenisi
sürüm dalını kullanabilirsiniz. Yukarıdaki komut, AAR dosyasını oluşturur
LiteRT yerleşik ve özel işlemler ile isteğe bağlı olarak tensorflow-lite.aar
Select TensorFlow operasyonları için tensorflow-lite-select-tf-ops.aar
AAR dosyasını
açın.
--cache_dir önbellek dizinini belirtir. Sağlanmazsa komut dosyası
şunun geçerli çalışma dizini altında bazel-build-cache
adlı bir dizin oluşturun:
önbelleğe alma.
Projeye AAR dosyaları ekleyin
AAR'yi doğrudan AAR'ye aktararak
kullanarak veya yayınlayarak
yerel Maven'e özel AAR'yi
depo. Not
Bunun için tensorflow-lite-select-tf-ops.aar
için AAR dosyalarını
sizin için iyi olur.
iOS için Selective Build
Aşağıdakileri ayarlamak için lütfen Yerel olarak derleme bölümüne bakın TensorFlow çalışma alanını yapılandırın ve seçmeli özelliği kullanmak için kılavuz komut dosyası derlemek.