Modelloptimierung

Edge-Geräte haben oft einen begrenzten Arbeitsspeicher oder eine begrenzte Rechenleistung. Es können verschiedene Optimierungen auf Modelle angewendet werden, damit sie innerhalb dieser Einschränkungen ausgeführt werden können. Darüber hinaus ermöglichen einige Optimierungen die Verwendung von spezialisierter Hardware für eine beschleunigte Inferenz.

TensorFlow Lite und das TensorFlow Model Optimization Toolkit bieten Tools, mit denen sich die Komplexität der Inferenzoptimierung minimieren lässt.

Sie sollten die Modelloptimierung während der Anwendungsentwicklung in Betracht ziehen. In diesem Dokument werden einige Best Practices für die Optimierung von TensorFlow-Modellen für die Bereitstellung auf Edge-Hardware beschrieben.

Warum Modelle optimiert werden sollten

Es gibt mehrere 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 haben folgende Vorteile:

  • Kleinere Speichergröße: Kleinere Modelle belegen weniger Speicherplatz auf den Geräten Ihrer Nutzer. Eine Android-App mit einem kleineren Modell benötigt beispielsweise weniger Speicherplatz auf dem Mobilgerät eines Nutzers.
  • Kleinere Downloadgröße: Kleinere Modelle erfordern weniger Zeit und Bandbreite für den Download auf die Geräte der Nutzer.
  • Weniger Arbeitsspeichernutzung:Kleinere Modelle benötigen bei der Ausführung weniger RAM. Dadurch wird Arbeitsspeicher für andere Teile der Anwendung freigegeben und die Leistung und Stabilität können verbessert werden.

In all diesen Fällen kann die Größe eines Modells durch Quantisierung reduziert werden, möglicherweise auf Kosten einer gewissen Genauigkeit. Durch Pruning und Clustering kann die Größe eines Modells für den Download verringert werden, da es leichter komprimierbar wird.

Reduzierung der Latenz

Die Latenz ist die Zeit, die zum Ausführen einer einzelnen Inferenz mit einem bestimmten Modell benötigt wird. Einige Formen der Optimierung können den Rechenaufwand zum Ausführen der Inferenz mit einem Modell reduzieren, was zu einer geringeren Latenz führt. Die Latenz kann sich auch auf den Stromverbrauch auswirken.

Derzeit kann Quantisierung verwendet werden, um die Latenz zu reduzieren, indem die Berechnungen während der Inferenz vereinfacht werden, was möglicherweise auf Kosten einer gewissen Genauigkeit geht.

Beschleunigerkompatibilität

Einige Hardwarebeschleuniger wie die Edge TPU können Inferenzen mit korrekt optimierten Modellen extrem schnell ausführen.

Im Allgemeinen erfordern diese Gerätetypen, dass Modelle auf eine bestimmte Weise quantisiert werden. Weitere Informationen zu den Anforderungen finden Sie in der Dokumentation der einzelnen Hardwarebeschleuniger.

Vor- und Nachteile

Optimierungen können möglicherweise zu Änderungen bei der Modellgenauigkeit führen, die bei der Anwendungsentwicklung berücksichtigt werden müssen.

Die Änderungen an der Genauigkeit hängen vom jeweiligen Modell ab, das optimiert wird, und lassen sich nur schwer im Voraus vorhersagen. Im Allgemeinen verlieren Modelle, die für Größe oder Latenz optimiert sind, etwas an Genauigkeit. Je nach Anwendung kann sich dies auf die Nutzererfahrung auswirken. In seltenen Fällen können bestimmte Modelle durch den Optimierungsprozess eine gewisse Genauigkeit erhalten.

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 Techniken zur Modelloptimierung bietet, die mit TensorFlow Lite kompatibel sind.

Quantisierung

Bei der Quantisierung wird die Genauigkeit der Zahlen reduziert, die zur Darstellung der Parameter eines Modells verwendet werden. Standardmäßig sind diese 32-Bit-Gleitkommazahlen. Dies führt zu einer kleineren Modellgröße und einer schnelleren Berechnung.

Die folgenden Arten der Quantisierung sind in TensorFlow Lite verfügbar:

Verfahren Anforderungen an Daten Größenreduzierung Genauigkeit Unterstützte Hardware
Float16-Quantisierung nach dem Training Keine Daten Bis zu 50% Unerheblicher Genauigkeitsverlust CPU, GPU
Quantisierung des dynamischen Bereichs nach dem Training Keine Daten Bis zu 75% Geringster Genauigkeitsverlust CPU, GPU (Android)
Ganzzahlige Quantisierung nach dem Training Nicht gekennzeichnete repräsentative Stichprobe Bis zu 75% Geringer Genauigkeitsverlust CPU, GPU (Android), EdgeTPU
Quantisierungsbewusstes Training Trainingsdaten mit Labels Bis zu 75% Geringster Genauigkeitsverlust CPU, GPU (Android), EdgeTPU

Der folgende Entscheidungsbaum hilft Ihnen bei der Auswahl der Quantisierungsschemata, die Sie für Ihr Modell verwenden möchten, und zwar einfach anhand der erwarteten Modellgröße und -genauigkeit.

Entscheidungsbaum der Quantisierung

Im Folgenden finden Sie die Latenz- und Genauigkeitsergebnisse für die Quantisierung nach dem Training und das quantisierungssensitive Training für einige Modelle. Alle Latenzzahlen werden auf Pixel 2-Geräten gemessen, die eine einzelne große CPU verwenden. Mit der Verbesserung des Toolkits werden auch die Zahlen hier:

Modell Top-1-Genauigkeit (Original) Top-1-Genauigkeit (quantisiert nach dem Training) Top-1-Genauigkeit (quantisierungsorientiertes Training) Latenz (Original) (ms) Latenz (nach dem Training quantisiert) (ms) Latenz (quantisierungsorientiertes Training) (ms) Größe (Original) (MB) Größe (optimiert) (MB)
Mobilenet-v1-1-2240,7090,6570,70 1241126416,94,3
Mobilenet-v2-1-2240,7190,6370,709 899854143,6
Inception_v30.780.7720,775 113084554395,723,9
Resnet_v2_1010,7700,768 39732868178,344,9
Tabelle 1: Vorteile der Modellquantisierung für ausgewählte CNN-Modelle

Vollständige Ganzzahlquantisierung mit int16-Aktivierungen und int8-Gewichtungen

Quantisierung mit int16-Aktivierungen ist ein vollständiges Ganzzahl-Quantisierungsschema mit Aktivierungen in int16 und Gewichtungen in int8. Dieser Modus kann die Genauigkeit des quantisierten Modells im Vergleich zum vollständig ganzzahligen Quantisierungsschema verbessern, bei dem sowohl Aktivierungen als auch Gewichtungen in int8 eine ähnliche Modellgröße aufrechterhalten. Sie wird empfohlen, wenn Aktivierungen von der Quantisierung abhängig sind.

HINWEIS: Derzeit stehen in TFLite nur nicht optimierte Referenz-Kernelimplementierungen für dieses Quantisierungsschema zur Verfügung, sodass die Leistung im Vergleich zu int8-Kerneln standardmäßig langsam ist. Die Vorteile dieses Modus können derzeit über spezielle Hardware oder benutzerdefinierte Software vollumfänglich genutzt werden.

Unten finden Sie die Genauigkeitsergebnisse für einige Modelle, die von diesem Modus profitieren.

Modell Messwerttyp für die Genauigkeit Genauigkeit (FLOAT32-Aktivierungen) Genauigkeit (int8-Aktivierungen) Genauigkeit (int16-Aktivierungen)
Wav2letterWER6,7%7,7% 7,2%
DeepSpeech 0.5.1 (ohne Rolling)CER6,13%43,67% 6,52%
YoloV3mAP(IOU=0,5)0,5770,563 0,574
MobileNetV1Top-1-Genauigkeit0,70620,694 0,6936
MobileNetV2Top-1-Genauigkeit0,7180,7126 0,7137
MobileBertF1(Genau passend)88,81(81,23)2,08(0) 88,73(81,15)
Tabelle 2: Vorteile der Modellquantisierung mit int16-Aktivierungen

Beschneiden

Beim Beschneiden werden Parameter in einem Modell entfernt, die sich nur geringfügig auf die Vorhersagen auswirken. Sie haben die gleiche Größe auf dem Laufwerk und haben die gleiche Laufzeitlatenz, können aber effektiver komprimiert werden. Dies macht das Bereinigen zu einer nützlichen Methode, um die Downloadgröße von Modellen zu reduzieren.

In Zukunft wird TensorFlow Lite eine Latenzreduzierung für bereinigte Modelle ermöglichen.

Clustering

Beim Clustering werden die Gewichtungen jeder Ebene in einem Modell in eine vordefinierte Anzahl von Clustern gruppiert und dann die Schwerpunkte für die Gewichtungen der einzelnen Cluster geteilt. Dadurch wird die Anzahl der eindeutigen Gewichtungswerte in einem Modell und somit auch die Komplexität reduziert.

Dadurch können geclusterte Modelle effektiver komprimiert werden und bieten ähnliche Vorteile wie bei der Bereinigung.

Entwicklungsworkflow

Prüfen Sie zuerst, ob die Modelle in gehosteten Modellen für Ihre Anwendung geeignet sind. Falls nicht, empfehlen wir Nutzern, mit dem Quantisierungstool nach dem Training zu beginnen, da dieses allgemein anwendbar ist und keine Trainingsdaten erfordert.

Wenn die Ziele für Genauigkeit und Latenz nicht erreicht werden oder die Unterstützung der Hardwarebeschleunigung wichtig ist, ist quantisierungsorientiertes Training die bessere Option. Weitere Optimierungstechniken finden Sie im Toolkit zur Modelloptimierung von TensorFlow.

Wenn Sie die Modellgröße weiter reduzieren möchten, können Sie versuchen, das Modell zu bereinigen und/oder zu gruppieren, bevor Sie Ihre Modelle quantisieren.