Best Practices für die Leistung

Mobile und eingebettete Geräte verfügen nur über begrenzte Rechenressourcen. Daher ist es wichtig, dass Ihre Anwendungsressourcen effizient bleiben. Wir haben eine Liste mit Best Practices und Strategien zusammengestellt, mit denen Sie die Leistung Ihres TensorFlow Lite-Modells verbessern können.

Wählen Sie das beste Modell für die Aufgabe

Abhängig von der 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 sie nicht nur weniger Speicherplatz und Speicher benötigen, sondern im Allgemeinen auch schneller und energieeffizienter sind. Die folgenden Grafiken zeigen beispielsweise die Kompromisse zwischen Genauigkeit und Latenz für einige gängige Bildklassifizierungsmodelle.

Graph of model size vs accuracy

Graph of accuracy vs latency

Ein Beispiel für Modelle, die für mobile Geräte optimiert wurden, sind MobileNets , die für mobile Bildverarbeitungsanwendungen optimiert sind. In den gehosteten Modellen sind mehrere andere Modelle aufgeführt, die speziell für mobile und eingebettete Geräte optimiert wurden.

Sie können die aufgelisteten Modelle mithilfe von Transfer Learning in Ihrem eigenen Datensatz neu trainieren. Lesen Sie unser Tutorial zum Transferlernen zur Bildklassifizierung und Objekterkennung .

Profilieren Sie Ihr Modell

Sobald Sie ein Kandidatenmodell ausgewählt haben, das für Ihre Aufgabe geeignet ist, empfiehlt es sich, Ihr Modell zu profilieren und zu bewerten. Das TensorFlow Lite- Benchmarking-Tool verfügt über einen integrierten Profiler, der Profilerstellungsstatistiken pro Bediener anzeigt. Dies kann helfen, Leistungsengpässe zu verstehen und festzustellen, welche Operatoren die Rechenzeit dominieren.

Sie können die TensorFlow Lite-Ablaufverfolgung auch verwenden , um das Modell in Ihrer Android-Anwendung mithilfe der Standard-Ablaufverfolgung für Android-Systeme zu profilieren und die Bedieneraufrufe mit GUI-basierten Profilerstellungstools nach Zeit zu visualisieren.

Profilieren und optimieren Sie Operatoren im Diagramm

Wenn ein bestimmter Operator häufig im Modell angezeigt wird und Sie anhand der Profilerstellung feststellen, dass der Operator die meiste Zeit in Anspruch nimmt, können Sie die Optimierung dieses Operators in Betracht ziehen. Dieses Szenario sollte selten sein, da TensorFlow Lite für die meisten Bediener optimierte Versionen hat. Möglicherweise können Sie jedoch eine schnellere Version einer benutzerdefinierten Operation schreiben, wenn Sie die Einschränkungen kennen, in denen der Operator ausgeführt wird. Lesen Sie unsere benutzerdefinierte Bedienerdokumentation .

Optimieren Sie Ihr Modell

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

Weitere Informationen finden Sie in unseren Dokumenten zur Modelloptimierung.

Passen Sie die Anzahl der Threads an

TensorFlow Lite unterstützt Multithread-Kernel für viele Bediener. Sie können die Anzahl der Threads erhöhen und die Ausführung von Operatoren beschleunigen. Wenn Sie jedoch die Anzahl der Threads erhöhen, verbraucht Ihr Modell mehr Ressourcen und mehr Leistung.

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 mit mehreren Threads geht jedoch zu Lasten einer erhöhten Leistungsvariabilität, je nachdem, was gleichzeitig ausgeführt wird. Dies gilt insbesondere für mobile Apps. Beispielsweise können isolierte Tests eine zweifache Beschleunigung gegenüber Single-Threaded zeigen. Wenn jedoch gleichzeitig eine andere App ausgeführt wird, kann dies zu einer schlechteren Leistung führen als Single-Threaded.

Beseitigen Sie redundante Kopien

Wenn Ihre Anwendung nicht sorgfältig entworfen wurde, kann es zu redundanten Kopien kommen, wenn Sie die Eingabe in das Modell einspeisen und die Ausgabe aus dem Modell lesen. Stellen Sie sicher, dass redundante Kopien entfernt werden. Wenn Sie übergeordnete APIs wie Java verwenden, überprüfen Sie die Dokumentation sorgfältig auf Leistungseinschränkungen. Beispielsweise ist die Java-API viel schneller, wenn ByteBuffers als Eingaben verwendet werden .

Profilieren Sie Ihre Anwendung mit plattformspezifischen Tools

Plattformspezifische Tools wie Android Profiler und Instruments bieten eine Fülle von Profilinformationen, mit denen Sie Ihre App debuggen können. Manchmal liegt der Leistungsfehler nicht im Modell, sondern in Teilen des Anwendungscodes, die mit dem Modell interagieren. Machen Sie sich mit plattformspezifischen Profiling-Tools und Best Practices für Ihre Plattform vertraut.

Bewerten Sie, ob Ihr Modell von der Verwendung der auf dem Gerät verfügbaren Hardwarebeschleuniger profitiert

TensorFlow Lite hat neue Möglichkeiten hinzugefügt, um Modelle mit schnellerer Hardware wie GPUs, DSPs und neuronalen Beschleunigern zu beschleunigen. In der Regel werden diese Beschleuniger durch delegierte Submodule verfügbar gemacht, die Teile der Interpreterausführung übernehmen. TensorFlow Lite kann Delegaten verwenden von:

  • Verwenden der Android- API für neuronale Netze . Sie können diese Hardwarebeschleuniger-Backends verwenden, um die Geschwindigkeit und Effizienz Ihres Modells zu verbessern. Informationen zum Aktivieren der Neural Networks-API finden Sie im NNAPI-Delegatenhandbuch .
  • Der GPU-Delegat ist für Android und iOS mit OpenGL / OpenCL bzw. Metal verfügbar. Informationen zum Ausprobieren finden Sie im Tutorial und in der Dokumentation zu GPU-Delegierten .
  • Hexagon Delegate ist für Android verfügbar. Es nutzt den Qualcomm Hexagon DSP, wenn er auf dem Gerät verfügbar ist. Weitere Informationen finden Sie im Hexagon-Delegierten-Tutorial .
  • Es ist möglich, einen eigenen Delegaten zu erstellen, wenn Sie Zugriff auf nicht standardmäßige Hardware haben. Weitere Informationen finden Sie unter TensorFlow Lite-Delegierte .

Beachten Sie, dass einige Beschleuniger für verschiedene Modelltypen besser funktionieren. Einige Delegierte unterstützen nur Float-Modelle oder Modelle, die auf eine bestimmte Weise optimiert wurden. Es ist wichtig, jeden Delegierten zu bewerten, um festzustellen, 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 NN-API oder die GPU zu delegieren. Umgekehrt sind Beschleuniger eine gute Wahl für große Modelle mit hoher Rechenintensität.

Benötigen Sie weitere Hilfe

Das TensorFlow-Team hilft Ihnen gerne bei der Diagnose und Behebung spezifischer Leistungsprobleme, mit denen Sie möglicherweise konfrontiert sind. Bitte reichen Sie ein Problem auf GitHub mit Details zum Problem ein.