LiteRT yerleşik operatör kitaplığı yalnızca sınırlı sayıda TensorFlow operatörünü desteklediğinden her model dönüştürülemez. Ayrıntılı bilgi için operatör uyumluluğu başlıklı makaleyi inceleyin.
Dönüşüme izin vermek için kullanıcılar, LiteRT modellerinde belirli TensorFlow işlemlerinin kullanımını etkinleştirebilir. Ancak LiteRT modellerini TensorFlow işlemleriyle çalıştırmak için temel TensorFlow çalışma zamanının çekilmesi gerekir. Bu da LiteRT yorumlayıcı ikili boyutunu artırır. Android'de yalnızca gerekli TensorFlow işlemlerini seçerek oluşturarak bu sorunu önleyebilirsiniz. Ayrıntılar için ikili boyutunu küçültme başlıklı makaleyi inceleyin.
Bu belgede, TensorFlow işlemleri içeren bir LiteRT modelinin nasıl dönüştürüleceği ve istediğiniz bir platformda nasıl çalıştırılacağı açıklanmaktadır. Ayrıca performans ve boyut metrikleri ile bilinen sınırlamalar da ele alınır.
Model dönüştürme
Aşağıdaki örnekte, belirli TensorFlow işlemleriyle LiteRT modeli oluşturma işlemi gösterilmektedir.
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.target_spec.supported_ops = [
tf.lite.OpsSet.TFLITE_BUILTINS, # enable LiteRT ops.
tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)
Çıkarım Çalıştırma
Belirli TensorFlow işlemleri için destekle dönüştürülmüş bir LiteRT modeli kullanırken istemcinin, gerekli TensorFlow işlemleri kitaplığını içeren bir LiteRT çalışma zamanı da kullanması gerekir.
Android AAR
İkili boyutu küçültmek için lütfen sonraki bölümde belirtildiği şekilde kendi özel AAR dosyalarınızı oluşturun. İkili boyut önemli bir sorun değilse MavenCentral'da barındırılan TensorFlow işlemleriyle önceden oluşturulmuş AAR'yi kullanmanızı öneririz.
Bunu, standart LiteRT AAR'nin yanına aşağıdaki şekilde ekleyerek build.gradle bağımlılıklarınızda belirtebilirsiniz:
dependencies {
implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
// This dependency adds the necessary TF op support.
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly-SNAPSHOT'
}
Gece alınan anlık görüntüleri kullanmak için Sonatype anlık görüntü deposunu eklediğinizden emin olun.
Bağımlılığı ekledikten sonra, grafiğin TensorFlow işlemlerini işlemek için gereken temsilci, gerekli olan grafikler için otomatik olarak yüklenir.
Not: TensorFlow işlemleri bağımlılığı nispeten büyüktür. Bu nedenle, abiFilters dosyanızı ayarlayarak .gradle dosyanızdaki gereksiz x86 ABI'lerini filtrelemek isteyebilirsiniz.
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
Android AAR'yi oluşturma
İkili boyutunu küçültmek veya diğer gelişmiş durumlar için kitaplığı manuel olarak da oluşturabilirsiniz. Çalışan bir LiteRT derleme ortamı olduğunu varsayarsak, belirli TensorFlow işlemleriyle Android AAR'yi aşağıdaki gibi oluşturun:
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
Bu işlem, LiteRT yerleşik ve özel işlemleri için AAR dosyası bazel-bin/tmp/tensorflow-lite.aar, TensorFlow işlemleri için ise AAR dosyası bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar oluşturur. Çalışan bir derleme ortamınız yoksa yukarıdaki dosyaları Docker ile de derleyebilirsiniz.
Buradan AAR dosyalarını doğrudan projenize aktarabilir veya özel AAR dosyalarını yerel Maven deponuza yayınlayabilirsiniz:
mvn install:install-file \
-Dfile=bazel-bin/tmp/tensorflow-lite.aar \
-DgroupId=org.tensorflow \
-DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar
mvn install:install-file \
-Dfile=bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar \
-DgroupId=org.tensorflow \
-DartifactId=tensorflow-lite-select-tf-ops -Dversion=0.1.100 -Dpackaging=aar
Son olarak, uygulamanızın build.gradle bölümünde mavenLocal()
bağımlılığının bulunduğundan emin olun ve standart LiteRT bağımlılığını, belirli TensorFlow işlemlerini destekleyen bağımlılıkla değiştirin:
allprojects {
repositories {
mavenCentral()
maven { // Only for snapshot artifacts
name 'ossrh-snapshot'
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
mavenLocal()
}
}
dependencies {
implementation 'org.tensorflow:tensorflow-lite:0.1.100'
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.1.100'
}
iOS
CocoaPods kullanma
LiteRT, arm64 için gecelik önceden oluşturulmuş belirli TF işlemleri CocoaPods'ları sağlar. Bu CocoaPods'ları TensorFlowLiteSwift veya TensorFlowLiteObjC CocoaPods'ları ile birlikte kullanabilirsiniz.
Not: x86_64 simülasyon aracında belirli TF işlemlerini kullanmanız gerekiyorsa belirli işlemler çerçevesini kendiniz oluşturabilirsiniz. Daha fazla bilgi için Bazel + Xcode Kullanma bölümüne bakın.
# In your Podfile target:
pod 'TensorFlowLiteSwift' # or 'TensorFlowLiteObjC'
pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'
pod install komutunu çalıştırdıktan sonra, seçili TF işlemleri çerçevesinin projenize yüklenmesini zorlamak için ek bir bağlayıcı işareti sağlamanız gerekir. Xcode projenizde Build Settings -> Other Linker Flags seçeneğine gidin ve şunları ekleyin:
2.9.0 ve sonraki sürümler için:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.xcframework/ios-arm64/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
2.9.0'dan önceki sürümler için:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
Ardından, iOS uygulamanızda SELECT_TF_OPS ile dönüştürülen tüm modelleri çalıştırabilirsiniz. Örneğin, seçili TF işlemleri özelliğini test etmek için Image Classification iOS uygulamasını değiştirebilirsiniz.
- Model dosyasını,
SELECT_TF_OPSetkinleştirilerek dönüştürülen dosyayla değiştirin. TensorFlowLiteSelectTfOpsbağımlılığını, talimatlara uygun şekildePodfileöğesine ekleyin.- Yukarıdaki gibi ek bağlayıcı işaretini ekleyin.
- Örnek uygulamayı çalıştırın ve modelin doğru çalışıp çalışmadığını kontrol edin.
Bazel + Xcode kullanma
iOS için belirli TensorFlow işlemleriyle LiteRT, Bazel kullanılarak oluşturulabilir. Öncelikle, Bazel çalışma alanınızı ve .bazelrc dosyanızı doğru şekilde yapılandırmak için iOS derleme talimatlarını uygulayın.
Çalışma alanını iOS desteği etkin olacak şekilde yapılandırdıktan sonra, aşağıdaki komutu kullanarak normal TensorFlowLiteC.framework üzerine eklenebilen seçili TF işlemleri eklenti çerçevesini oluşturabilirsiniz. select TF ops
framework'ün i386 mimarisi için oluşturulamadığını unutmayın. Bu nedenle, i386 hariç hedef mimarilerin listesini açıkça sağlamanız gerekir.
bazel build -c opt --config=ios --ios_multi_cpus=arm64,x86_64 \
//tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework
Bu işlem, bazel-bin/tensorflow/lite/ios/
dizini altında çerçeve oluşturur. Bu yeni çerçeveyi, iOS derleme kılavuzundaki Xcode proje ayarları bölümünde açıklanan benzer adımları uygulayarak Xcode projenize ekleyebilirsiniz.
Çerçeveyi uygulama projenize ekledikten sonra, belirli TF işlemleri çerçevesinin yüklenmesini zorlamak için uygulama projenizde ek bir bağlayıcı işareti belirtilmelidir. Xcode projenizde Build Settings -> Other Linker
Flags bölümüne gidin ve şunları ekleyin:
-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>
C/C++
LiteRT yorumlayıcısını oluşturmak için Bazel veya CMake kullanıyorsanız LiteRT Flex temsilcisi paylaşılan kitaplığını bağlayarak Flex temsilcisini etkinleştirebilirsiniz. Aşağıdaki komutla Bazel kullanarak oluşturabilirsiniz.
bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex
Bu komut, bazel-bin/tensorflow/lite/delegates/flex içinde aşağıdaki paylaşılan kitaplığı oluşturur.
| Platform | Kitaplığın adı |
|---|---|
| Linux | libtensorflowlite_flex.so |
| macOS | libtensorflowlite_flex.dylib |
| Windows | tensorflowlite_flex.dll |
Paylaşılan kitaplık bağlandığı sürece, yorumlayıcı çalışma zamanında oluşturulurken gerekli TfLiteDelegate otomatik olarak yüklenir. Genellikle diğer temsilci türlerinde gerekli olduğu gibi, temsilci örneğini açıkça yüklemek gerekmez.
Not: Bu özellik 2.7 sürümünden itibaren kullanılabilir.
Python
Belirli TensorFlow işlemleriyle LiteRT, TensorFlow pip paketi ile otomatik olarak yüklenir. Ayrıca yalnızca LiteRT Interpreter pip paketini de yükleyebilirsiniz.
Metrikler
Performans
Hem yerleşik hem de seçili TensorFlow işlemleri birlikte kullanıldığında, aynı LiteRT optimizasyonlarının tümü ve optimize edilmiş yerleşik işlemler, dönüştürülmüş modelle birlikte kullanılabilir.
Aşağıdaki tabloda, Pixel 2'de MobileNet üzerinde çıkarım çalıştırmak için gereken ortalama süre açıklanmaktadır. Listelenen süreler 100 çalıştırmanın ortalamasıdır. Bu hedefler, --config=android_arm64 -c opt işaretleri kullanılarak Android için oluşturulmuştur.
| Derleme | Süre (milisaniye) |
|---|---|
Yalnızca yerleşik işlemler (TFLITE_BUILTIN) |
260,7 |
Yalnızca TF işlemleri kullanma (SELECT_TF_OPS) |
264,5 |
İkili boyut
Aşağıdaki tabloda, her derleme için LiteRT'nin ikili boyutu açıklanmaktadır. Bu hedefler, --config=android_arm -c opt kullanılarak Android için oluşturulmuştur.
| Derleme | C++ İkili Boyutu | Android APK Boyutu |
|---|---|---|
| Yalnızca yerleşik işlemler | 796 KB | 561 KB |
| Yerleşik işlemler + TF işlemleri | 23,0 MB | 8,0 MB |
| Yerleşik işlemler + TF işlemleri (1) | 4,1 MB | 1,8 MB |
(1) Bu kitaplıklar, 8 TFLite yerleşik işlemi ve 3 TensorFlow işlemiyle i3d-kinetics-400 modeli için seçici olarak oluşturulur. Daha fazla bilgi için lütfen LiteRT ikili dosya boyutunu küçültme bölümüne bakın.
Bilinen sınırlamalar
- Desteklenmeyen türler: Bazı TensorFlow işlemleri, TensorFlow'da genellikle bulunan giriş/çıkış türlerinin tamamını desteklemeyebilir.
Güncellemeler
- Sürüm 2.6
- GraphDef özelliğine dayalı operatörler ve HashTable kaynağı başlatmaları için destek iyileştirildi.
- Sürüm 2.5
- Eğitim sonrası nicemleme olarak bilinen bir optimizasyon uygulayabilirsiniz.
- Sürüm 2.4
- Donanım hızlandırmalı temsilcilerle uyumluluk iyileştirildi