Edge-Geräte haben oft nur begrenzte Arbeitsspeicher- oder Rechenleistung. Verschiedene können Optimierungen auf Modelle angewendet werden, damit sie innerhalb dieser Einschränkungen. Darüber hinaus ermöglichen einige Optimierungen den Einsatz für beschleunigte Inferenz.
LiteRT und die TensorFlow-Modelloptimierung Toolkit enthält Tools, mit denen Sie die Komplexität der Inferenzoptimierung zu minimieren.
Es wird empfohlen, während der Anwendung die Modelloptimierung in Betracht zu ziehen. und Entwicklungsprozessen. In diesem Dokument werden einige Best Practices zur Optimierung TensorFlow-Modelle für die Bereitstellung auf Edge-Hardware
Warum Modelle optimiert werden sollten
Es gibt mehrere Möglichkeiten, wie die Modelloptimierung bei der Anwendung hilfreich sein kann. Entwicklung.
Größenreduzierung
Einige Arten der Optimierung können verwendet werden, um die Größe eines Modells zu reduzieren. Kleiner -Modelle bieten folgende Vorteile:
- Geringere Speichergröße:Kleinere Modelle belegen weniger Speicherplatz des Nutzers Geräte. Eine Android-App mit einem kleineren Modell benötigt weniger Speicherplatz auf dem Mobilgerät eines Nutzers.
- Geringere Downloadgröße:Kleinere Modelle benötigen weniger Zeit und Bandbreite, für die Geräte.
- Geringere Arbeitsspeichernutzung:Kleinere Modelle benötigen bei der Ausführung weniger RAM. gibt Arbeitsspeicher für andere Teile der App frei und kann zu einer besseren Leistung und Stabilität führen.
Die Quantisierung kann in all diesen Fällen die Größe eines Modells reduzieren, auf Kosten einer gewissen Genauigkeit. Durch Bereinigen und Clustering kann die Größe eines zum Herunterladen verfügbar, da es einfacher komprimierbar ist.
Latenzreduzierung
Die Latenz ist die Zeit, die benötigt wird, um eine einzelne Inferenz mit einer bestimmten Modell. Einige Formen der Optimierung können den Rechenaufwand reduzieren um Inferenz mit einem Modell auszuführen, was zu einer geringeren Latenz führt. Die Latenz kann auch Auswirkungen auf den Stromverbrauch haben.
Derzeit kann die Quantisierung verwendet werden, um die Latenz zu reduzieren, indem die die während der Inferenz erfolgen, möglicherweise auf Kosten einiger Genauigkeit.
Accelerator-Kompatibilität
Einige Hardwarebeschleuniger, z. B. Edge TPU, können Inferenzen extrem schnell mit die richtig optimiert wurden.
Im Allgemeinen müssen Modelle für diese Gerätetypen in einer bestimmten In der Dokumentation des jeweiligen Hardwarebeschleunigers erfahren Sie mehr Anforderungen.
Vor- und Nachteile
Optimierungen können potenziell zu Änderungen der Modellgenauigkeit führen, die bei der Anwendungsentwicklung berücksichtigt werden.
Die Genauigkeitsänderungen hängen vom einzelnen zu optimierenden Modell ab und sind und schwer im Voraus vorherzusagen. Im Allgemeinen sind Modelle, die für die Größe oder Latenz ein wenig an Genauigkeit verlieren. Je nach Anwendung finden, kann dies Auswirkungen auf die Nutzererfahrung. In seltenen Fällen Bestimmte Modelle können aufgrund des Optimierungsprozesses eine gewisse Genauigkeit erlangen.
Arten der Optimierung
LiteRT unterstützt derzeit die Optimierung durch Quantisierung, Beschneidung und Clustering.
Diese Tests sind Teil der TensorFlow-Modelloptimierung das Toolkit, das eine Ressourcen für Modelloptimierungstechniken, die mit TensorFlow kompatibel sind Lite.
Quantisierung
Quantisierung reduziert die Genauigkeit der Zahlen, die zur Darstellung der die standardmäßig 32-Bit-Gleitkommazahlen sind. Daraus ergeben sich mit einer kleineren Modellgröße und einer schnelleren Berechnung.
In LiteRT sind die folgenden Arten der Quantisierung verfügbar:
Verfahren | Datenanforderungen | Größenreduzierung | Genauigkeit | Unterstützte Hardware |
---|---|---|---|---|
Gleitkommazahl 16-Quantisierung nach Training | Keine Daten | Bis zu 50% | Unerhebliche Verluste bei der Genauigkeit | CPU, GPU |
Dynamische Bereichsquantisierung nach dem Training | Keine Daten | Bis zu 75% | Geringster Genauigkeitsverlust | CPU, GPU (Android) |
Ganzzahlquantisierung nach dem Training | Repräsentative Stichprobe ohne Label | Bis zu 75% | Geringer Genauigkeitsverlust | CPU, GPU (Android), EdgeTPU |
Quantisierungsorientiertes Training | Trainingsdaten mit Label | Bis zu 75% | Geringster Genauigkeitsverlust | CPU, GPU (Android), EdgeTPU |
Der folgende Entscheidungsbaum hilft Ihnen bei der Auswahl der die Sie für Ihr Modell verwenden möchten, einfach anhand der erwarteten Modellgröße Genauigkeit.
Nachfolgend sind die Latenz- und Genauigkeitsergebnisse für die Quantisierung nach dem Training und quantisierungsbewussten Trainings für einige Modelle. Alle Latenzwerte werden am Pixel 2-Geräte mit einer einzigen Big-Core-CPU Mit der Verbesserung des Toolkits die Zahlen hier:
Modell | Top-1-Genauigkeit (Original) | Top-1-Genauigkeit (nach dem Training quantisiert) | Top-1-Genauigkeit (Quantisierungsbewusstes Training) | Latenz (Original) (ms) | Latenz (nach dem Training quantisiert) (ms) | Latenz (Quantisierungsbewusstes Training) (ms) | Größe (Original) (MB) | Größe (optimiert) (MB) |
---|---|---|---|---|---|---|---|---|
Mobilenet-v1-1-224 | 0,709 | 0,657 | 0,70 | 124 | 112 | 64 | 16,9 | 4,3 |
Mobilenet-v2-1-224 | 0,719 | 0,637 | 0,709 | 89 | 98 | 54 | 14 | 3,6 |
Inception_v3 | 0.78 | 0,772 | 0,775 | 1130 | 845 | 543 | 95,7 | 23,9 |
Resnet_v2_101 | 0,770 | 0,768 | – | 3973 | 2868 | – | 178,3 | 44,9 |
Vollständige Ganzzahlquantisierung mit Int16-Aktivierungen und Int8-Gewichtungen
Quantisierung mit int16-Aktivierungen ist ein Quantisierungsschema zur vollständigen Ganzzahl mit Aktivierungen in int16 und Gewichtungen in int8. Dieser Modus kann die Genauigkeit des quantisierten Modells im Vergleich zum Modell mit Quantisierungsschema für vollständige Ganzzahlen mit Aktivierungen und Gewichtungen in Int8 mit einer ähnlichen Modellgröße. Sie wird empfohlen, wenn Aktivierungen empfindlich sind mit der Quantisierung.
HINWEIS: Derzeit werden nur nicht optimierte Referenz-Kernel-Implementierungen unterstützt. die in TFLite für dieses Quantisierungsschema zur Verfügung stehen. im Vergleich zu Int8-Kerneln langsam sein. Die Vorteile dieses Modus über spezielle Hardware oder kundenspezifische Software aufgerufen werden.
Im Folgenden finden Sie die Genauigkeitsergebnisse für einige Modelle, die von diesem Modus profitieren.
Modell | Messwerttyp für Genauigkeit | Genauigkeit (float32-Aktivierungen) | Genauigkeit (int8-Aktivierungen) | Genauigkeit (int16-Aktivierungen) |
---|---|---|---|---|
Wav2letter | WER | 6,7% | 7,7% | 7,2% |
DeepSpeech 0.5.1 (nicht gerollt) | CER | 6,13% | 43,67% | 6,52% |
YoloV3 | mAP(IOU=0,5) | 0,577 | 0,563 | 0,574 |
MobileNetV1 | Top-1-Genauigkeit | 0,7062 | 0,694 | 0,6936 |
MobileNetV2 | Top-1-Genauigkeit | 0,718 | 0,7126 | 0,7137 |
MobileBert | F1(Genaue Übereinstimmung) | 88,81(81,23) | 2,08(0) | 88,73(81,15) |
Beschneiden
Beschneidung funktioniert nach Entfernen von Parametern innerhalb eines Modells, die nur einen geringen Einfluss Vorhersagen zu treffen. Gekürzte Modelle haben dieselbe Größe auf dem Laufwerk und dieselbe Laufzeit Latenz, kann aber effektiver komprimiert werden. So ist das Abschneiden nützlicher, zum Reduzieren der Downloadgröße.
Zukünftig wird LiteRT für gekürzte Modelle die Latenz reduzieren.
Clustering
Clustering Dabei werden die Gewichtungen der einzelnen Schichten in einem Modell in eine vordefinierte Zahl gruppiert. von Clustern und teilen dann die Schwerpunkte für die Gewichtungen der einzelnen Cluster. für einzelne Cluster. Dies reduziert die Anzahl der eindeutigen Gewichtungswerte in einem Modell, und reduziert so die Komplexität.
Dadurch können geclusterte Modelle effektiver komprimiert werden, die dem Pruning ähnlich sind.
Entwicklungs-Workflow
Prüfen Sie zunächst, ob die Modelle in gehosteten Modelle für Ihre Anwendung geeignet sind. Falls nicht, Nutzern empfehlen, mit der Quantisierung nach dem Training , da dieses für viele Zwecke anwendbar ist und sind keine Trainingsdaten erforderlich.
Wenn die Zielgenauigkeits- und Latenzziele nicht erreicht werden oder Beschleunigerunterstützung wichtig, quantisierungsbewusst Training ist die bessere Option. Weitere Optimierungstechniken finden Sie in der TensorFlow-Modelloptimierung Toolkit.
Wenn Sie die Größe Ihres Modells weiter reduzieren möchten, versuchen Sie es mit der Bereinigung und/oder Clustering vor der Quantisierung Ihrer Modelle.