Mobile und eingebettete Geräte verfügen über begrenzte Rechenressourcen, sodass es damit Ihre Anwendungsressource effizient bleibt. Wir haben eine Liste mit von Best Practices und Strategien, mit denen Sie Ihre TensorFlow-Daten Leistung des Lite-Modells
Das beste Modell für die Aufgabe auswählen
Je nach Aufgabe müssen Sie einen Kompromiss zwischen der Modellkomplexität und und Größe. Wenn Ihre Aufgabe eine hohe Genauigkeit erfordert, benötigen Sie möglicherweise eine große und ein komplexes Modell erstellen. Für Aufgaben, die weniger Präzision erfordern, ist es besser, ein da sie nicht nur weniger Speicherplatz und Arbeitsspeicher verbrauchen, auch im Allgemeinen schneller und energieeffizienter. In den Grafiken unten sehen Sie beispielsweise Kompromisse bei Genauigkeit und Latenz bei einigen gängigen Bildklassifizierungsmodellen.
Ein Beispiel für für Mobilgeräte optimierte Modelle sind MobileNets, die für Mobilgeräte optimiert sind Anwendungen für visuelles Sehen. Kaggle Unter "Modelle" finden Sie die speziell für Mobil- und eingebettete Geräte optimiert wurden.
Sie können die aufgeführten Modelle mithilfe von Übertragungen für Ihr eigenes Dataset neu trainieren zu lernen.
Profil für Ihr Modell erstellen
Sobald Sie ein für Ihre Aufgabe geeignetes Kandidatenmodell ausgewählt haben, ein Profil und Benchmarking für Ihr Modell zu erstellen. LiteRT-Benchmarking Tool verfügt über einen integrierten Profiler, der Profilerstellungsstatistiken pro Operator anzeigt. Dies kann helfen, Leistungsengpässe zu verstehen und herauszufinden, welche Operatoren die Berechnungszeit.
Sie können auch LiteRT Tracing zum Profil das Modell in Ihrer Android-App mithilfe des standardmäßigen Android-System-Tracings. und die Operatoraufrufe mit GUI-basierter Profilerstellung nach Zeit zu visualisieren Werkzeuge.
Operatoren in der Grafik profilieren und optimieren
Wenn ein bestimmter Operator häufig im Modell auftaucht und dass der Operator am meisten Zeit in Anspruch nimmt, Optimierung dieses Operators. Dieses Szenario sollte so selten sein wie TensorFlow Lite hat für die meisten Operatoren optimierte Versionen. Möglicherweise können Sie jedoch Schreiben Sie eine schnellere Version eines benutzerdefinierten Vorgangs, wenn Sie die Einschränkungen kennen, ausgeführt wird. Weitere Informationen finden Sie im Leitfaden für benutzerdefinierte Operatoren.
Modell optimieren
Ziel der Modelloptimierung ist es, kleinere Modelle zu erstellen, die im Allgemeinen schneller energieeffizienter, sodass sie auf Mobilgeräten eingesetzt werden können. LiteRT unterstützt mehrere Optimierungsmethoden, z. B. die Quantisierung.
Weitere Informationen finden Sie in der Dokumentation zur Modelloptimierung.
Anzahl der Threads optimieren
LiteRT unterstützt Multithread-Kernel für viele Operatoren. Sie können die Anzahl der Threads erhöhen und die Ausführung von Operatoren beschleunigen. Steigerung Die Anzahl der Threads führt jedoch dazu, dass Ihr Modell mehr Ressourcen und Energie.
Bei einigen Anwendungen ist die Latenz wichtiger als die Energieeffizienz. Ich kann die Anzahl der Threads erhöhen, indem die Anzahl der Interpreter festgelegt wird Threads: Die Multithread-Ausführung geht jedoch zulasten einer verbesserten Leistung. Variabilität abhängig davon, was sonst gleichzeitig ausgeführt wird. Dies ist insbesondere bei mobilen Apps. So können z. B. isolierte Tests schneller als mit Single-Threaded. Wenn aber eine andere App gleichzeitig ausgeführt wird, kann die Leistung schlechter als bei Single-Threaded sein.
Redundante Kopien entfernen
Wenn Ihre Anwendung nicht sorgfältig entwickelt wurde, sind unter Umständen redundante Kopien vorhanden.
wenn die Eingabe in das Modell eingespeist und die Ausgabe daraus gelesen wird. Achten Sie darauf,
redundante Kopien zu vermeiden. Wenn Sie übergeordnete APIs wie Java verwenden,
lesen Sie die Dokumentation sorgfältig auf
Leistungsvorbehalte. Beispiel:
ist die Java API viel schneller, wenn ByteBuffers
als
inputs auf.
Profil für Ihre Anwendung mit plattformspezifischen Tools erstellen
Plattformspezifische Tools wie Android Profiler und Instrumente sorgen für Reichtum von Profilinformationen, die zum Debuggen der Anwendung verwendet werden können. Manchmal ist möglicherweise nicht im Modell enthalten, sondern in Teilen des Anwendungscodes, mit dem Modell interagieren können. Machen Sie sich mit der Plattform vertraut Profilerstellungstools und Best Practices für Ihre Plattform.
Prüfen, ob Ihr Modell von den auf dem Gerät verfügbaren Hardwarebeschleunigern profitiert
LiteRT bietet neue Möglichkeiten, Modelle mit schnellerer Hardware zu beschleunigen wie GPUs, DSPs und neuronale Beschleuniger. In der Regel sind diese Beschleuniger werden in den untergeordneten Modulen delegate, der Dolmetscherausführung. LiteRT kann auf folgende Weise Bevollmächtigte verwenden:
- GPU Delegate ist unter Android und iOS mit OpenGL/OpenCL und 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. Siehe LiteRT weitere Informationen.
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 Es ist wichtig, alle Bevollmächtigten zu vergleichen, um zu sehen, für Ihre Anwendung auswählen. Wenn Sie beispielsweise ein sehr kleines Modell haben, lohnt es sich nicht, das Modell an die GPU zu delegieren. Umgekehrt sind Beschleuniger gute Wahl für große Modelle mit hoher arithmetischer Intensität.