Da die integrierte LiteRT-Operator-Bibliothek nur eine nicht jedes Modell ist konvertierbar. Weitere Informationen Weitere Informationen zur Operatorkompatibilität
Um eine Konvertierung zu ermöglichen, können Nutzer die Verwendung bestimmter TensorFlow-Typen aktivieren Ops in ihrem LiteRT-Modell an. Wenn Sie jedoch Für LiteRT-Modelle mit TensorFlow-Operationen muss der Kern TensorFlow-Laufzeit, die die binäre Größe des LiteRT-Interpreters erhöht. Bei Android können Sie dies vermeiden, indem Sie nur den erforderlichen Tensorflow erstellen. Ops. Weitere Informationen finden Sie unter Binärzahlen reduzieren Größe.
In diesem Dokument wird beschrieben, wie Sie Daten konvertieren und Führen Sie ein LiteRT-Modell aus, das TensorFlow-Operationen auf einem Plattform Ihrer Wahl. Außerdem werden Leistung und Größe Messwerte und bekannte Einschränkungen.
Modell konvertieren
Das folgende Beispiel zeigt, wie Sie ein LiteRT-Modell mit select TensorFlow-Vorgänge
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)
Inferenz ausführen
Wenn Sie ein LiteRT-Modell verwenden, das mit Unterstützung für TensorFlow-Operationen auswählen, muss der Client auch eine LiteRT-Laufzeit verwenden, enthält die erforderliche Bibliothek für TensorFlow-Operationen.
AAE für Android
Um die Binärgröße zu reduzieren, erstellen Sie Ihre eigenen benutzerdefinierten AAR-Dateien wie in der Anleitung beschrieben. im nächsten Abschnitt. Ist die binäre Größe kein Bedenken haben, empfehlen wir, die vorkonfigurierten automatisch angewendeten Empfehlungen für TensorFlow-Operationen zu verwenden. gehostet bei MavenCentral.
Sie können dies in Ihren build.gradle
-Abhängigkeiten angeben, indem Sie es zusammen mit
Standard-AAE für LiteRT:
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'
}
Wenn Sie nächtliche Momentaufnahmen verwenden möchten, achten Sie darauf, dass Sie einen Sonatype-Snapshot hinzugefügt haben. .
Nachdem Sie die Abhängigkeit hinzugefügt haben, wird der für die Verarbeitung der sollten die TensorFlow-Operationen des Graphen automatisch für Grafiken installiert werden, .
Hinweis: Die TensorFlow-Operationsabhängigkeit ist relativ groß. Wahrscheinlich werden Sie
unnötige x86-ABIs in Ihrer .gradle
-Datei herausfiltern,
Ihr abiFilters
.
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
AAE für Android erstellen
Zur Reduzierung der Binärgröße oder für andere fortgeschrittene Fälle können Sie auch den manuell in die Bibliothek aufnehmen. Annahme eines funktionierenden LiteRT-Builds Umgebung, erstellen Sie die automatisch angewendeten Empfehlungen für Android und wählen Sie TensorFlow-Operationen als folgt:
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
Dadurch wird die AAR-Datei bazel-bin/tmp/tensorflow-lite.aar
für
Integrierte LiteRT- und benutzerdefinierte Vorgänge: und generieren Sie die AAR-Datei.
bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
für TensorFlow-Vorgänge Wenn Sie
keine funktionierende Build-Umgebung haben, können Sie die oben genannten Dateien auch mit
docker enthält.
Dort können Sie die AAR-Dateien entweder direkt in Ihr Projekt importieren oder Veröffentlichen Sie die benutzerdefinierten AAR-Dateien in Ihrem lokalen Maven-Repository:
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
Vergewissern Sie sich schließlich in der build.gradle
Ihrer App, dass mavenLocal()
vorhanden ist.
und ersetzen Sie die Standard-LiteRT-Abhängigkeit durch die Abhängigkeit, die
unterstützt ausgewählte TensorFlow-Operationen:
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 verwenden
LiteRT bietet nächtliche vorgefertigte, ausgewählte TF Ops CocoaPods für arm64
,
auf die Sie neben dem TensorFlowLiteSwift
- oder
TensorFlowLiteObjC
CocoaPods.
Hinweis: Wenn Sie ausgewählte TF-Operationen in einem x86_64
-Simulator verwenden müssen, können Sie
das Select-Ops-Framework. Weitere Informationen finden Sie unter Baby und Xcode verwenden.
.
# In your Podfile target:
pod 'TensorFlowLiteSwift' # or 'TensorFlowLiteObjC'
pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'
Nach dem Ausführen von pod install
müssen Sie ein zusätzliches Verknüpfungs-Flag angeben,
das Auswählen des TF Ops-Frameworks
in Ihr Projekt zu erzwingen. In Ihrem Xcode-Projekt
Gehe zu Build Settings
-> Other Linker Flags
und fügen Sie Folgendes hinzu:
Für Versionen ab 2.9.0:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.xcframework/ios-arm64/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
Für Versionen < 2.9.0:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
Sie sollten dann alle Modelle ausführen können, die mit dem SELECT_TF_OPS
konvertiert wurden,
in Ihrer iOS-App. Beispielsweise können Sie die Bildklassifizierung für iOS
App
um die Funktion zum Auswählen von TF Ops zu testen.
- Ersetzen Sie die Modelldatei durch die mit aktiviertem
SELECT_TF_OPS
konvertierte Datei. - Fügen Sie der
Podfile
die AbhängigkeitTensorFlowLiteSelectTfOps
hinzu. - Fügen Sie das zusätzliche Verknüpfungs-Flag wie oben hinzu.
- Führen Sie die Beispiel-App aus und prüfen Sie, ob das Modell korrekt funktioniert.
Bazel + Xcode verwenden
LiteRT mit ausgewählten TensorFlow-Operationen für iOS kann mit Bazel erstellt werden.
Folgen Sie der Erstellungsanleitung für iOS, um die
Bazel-Arbeitsbereich und .bazelrc
-Datei korrekt.
Nachdem Sie den Arbeitsbereich mit aktivierter iOS-Unterstützung konfiguriert haben, können Sie den
folgenden Befehl zum Erstellen des Add-on-Frameworks „Select TF Ops“, das hinzugefügt werden kann
zusätzlich zum regulären TensorFlowLiteC.framework
. Wenn Sie TF Ops auswählen,
Framework nicht für die i386
-Architektur erstellt werden kann, müssen Sie
Geben Sie die Liste der Zielarchitekturen ohne i386
an.
bazel build -c opt --config=ios --ios_multi_cpus=arm64,x86_64 \
//tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework
Dadurch wird das Framework unter bazel-bin/tensorflow/lite/ios/
erstellt.
-Verzeichnis. Sie können dieses neue Framework zu Ihrem Xcode-Projekt hinzufügen, indem Sie
die im Abschnitt Xcode-Projekt
Einstellungen im
iOS-Erstellungsanleitung
Nachdem Sie das Framework Ihrem App-Projekt hinzugefügt haben, wird ein zusätzliches Verknüpfungs-Flag
Sollte in Ihrem App-Projekt angegeben werden, um das Laden der ausgewählten TF-Operationen zu erzwingen
Framework. Gehen Sie in Ihrem Xcode-Projekt zu Build Settings
-> Other Linker
Flags
und fügen Sie Folgendes hinzu:
-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>
C/C++-
Wenn Sie zum Erstellen von LiteRT mit Bazel oder CMake arbeiten Interpreter können Sie Flex-Delegation aktivieren, indem Sie einen LiteRT Flex verknüpfen der gemeinsam genutzten Bibliothek delegieren. Sie können sie mit dem folgenden Befehl von Bazel erstellen.
bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex
Dieser Befehl generiert die folgende gemeinsam genutzte Bibliothek in
bazel-bin/tensorflow/lite/delegates/flex
Plattform | Name der Bibliothek |
---|---|
Linux | libtensorflowlite_flex.so |
macOS | libtensorflowlite_flex.dylib |
Windows | tensorflowlite_flex.dll |
Beachten Sie, dass die erforderliche TfLiteDelegate
automatisch installiert wird, wenn
Erstellen des Interpreters zur Laufzeit, solange die gemeinsam genutzte Bibliothek verknüpft ist. Es
ist nicht erforderlich, um die Delegatinstanz explizit zu installieren, wie es üblicherweise
für andere Delegattypen erforderlich.
Hinweis: Diese Funktion ist seit Version 2.7 verfügbar.
Python
LiteRT mit ausgewählten TensorFlow-Operationen wird automatisch installiert mit Das TensorFlow-PIP-Paket. Sie können Sie wählen auch aus, dass nur die LiteRT-Interpreter-PIP installiert wird. Paket.
Messwerte
Leistung
Wenn Sie eine Mischung aus integrierten und ausgewählten TensorFlow-Operationen verwenden, LiteRT-Optimierungen und optimierte integrierte Vorgänge sind verfügbar und das mit dem konvertierten Modell verwendet werden kann.
In der folgenden Tabelle wird die durchschnittliche Zeit beschrieben, die für die Ausführung einer Inferenz für
MobileNet auf einem Pixel 2. Die angegebenen Zeiten entsprechen einem Durchschnitt von 100 Ausführungen. Diese
Ziele wurden für Android mit den Flags --config=android_arm64 -c opt
erstellt.
Build | Zeit (Millisekunden) |
---|---|
Nur integrierte Vorgänge (TFLITE_BUILTIN ) |
260,7 |
Nur TF-Operationen werden verwendet (SELECT_TF_OPS ) |
264,5 |
Binärgröße
In der folgenden Tabelle wird die binäre Größe von LiteRT für jeden Build beschrieben.
Diese Ziele wurden mit --config=android_arm -c opt
für Android erstellt.
Build | C++-Binärgröße | Android-APK-Größe |
---|---|---|
Nur integrierte Vorgänge | 796 KB | 561 KB |
Integrierte Operationen und TF Ops | 23,0 MB | 8 MB |
Integrierte Operationen + TF Ops (1) | 4,1 MB | 1,8 MB |
(1) Diese Bibliotheken wurden selektiv für i3d-kinetics-400 erstellt. Modell mit 8 integrierten TFLite-Operationen und 3 Tensorflow-Operationen. Weitere Informationen finden Sie in der Reduzieren Sie die Größe des Binärprogramms für LiteRT.
Bekannte Einschränkungen
- Nicht unterstützte Typen: Bestimmte TensorFlow-Operationen unterstützen möglicherweise nicht alle die in TensorFlow typischerweise verfügbar sind.
Updates
- Version 2.6
<ph type="x-smartling-placeholder">
- </ph>
- Unterstützung für GraphDef-attributbasierte Operatoren und HashTable-Ressource die Initialisierungen verbessert.
- Version 2.5
<ph type="x-smartling-placeholder">
- </ph>
- Wenden Sie eine Optimierung an, die nach dem Training Quantisierung
- Version 2.4
<ph type="x-smartling-placeholder">
- </ph>
- Die Kompatibilität mit hardwarebeschleunigten Bevollmächtigten wurde verbessert.