Best Practices für die Leistung

Mobile und eingebettete Geräte haben begrenzte Rechenressourcen, daher ist es wichtig, dass Ihre Anwendungsressource effizient bleibt. 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 finden. 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 verbrauchen, sondern auch im Allgemeinen schneller und energieeffizienter sind. Die folgenden Grafiken zeigen beispielsweise die Kompromisse bei Genauigkeit und Latenz bei einigen gängigen Bildklassifizierungsmodellen.

Diagramm der Modellgröße vs. Genauigkeit

Diagramm der Genauigkeit im Vergleich zur Latenz

Ein Beispiel für für Mobilgeräte optimierte Modelle sind MobileNets, die für mobile Vision-Anwendungen optimiert sind. TensorFlow Hub listet weitere Modelle auf, die speziell für mobile und eingebettete Geräte optimiert wurden.

Sie können die aufgeführten Modelle mithilfe von Lerntransfers mit Ihrem eigenen Dataset neu trainieren.

Profil für Ihr Modell erstellen

Sobald Sie ein für Ihre Aufgabe geeignetes Kandidatenmodell ausgewählt haben, empfiehlt es sich, ein Profil und Benchmarking des Modells zu erstellen. Das Benchmarking-Tool von TensorFlow Lite hat einen integrierten Profiler, mit dem Profilstatistiken pro Operator angezeigt werden können. Dies kann dabei helfen, Leistungsengpässe zu verstehen und herauszufinden, welche Operatoren die Rechenzeit dominieren.

Sie können auch das TensorFlow Lite-Tracing verwenden, um ein Profil für das Modell in Ihrer Android-Anwendung mithilfe des standardmäßigen Android-System-Tracings zu erstellen und die Operatoraufrufe nach Zeit mit GUI-basierten Tools zur Profilerstellung zu visualisieren.

Operatoren in der Grafik profilieren und optimieren

Wenn ein bestimmter Operator häufig im Modell vorkommt und Sie anhand der Profilerstellung feststellen, dass der Operator die meiste Zeit verbraucht, können Sie sich mit der Optimierung dieses Operators befassen. Dieses Szenario sollte eher selten vorkommen, da TensorFlow Lite für die meisten Operatoren optimierte Versionen hat. 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 finden Sie im Leitfaden für benutzerdefinierte Operatoren.

Modell optimieren

Die Modelloptimierung zielt darauf ab, kleinere Modelle zu erstellen, die im Allgemeinen schneller und energieeffizienter sind, damit sie auf Mobilgeräten bereitgestellt werden können. TensorFlow Lite unterstützt mehrere Optimierungstechniken wie die Quantisierung.

Weitere Informationen finden Sie in der Dokumentation zur Modelloptimierung.

Anzahl der Threads optimieren

TensorFlow Lite unterstützt Multithread-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, beansprucht Ihr Modell jedoch mehr Ressourcen und Leistung.

Bei einigen Anwendungen ist die Latenz wichtiger als die Energieeffizienz. Sie können die Anzahl der Threads erhöhen, indem Sie die Anzahl der Interpreter-Threads festlegen. Die Multithread-Ausführung geht jedoch mit einer erhöhten Leistungsvariabilität einher, je nachdem, was sonst gleichzeitig ausgeführt wird. Dies gilt besonders für mobile Apps. So können isolierte Tests beispielsweise eine doppelt so hohe Beschleunigung im Vergleich zu Single-Threaded-Tests zeigen. Wenn jedoch eine andere Anwendung gleichzeitig ausgeführt wird, kann dies zu einer schlechteren Leistung als bei Single-Threaded-Tests führen.

Redundante Kopien entfernen

Wenn Ihre Anwendung nicht sorgfältig konzipiert wurde, kann es zu redundanten Kopien kommen, wenn die Eingabe in das Modell eingespeist und die Ausgabe aus dem Modell gelesen wird. Achten Sie darauf, redundante Kopien zu entfernen. Wenn Sie übergeordnete APIs wie Java verwenden, sollten Sie die Dokumentation sorgfältig auf Leistungsbehinderungen prüfen. Beispielsweise ist die Java API viel schneller, wenn ByteBuffers als Eingabe verwendet wird.

Profil für Ihre Anwendung mit plattformspezifischen Tools erstellen

Plattformspezifische Tools wie Android Profiler und Instruments bieten eine Fülle von Profilinformationen, die zur Fehlerbehebung Ihrer App verwendet werden können. Manchmal ist der Leistungsfehler nicht im Modell enthalten, sondern in Teilen des Anwendungscodes, die mit dem Modell interagieren. Machen Sie sich unbedingt mit den plattformspezifischen Profilerstellungstools und den Best Practices für Ihre Plattform vertraut.

Prüfen, ob Ihr Modell von den auf dem Gerät verfügbaren Hardwarebeschleunigern profitiert

TensorFlow Lite bietet neue Möglichkeiten, Modelle mit schnellerer Hardware wie GPUs, DSPs und neuronalen Beschleunigern zu beschleunigen. In der Regel werden diese Beschleuniger über delegierte Untermodule bereitgestellt, die Teile der Ausführung des Interpreters übernehmen. So kann TensorFlow Lite Bevollmächtigte verwenden:

  • GPU Delegate ist unter Android und iOS mit OpenGL/OpenCL bzw. Metal verfügbar. Informationen zum Ausprobieren finden Sie unter GPU Delegate.
  • Sie können einen eigenen Bevollmächtigten erstellen, wenn Sie Zugriff auf nicht standardmäßige Hardware haben. Weitere Informationen finden Sie unter TensorFlow Lite-Bevollmächtigte.

Beachten Sie, dass einige Beschleuniger für verschiedene Modelltypen besser funktionieren. Einige Bevollmächtigte unterstützen nur Float-Modelle oder Modelle, die auf eine bestimmte Weise optimiert sind. Es ist wichtig, für jeden Bevollmächtigten ein Benchmarking durchzuführen, um zu sehen, ob dies 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. Umgekehrt sind Beschleuniger eine gute Wahl für große Modelle mit hoher arithmetischer Intensität.