Mobile Geräte und Embedded Devices haben nur begrenzte Rechenressourcen. Daher ist es wichtig, dass Ihre Anwendung ressourcenschonend ist. Wir haben eine Liste mit Best Practices und Strategien zusammengestellt, mit denen Sie die Leistung Ihres TensorFlow Lite-Modells verbessern können.
Das beste Modell für die Aufgabe auswählen
Je nach Aufgabe müssen Sie einen Kompromiss zwischen Modellkomplexität und -größe eingehen. Wenn Ihre Aufgabe eine hohe Genauigkeit erfordert, benötigen Sie möglicherweise ein großes und komplexes Modell. Für Aufgaben, die weniger Präzision erfordern, ist es besser, ein kleineres Modell zu verwenden, da diese nicht nur weniger Speicherplatz und Arbeitsspeicher benötigen, sondern in der Regel auch schneller und energieeffizienter sind. Die Grafiken unten zeigen beispielsweise die Kompromisse zwischen Genauigkeit und Latenz für einige gängige Modelle zur Bildklassifizierung.


Ein Beispiel für Modelle, die für Mobilgeräte optimiert sind, sind MobileNets, die für mobile Vision-Anwendungen optimiert sind. Unter Kaggle Models finden Sie weitere Modelle, die speziell für Mobilgeräte und eingebettete Geräte optimiert wurden.
Sie können die aufgeführten Modelle mit Ihrem eigenen Dataset neu trainieren, indem Sie Transfer Learning verwenden.
Profil des Modells erstellen
Nachdem Sie ein Kandidatenmodell ausgewählt haben, das für Ihre Aufgabe geeignet ist, sollten Sie es profilieren und Benchmarks dafür erstellen. Das Benchmarking-Tool von LiteRT hat einen integrierten Profiler, der Profilerstellungsstatistiken für jeden Operator anzeigt. So lassen sich Leistungsengpässe und die Operatoren, die die Rechenzeit dominieren, besser nachvollziehen.
Sie können auch LiteRT-Tracing verwenden, um das Modell in Ihrer Android-Anwendung mit dem standardmäßigen Android-System-Tracing zu profilieren und die Operatoraufrufe im Zeitverlauf mit GUI-basierten Profiling-Tools zu visualisieren.
Operatoren im Diagramm profilieren und optimieren
Wenn ein bestimmter Operator häufig im Modell vorkommt und Sie anhand des Profilings feststellen, dass er die meiste Zeit in Anspruch nimmt, können Sie ihn optimieren. Dieses Szenario sollte selten vorkommen, da TensorFlow Lite für die meisten Operatoren optimierte Versionen bietet. Sie können jedoch möglicherweise eine schnellere Version eines benutzerdefinierten Vorgangs schreiben, wenn Sie die Einschränkungen kennen, unter denen der Operator ausgeführt wird. Weitere Informationen
Modell optimieren
Bei der Modelloptimierung geht es darum, kleinere Modelle zu erstellen, die in der Regel schneller und energieeffizienter sind, sodass sie auf Mobilgeräten bereitgestellt werden können. LiteRT unterstützt mehrere Optimierungstechniken wie die Quantisierung.
Weitere Informationen finden Sie in der Dokumentation zur Modelloptimierung.
Anzahl der Threads anpassen
LiteRT unterstützt Multi-Thread-Kernel für viele Operatoren. Sie können die Anzahl der Threads erhöhen und die Ausführung von Operatoren beschleunigen. Wenn Sie die Anzahl der Threads erhöhen, verbraucht Ihr Modell jedoch mehr Ressourcen und Strom.
Bei einigen Anwendungen ist die Latenz möglicherweise wichtiger als die Energieeffizienz. Sie können die Anzahl der Threads erhöhen, indem Sie die Anzahl der Interpreter-Threads festlegen. Die Ausführung in mehreren Threads führt jedoch zu einer erhöhten Leistungsvariabilität, je nachdem, was sonst noch gleichzeitig ausgeführt wird. Das gilt insbesondere für mobile Apps. Beispielsweise kann es bei isolierten Tests zu einer zweifachen Beschleunigung im Vergleich zu Single-Threaded kommen. Wenn jedoch gleichzeitig eine andere App ausgeführt wird, kann dies zu einer schlechteren Leistung als bei Single-Threaded führen.
Redundante Kopien entfernen
Wenn Ihre Anwendung nicht sorgfältig konzipiert ist, kann es zu redundanten Kopien kommen, wenn die Eingabe an das Modell übergeben und die Ausgabe daraus gelesen wird. Achten Sie darauf, dass keine redundanten Kopien vorhanden sind. Wenn Sie APIs auf höherer Ebene wie Java verwenden, sollten Sie die Dokumentation sorgfältig auf Leistungshinweise prüfen. Die Java API ist beispielsweise viel schneller, wenn ByteBuffers als Eingaben verwendet werden.
Anwendung mit plattformspezifischen Tools profilieren
Plattformspezifische Tools wie Android Profiler und Instruments liefern eine Fülle von Profiling-Informationen, die zum Debuggen Ihrer App verwendet werden können. Manchmal liegt der Leistungsfehler nicht im Modell, sondern in Teilen des Anwendungscodes, die mit dem Modell interagieren. Machen Sie sich mit den plattformspezifischen Profiling-Tools und Best Practices für Ihre Plattform vertraut.
Bewerten, ob Ihr Modell von der Verwendung von Hardwarebeschleunigern auf dem Gerät profitiert
LiteRT bietet neue Möglichkeiten, Modelle mit schnellerer Hardware wie GPUs, DSPs und neuronalen Beschleunigern zu beschleunigen. Normalerweise werden diese Beschleuniger über delegate-Untermodule bereitgestellt, die Teile der Interpreterausführung übernehmen. LiteRT kann Delegates verwenden, indem:
- Der GPU-Delegate ist auf Android und iOS verfügbar und verwendet OpenGL/OpenCL bzw. Metal. Informationen zum Ausprobieren finden Sie unter GPU-Delegat.
- Wenn Sie Zugriff auf nicht standardmäßige Hardware haben, können Sie einen eigenen Delegate erstellen. Weitere Informationen finden Sie unter LiteRT-Delegaten.
Einige Beschleuniger eignen sich besser für bestimmte Arten von Modellen. Einige Delegates unterstützen nur Gleitkommamodelle oder Modelle, die auf bestimmte Weise optimiert wurden. Es ist wichtig, jeden Delegaten zu benchmarken, um festzustellen, ob er eine gute Wahl für Ihre Anwendung ist. Wenn Sie beispielsweise ein sehr kleines Modell haben, lohnt es sich möglicherweise nicht, das Modell an die GPU zu delegieren. Beschleuniger sind dagegen eine gute Wahl für große Modelle mit hoher arithmetischer Intensität.