Edge-Geräte verfügen häufig über einen begrenzten Speicher oder eine begrenzte Rechenleistung. Verschiedene Optimierungen können auf Modelle angewendet werden, damit sie innerhalb dieser Einschränkungen ausgeführt werden können. Darüber hinaus ermöglichen einige Optimierungen die Verwendung spezieller Hardware für eine beschleunigte Inferenz.
TensorFlow Lite und das TensorFlow Model Optimization Toolkit bieten Tools zur Minimierung der Komplexität der Inferenzoptimierung.
Es wird empfohlen, die Modelloptimierung während des Anwendungsentwicklungsprozesses in Betracht zu ziehen. In diesem Dokument werden einige bewährte Methoden zur Optimierung von TensorFlow-Modellen für die Bereitstellung auf Edge-Hardware beschrieben.
Warum Modelle optimiert werden sollten
Es gibt verschiedene Möglichkeiten, wie die Modelloptimierung bei der Anwendungsentwicklung helfen kann.
Größenreduzierung
Einige Formen der Optimierung können verwendet werden, um die Größe eines Modells zu reduzieren. Kleinere Modelle bieten folgende Vorteile:
- Kleinere Speichergröße: Kleinere Modelle belegen weniger Speicherplatz auf den Geräten Ihrer Benutzer. Beispielsweise belegt eine Android-App mit einem kleineren Modell weniger Speicherplatz auf dem Mobilgerät eines Benutzers.
- Kleinere Downloadgröße: Kleinere Modelle benötigen weniger Zeit und Bandbreite, um auf die Geräte der Benutzer herunterzuladen.
- Geringere Speichernutzung: Kleinere Modelle verbrauchen beim Ausführen weniger RAM, wodurch Speicher für andere Teile Ihrer Anwendung frei wird und zu einer besseren Leistung und Stabilität führen kann.
Durch die Quantisierung kann in all diesen Fällen die Größe eines Modells verringert werden, möglicherweise auf Kosten einer gewissen Genauigkeit. Durch Beschneiden und Clustering kann die Größe eines Modells zum Herunterladen verringert werden, indem es leichter komprimierbar wird.
Latenzreduzierung
Die Latenz ist die Zeit, die benötigt wird, um eine einzelne Inferenz mit einem bestimmten Modell auszuführen. Einige Formen der Optimierung können den Rechenaufwand reduzieren, der erforderlich ist, um die Inferenz mithilfe eines Modells auszuführen, was zu einer geringeren Latenz führt. Die Latenz kann sich auch auf den Stromverbrauch auswirken.
Gegenwärtig kann die Quantisierung verwendet werden, um die Latenz zu verringern, indem die Berechnungen, die während der Inferenz auftreten, vereinfacht werden, möglicherweise auf Kosten einer gewissen Genauigkeit.
Beschleunigerkompatibilität
Einige Hardwarebeschleuniger, wie z. B. das Edge-TPU , können mit Modellen, die korrekt optimiert wurden, extrem schnell Inferenzen ausführen.
Im Allgemeinen erfordern diese Gerätetypen, dass Modelle auf bestimmte Weise quantisiert werden. Weitere Informationen zu den Anforderungen finden Sie in der Dokumentation der einzelnen Hardwarebeschleuniger.
Kompromisse
Optimierungen können möglicherweise zu Änderungen der Modellgenauigkeit führen, die während des Anwendungsentwicklungsprozesses berücksichtigt werden müssen.
Die Genauigkeitsänderungen hängen vom einzelnen zu optimierenden Modell ab und sind im Voraus schwer vorherzusagen. Im Allgemeinen verlieren Modelle, die auf Größe oder Latenz optimiert sind, ein wenig an Genauigkeit. Abhängig von Ihrer Anwendung kann dies die Benutzererfahrung beeinträchtigen oder nicht. In seltenen Fällen können bestimmte Modelle durch den Optimierungsprozess an Genauigkeit gewinnen.
Arten der Optimierung
TensorFlow Lite unterstützt derzeit die Optimierung durch Quantisierung, Bereinigung und Clustering.
Diese sind Teil des TensorFlow Model Optimization Toolkit , das Ressourcen für Modelloptimierungstechniken bereitstellt, die mit TensorFlow Lite kompatibel sind.
Quantisierung
Bei der Quantisierung wird die Genauigkeit der Zahlen verringert, die zur Darstellung der Parameter eines Modells verwendet werden. Dies sind standardmäßig 32-Bit-Gleitkommazahlen. Dies führt zu einer kleineren Modellgröße und einer schnelleren Berechnung.
Die folgenden Quantisierungstypen sind in TensorFlow Lite verfügbar:
Technik | Datenanforderungen | Größenreduzierung | Richtigkeit | Unterstützte Hardware |
---|---|---|---|---|
Float16-Quantisierung nach dem Training | Keine Daten | Bis zu 50% | Unbedeutender Genauigkeitsverlust | CPU, GPU |
Quantisierung des Dynamikbereichs nach dem Training | Keine Daten | Bis zu 75% | Genauigkeitsverlust | CPU, GPU (Android) |
Ganzzahlquantisierung nach dem Training | Unbeschriftete repräsentative Probe | Bis zu 75% | Kleinerer Genauigkeitsverlust | CPU, GPU (Android), EdgeTPU, Hexagon DSP |
Quantisierungsbewusstes Training | Beschriftete Trainingsdaten | Bis zu 75% | Kleinster Genauigkeitsverlust | CPU, GPU (Android), EdgeTPU, Hexagon DSP |
Der folgende Entscheidungsbaum hilft Ihnen bei der Auswahl der Quantisierungsschemata, die Sie möglicherweise für Ihr Modell verwenden möchten, einfach basierend auf der erwarteten Modellgröße und -genauigkeit.
Nachfolgend sind die Latenz- und Genauigkeitsergebnisse für die Quantisierung nach dem Training und das quantisierungsbewusste Training für einige Modelle aufgeführt. Alle Latenzzahlen werden auf Pixel 2-Geräten mit einer einzelnen Big-Core-CPU gemessen. Wenn sich das Toolkit verbessert, verbessern sich auch die Zahlen hier:
Modell | Top-1-Genauigkeit (Original) | Top-1-Genauigkeit (nach dem Training quantisiert) | Top-1-Genauigkeit (Quantization Aware Training) | Latenz (Original) (ms) | Latenz (nach dem Training quantisiert) (ms) | Latenz (Quantization Aware 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 | N / A | 3973 | 2868 | N / A | 178,3 | 44.9 |
Vollständige ganzzahlige Quantisierung mit int16-Aktivierungen und int8-Gewichten
Die Quantisierung mit int16-Aktivierungen ist ein vollständiges ganzzahliges Quantisierungsschema mit Aktivierungen in int16 und Gewichten in int8. Dieser Modus kann die Genauigkeit des quantisierten Modells im Vergleich zum vollständigen ganzzahligen Quantisierungsschema verbessern, wobei sowohl Aktivierungen als auch Gewichte in int8 eine ähnliche Modellgröße beibehalten. Es wird empfohlen, wenn Aktivierungen empfindlich auf die Quantisierung reagieren.
ANMERKUNG: Derzeit sind in TFLite nur nicht optimierte Referenzkernimplementierungen für dieses Quantisierungsschema verfügbar. Daher ist die Leistung im Vergleich zu int8-Kerneln standardmäßig langsam. Auf die vollen Vorteile dieses Modus kann derzeit über spezielle Hardware oder benutzerdefinierte Software zugegriffen werden.
Nachfolgend finden Sie die Genauigkeitsergebnisse für einige Modelle, die von diesem Modus profitieren. Modell Genauigkeitsmetriktyp Genauigkeit (float32-Aktivierungen) Genauigkeit (int8-Aktivierungen) Genauigkeit (int16-Aktivierungen) Wav2letter WIR SIND 6,7% 7,7% 7,2% DeepSpeech 0.5.1 (abgerollt) 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)
Beschneidung
Beim Bereinigen werden Parameter innerhalb eines Modells entfernt, die nur einen geringen Einfluss auf die Vorhersagen haben. Beschnittene Modelle haben auf der Festplatte dieselbe Größe und dieselbe Laufzeitlatenz, können jedoch effektiver komprimiert werden. Dies macht das Beschneiden zu einer nützlichen Technik zum Reduzieren der Modell-Download-Größe.
In Zukunft wird TensorFlow Lite die Latenz für beschnittene Modelle reduzieren.
Clustering
Beim Clustering werden die Gewichte jeder Ebene in einem Modell in einer vordefinierten Anzahl von Clustern gruppiert und anschließend die Schwerpunktwerte für die Gewichte der einzelnen Cluster geteilt. Dies reduziert die Anzahl der eindeutigen Gewichtswerte in einem Modell und damit dessen Komplexität.
Infolgedessen können Cluster-Modelle effektiver komprimiert werden und bieten ähnliche Bereitstellungsvorteile wie das Bereinigen.
Entwicklungsworkflow
Überprüfen Sie zunächst, ob die Modelle in gehosteten Modellen für Ihre Anwendung geeignet sind. Wenn nicht, empfehlen wir Benutzern, mit dem Quantisierungstool nach dem Training zu beginnen, da dies allgemein anwendbar ist und keine Trainingsdaten erfordert.
In Fällen, in denen die Genauigkeits- und Latenzziele nicht erreicht werden oder die Unterstützung von Hardwarebeschleunigern wichtig ist, ist quantisierungsbewusstes Training die bessere Option. Weitere Optimierungstechniken finden Sie im TensorFlow Model Optimization Toolkit .
Wenn Sie Ihre Modellgröße weiter reduzieren möchten, können Sie vor dem Quantisieren Ihrer Modelle versuchen, sie zu beschneiden und / oder zu gruppieren .