7 Aralık'ta düzenlenecek Makine Öğreniminde Kadın Sempozyumu'na katılın Şimdi kaydolun

TensorFlow Lite ikili boyutunu küçültün

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

genel bakış

Cihaz üzerinde makine öğrenimi (ODML) uygulamaları için modeller dağıtırken, mobil cihazlarda bulunan 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ı küçültmenize olanak tanır. Seçici derlemeler, model kümenizdeki kullanılmayan işlemleri atlar ve yalnızca modelin mobil cihazınızda çalışması için gereken çalışma zamanı ve op çekirdekleri ile kompakt bir kitaplık oluşturur.

Seçici yapı, aşağıdaki üç işlem kitaplığına uygulanır.

  1. TensorFlow Lite yerleşik işlem kitaplığı
  2. TensorFlow Lite özel işlemler
  3. TensorFlow işlem kitaplığını seçin

Aşağıdaki tablo, bazı yaygın kullanım durumları için seçici yapıların etkisini göstermektedir:

Model adı Alan adı Hedef mimari AAR dosya boyutları
Mobilenet_1.0_224(yüzer) 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)

Bazel ile seçici olarak TensorFlow Lite oluşturun

Bu bölüm, TensorFlow kaynak kodlarını indirdiğinizi ve yerel geliştirme ortamını Bazel'e kurduğunuzu varsayar.

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, yerleşik TensorFlow Lite ve özel işlemler 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şlemlere sahip 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ı oluşturmaya yönelik 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 seti için özel TFLite bağımlılıkları tanımlamak istiyorsanız, proje havuzunuzda aşağıdaki kural(lar)ı 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",
    ],
)

Select TF operasyonlarına 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şılan kitaplıkları oluşturun

Verilen modellere yönelik kendi özel TFLite C/C++ paylaşımlı nesnelerinizi oluşturmak isterseniz, 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şı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_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_arm64 android_arm ile değiştirin):

bazel build -c opt --cxxopt=--std=c++17 --config=android_arm \
  //tmp:tensorflowlite_c

Özel C++ paylaşılan nesneler oluşturma

Özel bir TFLite C++ paylaşılan nesnesi oluşturmak istiyorsanız, aşağıdakileri 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 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_arm64 android_arm ile değiştirin):

bazel build -c opt --cxxopt=--std=c++17 --config=android_arm \
  //tmp:tensorflowlite

Select TF işlemlerine sahip modeller için ayrıca 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_arm64 android_arm 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çmeli Olarak Derleyin

Bu bölüm, Docker'ı yerel makinenize kurduğunuzu ve TensorFlow Lite Dockerfile dosyasını buradan indirdiğinizi varsayar.

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 derleme için 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 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>]

Kontrol checkpoint bayrağı, kitaplıkları oluşturmadan önce kontrol etmek istediğiniz TensorFlow deposunun bir taahhüt, dal veya etiketidir; varsayılan olarak en son sürüm dalıdır. Yukarıdaki komut, TensorFlow Lite yerleşik ve özel işlemler için AAR dosyası tensorflow-lite.aar ve isteğe bağlı olarak, geçerli dizininizdeki Select TensorFlow işlemleri 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 adlı bir dizin oluşturacaktır.

Projeye AAR dosyaları ekleyin

AAR'yi doğrudan projenize aktararak veya özel AAR'yi yerel Maven deponuza yayınlayarak AAR dosyaları ekleyin. Oluşturursanız, tensorflow-lite-select-tf-ops.aar için AAR dosyalarını da eklemeniz gerektiğini unutmayın.

iOS için Seçmeli Yapı

Lütfen derleme ortamını ayarlamak ve TensorFlow çalışma alanını yapılandırmak için Yerel olarak oluşturma bölümüne bakın ve ardından iOS için seçici derleme komut dosyasını kullanmak için kılavuzu izleyin.