Meqenëse biblioteka e integruar e operatorëve LiteRT mbështet vetëm një numër të kufizuar operatorësh TensorFlow, jo çdo model është i konvertueshëm. Për detaje, referojuni përputhshmërisë së operatorëve .
Për të lejuar konvertimin, përdoruesit mund të aktivizojnë përdorimin e disa operacioneve TensorFlow në modelin e tyre LiteRT. Megjithatë, ekzekutimi i modeleve LiteRT me operacione TensorFlow kërkon tërheqjen e kohës kryesore të ekzekutimit TensorFlow, e cila rrit madhësinë binar të interpretuesit LiteRT. Për Android, mund ta shmangni këtë duke ndërtuar në mënyrë selektive vetëm operacionet e kërkuara Tensorflow. Për detaje, referojuni reduktimit të madhësisë binare .
Ky dokument përshkruan se si të konvertoni dhe ekzekutoni një model LiteRT që përmban operacione TensorFlow në një platformë sipas zgjedhjes suaj. Ai gjithashtu diskuton metrikat e performancës dhe madhësisë , si dhe kufizimet e njohura .
Konvertoni një model
Shembulli i mëposhtëm tregon se si të gjenerohet një model LiteRT me operacione të zgjedhura TensorFlow.
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)
Ekzekutoni Inferencën
Kur përdoret një model LiteRT që është konvertuar me mbështetje për operacione të caktuara TensorFlow, klienti duhet të përdorë gjithashtu një kohë ekzekutimi LiteRT që përfshin bibliotekën e nevojshme të operacioneve TensorFlow.
Android AAR
Për të zvogëluar madhësinë e skedarit binare, ju lutemi ndërtoni skedarët tuaj të personalizuar AAR siç udhëzohet në seksionin tjetër . Nëse madhësia binare nuk është një shqetësim i konsiderueshëm, ne rekomandojmë përdorimin e AAR-it të parapërgatitur me operacionet TensorFlow të vendosura në MavenCentral .
Mund ta specifikoni këtë në varësitë tuaja build.gradle duke e shtuar atë së bashku me AAR-in standard të LiteRT si më poshtë:
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'
}
Për të përdorur pamjet e çastit çdo natë, sigurohuni që të keni shtuar repozitorin e pamjeve të çastit Sonatype .
Pasi të keni shtuar varësinë, delegati i nevojshëm për trajtimin e operacioneve TensorFlow të grafikut duhet të instalohet automatikisht për grafikët që i kërkojnë ato.
Shënim : Varësia e operacioneve TensorFlow është relativisht e madhe, kështu që ndoshta do të dëshironi të filtroni ABI-të x86 të panevojshme në skedarin tuaj .gradle duke konfiguruar abiFilters tuaj.
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
Ndërtimi i AAR-it për Android
Për të zvogëluar madhësinë e skedarit binare ose raste të tjera të avancuara, mund ta ndërtoni bibliotekën edhe manualisht. Duke supozuar një mjedis ndërtimi LiteRT funksional , ndërtoni AAR-in e Android me operacione të zgjedhura TensorFlow si më poshtë:
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
Kjo do të gjenerojë skedarin AAR bazel-bin/tmp/tensorflow-lite.aar për operacionet e integruara dhe të personalizuara të LiteRT; dhe do të gjenerojë skedarin AAR bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar për operacionet TensorFlow. Nëse nuk keni një mjedis ndërtimi funksional, mund të ndërtoni edhe skedarët e mësipërm me docker .
Nga atje, mund të importoni skedarët AAR direkt në projektin tuaj, ose të publikoni skedarët AAR të personalizuar në depon tuaj lokal Maven:
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
Së fundmi, në build.gradle të aplikacionit tuaj, sigurohuni që keni varësinë mavenLocal() dhe zëvendësoni varësinë standarde LiteRT me atë që mbështet operacione të caktuara TensorFlow:
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
Përdorimi i CocoaPods
LiteRT ofron CocoaPods të parapërgatitura çdo natë me opsione të zgjedhura TF për arm64 , të cilave mund t'u mbështeteni së bashku me CocoaPods TensorFlowLiteSwift ose TensorFlowLiteObjC .
Shënim : Nëse duhet të përdorni operacione select TF në një simulator x86_64 , mund ta ndërtoni vetë kornizën select ops. Shihni seksionin Përdorimi i Bazel + Xcode për më shumë detaje.
# In your Podfile target:
pod 'TensorFlowLiteSwift' # or 'TensorFlowLiteObjC'
pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'
Pasi të ekzekutoni pod install , duhet të jepni një flamur shtesë lidhësish për të detyruar ngarkimin e kornizës select TF ops në projektin tuaj. Në projektin tuaj Xcode, shkoni te Build Settings -> Other Linker Flags dhe shtoni:
Për versionet >= 2.9.0:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.xcframework/ios-arm64/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
Për versionet < 2.9.0:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
Pastaj duhet të jeni në gjendje të ekzekutoni çdo model të konvertuar me SELECT_TF_OPS në aplikacionin tuaj iOS. Për shembull, mund të modifikoni aplikacionin iOS të Klasifikimit të Imazheve për të testuar veçorinë select TF ops.
- Zëvendësoni skedarin e modelit me atë të konvertuar me
SELECT_TF_OPStë aktivizuar. - Shtoni varësinë
TensorFlowLiteSelectTfOpsnëPodfilesipas udhëzimeve. - Shtoni flamurin shtesë të lidhësit si më sipër.
- Ekzekutoni aplikacionin shembull dhe shikoni nëse modeli funksionon siç duhet.
Duke përdorur Bazel + Xcode
LiteRT me operacione të zgjedhura TensorFlow për iOS mund të ndërtohet duke përdorur Bazel. Së pari, ndiqni udhëzimet e ndërtimit të iOS për të konfiguruar saktë hapësirën e punës Bazel dhe skedarin .bazelrc .
Pasi ta keni konfiguruar hapësirën e punës me mbështetjen e aktivizuar për iOS, mund të përdorni komandën e mëposhtme për të ndërtuar kornizën shtesë select TF ops, e cila mund të shtohet mbi TensorFlowLiteC.framework të rregullt. Vini re se korniza select TF ops nuk mund të ndërtohet për arkitekturën i386 , kështu që duhet të jepni në mënyrë të qartë listën e arkitekturave të synuara duke përjashtuar i386 .
bazel build -c opt --config=ios --ios_multi_cpus=arm64,x86_64 \
//tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework
Kjo do të gjenerojë kornizën nën direktorinë bazel-bin/tensorflow/lite/ios/ . Mund ta shtoni këtë kornizë të re në projektin tuaj Xcode duke ndjekur hapa të ngjashëm të përshkruar në seksionin e cilësimeve të projektit Xcode në udhëzuesin e ndërtimit të iOS.
Pasi të keni shtuar framework-un në projektin e aplikacionit tuaj, duhet të specifikohet një flamur shtesë lidhës në projektin e aplikacionit tuaj për të detyruar ngarkimin e framework-ut të zgjedhur TF ops. Në projektin tuaj Xcode, shkoni te Build Settings -> Other Linker Flags dhe shtoni:
-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>
C/C++
Nëse po përdorni Bazel ose CMake për të ndërtuar interpretuesin LiteRT, mund ta aktivizoni Flex delegate duke lidhur një bibliotekë të përbashkët të delegatëve LiteRT Flex. Mund ta ndërtoni atë me Bazel si komandën e mëposhtme.
bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex
Kjo komandë gjeneron bibliotekën e përbashkët të mëposhtme në bazel-bin/tensorflow/lite/delegates/flex .
| Platforma | Emri i bibliotekës |
|---|---|
| Linux | libtensorflowlite_flex.so |
| macOS | libtensorflowlite_flex.dylib |
| Windows | tensorflowlite_flex.dll |
Vini re se TfLiteDelegate i nevojshëm do të instalohet automatikisht kur krijohet interpretuesi në kohën e ekzekutimit, për sa kohë që biblioteka e përbashkët është e lidhur. Nuk është e nevojshme të instalohet në mënyrë eksplicite instanca e deleguar siç kërkohet zakonisht me llojet e tjera të deleguarve.
Shënim: Kjo veçori është e disponueshme që nga versioni 2.7.
Python
LiteRT me operacione të zgjedhura TensorFlow do të instalohet automatikisht me paketën pip TensorFlow . Gjithashtu mund të zgjidhni të instaloni vetëm paketën pip LiteRT Interpreter .
Metrikat
Performanca
Kur përdorni një përzierje të operacioneve të integruara dhe të zgjedhura të TensorFlow, të gjitha optimizimet dhe operacionet e integruara të optimizuara të LiteRT do të jenë të disponueshme dhe të përdorshme me modelin e konvertuar.
Tabela e mëposhtme përshkruan kohën mesatare të nevojshme për të ekzekutuar inference në MobileNet në një Pixel 2. Kohët e listuara janë një mesatare prej 100 ekzekutimesh. Këto objektiva u ndërtuan për Android duke përdorur flamujt: --config=android_arm64 -c opt .
| Ndërto | Koha (milisekonda) |
|---|---|
Vetëm operacionet e integruara ( TFLITE_BUILTIN ) | 260.7 |
Duke përdorur vetëm operacionet TF ( SELECT_TF_OPS ) | 264.5 |
Madhësia binare
Tabela e mëposhtme përshkruan madhësinë binare të LiteRT për secilën ndërtim. Këto objektiva u ndërtuan për Android duke përdorur --config=android_arm -c opt .
| Ndërto | Madhësia binare C++ | Madhësia e APK-së për Android |
|---|---|---|
| Vetëm operacionet e integruara | 796 KB | 561 KB |
| Operacione të integruara + operacione TF | 23.0 MB | 8.0 MB |
| Operacione të integruara + operacione TF (1) | 4.1 MB | 1.8 MB |
(1) Këto biblioteka janë ndërtuar në mënyrë selektive për modelin i3d-kinetics-400 me 8 operacione të integruara TFLite dhe 3 operacione Tensorflow. Për më shumë detaje, ju lutemi shihni seksionin Reduce LiteRT binary size .
Kufizime të njohura
- Lloje të pambështetura: Disa operacione TensorFlow mund të mos mbështesin të gjithë grupin e llojeve të hyrjes/daljes që zakonisht janë të disponueshme në TensorFlow.
Përditësime
- Versioni 2.6
- Mbështetjet për operatorët e bazuar në atributet GraphDef dhe inicializimet e burimeve HashTable janë përmirësuar.
- Versioni 2.5
- Mund të aplikoni një optimizim të njohur si kuantizim pas trajnimit
- Versioni 2.4
- Pajtueshmëria me delegatët e përshpejtuar nga hardueri është përmirësuar