LiteRT yerleşik operatör kitaplığı yalnızca sayısı, TensorFlow operatörü sayısı, her model dönüştürülebilir değildir. Ayrıntılı bilgi için operatör uyumluluğu bölümünü inceleyin.
Dönüşüme olanak tanımak için, kullanıcılar belirli TensorFlow'un kullanımını etkinleştirebilir işlemleri karşılaştırabilirsiniz. Ancak, TensorFlow işlemleri içeren LiteRT modelleri, LiteRT yorumlayıcı ikili program boyutunu artıran TensorFlow çalışma zamanı. Android'de, yalnızca gerekli Tensorflow'u seçerek bu durumu önleyebilirsiniz. çalışma Ayrıntılar için ikili verileri azaltma boyut.
Bu belgede, nasıl dönüşüm gerçekleştirileceği ve TensorFlow işlemlerini içeren LiteRT modeli çalıştırma tercih edebilirsiniz. Ayrıca performans ve boyut metrikleri ve bilinen sınırlamalar hakkında bilgi edinin.
Model dönüştürme
Aşağıdaki örnekte, belirli bir değerle LiteRT modelinin nasıl oluşturulacağı gösterilmektedir TensorFlow operasyonları
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ır
Şu destekle dönüştürülmüş bir LiteRT modeli kullanılırken: TensorFlow operasyonlarını seçerseniz istemcinin aynı zamanda TensorFlow işlemleri için gerekli kitaplığı içerir.
Android AAR
İkili program boyutunu küçültmek için lütfen aşağıda açıklandığı şekilde kendi özel AAR dosyalarınızı oluşturun: sonraki bölümde bulabilirsiniz. İkili program boyutu varsa, TensorFlow işlemleri ile önceden oluşturulmuş AAR'yi kullanmanızı barındırıldığı yer: MavenCentral.
Bunu build.gradle
bağımlılığınızla birlikte ekleyerek belirtebilirsiniz.
aşağıdaki gibi standart LiteRT AAR'si vardır:
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'
}
Gecelik anlık görüntüleri kullanmak için Sonatype anlık görüntüsü eklediğinizden emin olun depo.
Bağımlılığı ekledikten sonra, bu bağımlılığı yönetimi için grafiğinizin TensorFlow işlemleri oluşturabilirsiniz.
Not: TensorFlow işlemleri bağımlılığı nispeten büyüktür, bu nedenle muhtemelen
ayarlayarak .gradle
dosyanızdaki gereksiz x86 ABI'lerini filtrelemek istiyorsanız
abiFilters
cihazınız.
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
Android AAR'yi oluşturma
İkili program boyutunu veya diğer gelişmiş durumları küçültmek için manuel olarak değiştirebilirsiniz. Çalışan bir LiteRT derlemesi olduğunu varsayarsak ortamına yönelik olarak, Android AAR'yi belirli TensorFlow işlemleriyle şöyle olur:
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 komut dosyasının AAR dosyası bazel-bin/tmp/tensorflow-lite.aar
LiteRT yerleşik ve özel işlemler; oluşturup AAR dosyasını
TensorFlow işlemleri için bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
Şu durumda:
çalışmayan bir derleme ortamına sahip değilseniz, dosyaların üzerinde çalışma alanını kullanarak
Docker'a dokunun.
Buradan, AAR dosyalarını doğrudan projenize aktarabilirsiniz ya da özel AAR dosyalarını yerel Maven deponuza yayınlayın:
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()
öğesinin bulunduğundan emin olun
ve standart LiteRT bağımlılığını
belirli TensorFlow işlemlerini destekler:
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'u kullanma
LiteRT, her gece arm64
için önceden oluşturulmuş seçkin TF operasyonları CocoaPods sunar.
Bunlara ek olarak, TensorFlowLiteSwift
veya
TensorFlowLiteObjC
CocoaPods.
Not: x86_64
simülasyon aracında belirli TF işlemlerini kullanmanız gerekiyorsa
çalışma çerçevesini kendiniz oluşturabilirsiniz. Bazel + Xcode'u kullanma bölümüne bakın.
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,
Select TF operasyon çerçevesini projenize zorla yükleyin. Xcode projenizde,
Build Settings
adresine gidin -> Other Linker Flags
ve şunu ekleyin:
2.9.0 veya sonraki sürümler için:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.xcframework/ios-arm64/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
< 2.9.0:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
Daha sonra, SELECT_TF_OPS
ile dönüştürülmüş tüm modelleri çalıştırabilirsiniz.
iOS uygulamanız. Örneğin, Görüntü Sınıflandırma iOS
uygulama
belirli TF operasyonları özelliğini test etmek için gereklidir.
- Model dosyasını,
SELECT_TF_OPS
etkin şekilde dönüştürülmüş bir model dosyasıyla değiştirin. - Talimatlara göre
Podfile
öğesineTensorFlowLiteSelectTfOps
bağımlılığı ekleyin. - Ek bağlayıcı işaretini yukarıda olduğu gibi ekleyin.
- Örnek uygulamayı çalıştırın ve modelin düzgün çalışıp çalışmadığını kontrol edin.
Bazel + Xcode'u kullanma
iOS için belirli TensorFlow işlemleriyle LiteRT, Bazel kullanılarak oluşturulabilir.
Öncelikle iOS derleme talimatlarını uygulayarak
Bazel çalışma alanı ve .bazelrc
dosyası doğru.
Çalışma alanını iOS desteğini etkinleştirecek şekilde yapılandırdıktan sonra,
aşağıdaki komutu çalıştırarak
aylık TensorFlowLiteC.framework
Seçili TF operasyonlarının
çerçevesi i386
mimarisi için oluşturulamaz. Bu yüzden
i386
hariç olmak üzere hedef mimarilerin listesini sağlayın.
bazel build -c opt --config=ios --ios_multi_cpus=arm64,x86_64 \
//tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework
Bu işlem, çerçeveyi bazel-bin/tensorflow/lite/ios/
altında oluşturur
dizin. Bu yeni çerçeveyi aşağıdaki adımları uygulayarak Xcode projenize ekleyebilirsiniz:
Xcode projesinin altında açıklanan benzer adımlar
Ayarlar bölümündeki
iOS derleme kılavuzu.
Çerçeveyi uygulama projenize ekledikten sonra, ek bir bağlayıcı işareti
seçili TF işlemlerini zorla yüklemek için uygulama projenizde belirtilmelidir
bahsedeceğim. Xcode projenizde Build Settings
-> öğesine gidin. Other Linker
Flags
ve şunu ekleyin:
-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>
C/C++
LiteRT oluşturmak için Bazel veya CMake kullanıyorsanız bir LiteRT Flex bağlantısı oluşturarak Flex delege özelliğini erişim yetkisi verebilirsiniz. Aşağıdaki komutla Bazel kullanarak web sitesi oluşturabilirsiniz.
bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex
Bu komut, aşağıdaki paylaşılan kitaplığı şu konumda oluşturur:
bazel-bin/tensorflow/lite/delegates/flex
Platform | Kütüphanenin adı |
---|---|
Linux | libtensorflowlite_flex.so |
macOS | libtensorflowlite_flex.dylib |
Windows | tensorflowlite_flex.dll |
Gerekli TfLiteDelegate
uygulamasının, şu işlemler gerçekleştirildiğinde otomatik olarak yükleneceğini unutmayın:
paylaşılan kitaplık bağlı olduğu sürece çevirmeni çalışma zamanında oluşturmalıdır. Google
genellikle olduğu gibi, yetki verilmiş örneği doğrudan yüklemek için gerekli değildir.
diğer yetki verme türlerinde de zorunludur.
Not: Bu özellik 2.7 sürümünden itibaren kullanılabilmektedir.
Python
Belirli TensorFlow işlemleri içeren LiteRT otomatik olarak TensorFlow pip paketi. Şunları yapabilirsiniz: sadece LiteRT Çevirmen pip'ini paketindedir.
Metrikler
Performans
Hem yerleşik hem de seçili TensorFlow operasyonlarını bir arada kullanırken LiteRT optimizasyonları ve optimize edilmiş yerleşik işlemler kullanılabilir ve dönüştürülmüş modelle kullanılabilir.
Aşağıdaki tabloda, çıkarımda bulunmak için gereken ortalama süre
Pixel 2'deki MobileNet. Listelenen süreler ortalama 100 çalıştırmadır. Bu
şu işaretler kullanılarak Android için hedef oluşturuldu: --config=android_arm64 -c opt
.
Derleme | Zaman (milisaniye) |
---|---|
Yalnızca yerleşik işlemler (TFLITE_BUILTIN ) |
260,7 |
Yalnızca TF işlemlerini kullanma (SELECT_TF_OPS ) |
264,5 |
İkili program boyutu
Aşağıdaki tabloda her derleme için LiteRT'in ikili boyutu açıklanmaktadır.
Bu hedefler Android için --config=android_arm -c opt
kullanılarak oluşturulmuştur.
Derleme | C++ İkili Program Boyutu | Android APK Boyutu |
---|---|---|
Yalnızca yerleşik işlemler | 796 KB | 561 KB |
Yerleşik operasyonlar + TF operasyonları | 23,0 MB | 8,0 MB |
Yerleşik operasyonlar + TF işlemleri (1) | 4,1 MB | 1,8 MB |
(1) Bu kitaplıklar i3d-kinetics-400 için seçici bir şekilde oluşturulmuştur modeli 8 yerleşik TFLite ve 3 Tensorflow operasyonlarıyla. Daha fazla bilgi için lütfen LiRT ikili boyutunu küçültme bölümü.
Bilinen sınırlamalar
- Desteklenmeyen türler: Bazı TensorFlow işlemleri genellikle TensorFlow'da bulunan giriş/çıkış türlerini gösterir.
Güncellemeler
- Sürüm 2.6
- GraphDef özelliğine dayalı operatörler ve HashTable kaynağı için destek başlatma işlemleri iyileştirildi.
- Sürüm 2.5
- Sürüm 2.4
- Donanım hızlandırmalı yetkilerle uyumluluk iyileştirildi