Die Operatoren für maschinelles Lernen (ML), die Sie in Ihrem Modell verwenden, können sich auf die Umwandlung eines TensorFlow-Modells ins LiteRT-Format. Der LiteRT-Converter unterstützt eine begrenzte Anzahl von TensorFlow-Operationen, Inferenzmodelle, was bedeutet, dass nicht jedes Modell direkt konvertierbar ist. Mit dem Konverter-Tool können Sie zusätzliche Operatoren hinzufügen, Bei einem Modell muss auf diese Weise auch die LiteRT-Laufzeit geändert werden. Umgebung, in der Sie Ihr Modell ausführen, was Ihre Fähigkeit einschränken kann, Standard-Laufzeitbereitstellungsoptionen verwenden, z. B. Google Play-Dienste:
Der LiteRT Converter analysiert Modelle Strukturieren und optimieren Sie sie so, dass sie mit den direkt unterstützten Operatoren. Abhängig von den ML-Operatoren in kann der Konverter entscheiden oder zusammenführen, um sie ihren LiteRT-Entsprechungen zuzuordnen.
Auch bei unterstützten Vorgängen sind bestimmte Nutzungsmuster zu erwarten. aus Leistungsgründen. Die beste Methode, um zu verstehen, wie man einen TensorFlow-Code erstellt Modell, das mit allen LiteRT ist es, sorgfältig zu überlegen, wie Operationen konvertiert und unter Berücksichtigung der Einschränkungen dieses Prozesses optimiert.
Unterstützte Operatoren
Integrierte LiteRT-Operatoren sind eine Teilmenge der Operatoren die Teil der TensorFlow Core-Bibliothek sind. Ihr TensorFlow-Modell kann können auch benutzerdefinierte Operatoren in Form von zusammengesetzten Operatoren enthalten. oder neuen von Ihnen definierten Operatoren. Das folgende Diagramm zeigt die Beziehungen zwischen diesen Operatoren.
Aus dieser Reihe von ML-Modelloperatoren gibt es drei Arten von Modelle, die vom Conversion-Prozess unterstützt werden:
- Modelle mit nur integriertem LiteRT-Operator. (empfohlen)
- Modelle mit den integrierten Operatoren und Auswahl von TensorFlow Kernoperatoren.
- Modelle mit den integrierten Operatoren, TensorFlow-Kernoperatoren und/oder benutzerdefinierten Operatoren.
Wenn Ihr Modell nur Vorgänge enthält, die nativ von LiteRT geschrieben werden, sind für die Konvertierung keine zusätzlichen Flags erforderlich. Dieses ist der empfohlene Pfad, da diese Art von Modell reibungslos zu Conversions führt. und ist einfacher zu optimieren und mit der LiteRT-Standardlaufzeit auszuführen. Außerdem stehen Ihnen weitere Bereitstellungsoptionen zur Verfügung, Google Play-Dienste: Sie können mit der LiteRT-Konvertierungshandbuch (in englischer Sprache) Weitere Informationen finden Sie unter LiteRT Ops-Seite für ein Liste der integrierten Operatoren.
Wenn Sie ausgewählte TensorFlow-Vorgänge aus der Kernbibliothek müssen Sie dies bei der Konvertierung angeben und sicherstellen, dass Ihre Laufzeit diese enthält. Geschäftsabläufe. Weitere Informationen finden Sie im Thema TensorFlow-Operatoren auswählen für detaillierte Anleitung.
Vermeiden Sie nach Möglichkeit die letzte Option zur Aufnahme benutzerdefinierter Operatoren in Ihr konvertierten Modell. Benutzerdefinierte Operatoren werden entweder Operatoren erstellt, primitiven TensorFlow-Kernoperatoren zu verwenden oder einen ganz neuen zu definieren. Wenn benutzerdefinierte Operatoren konvertiert werden, können sie die Größe des gesamten durch Abhängigkeiten außerhalb der integrierten LiteRT-Bibliothek. Benutzerdefinierte Vorgänge, sofern diese nicht speziell für die Bereitstellung auf Mobilgeräten oder Geräten erstellt wurden zu einer schlechteren Leistung führen kann, ressourcenbeschränkte Geräte im Vergleich zu einer Serverumgebung an. Genau wie die Auswahl von TensorFlow-Kernoperatoren, erfordert, dass Sie Modelllaufzeitumgebung ändern was Sie daran hindert, die Vorteile von Standard-Laufzeitdiensten wie die Google Play-Dienste.
Unterstützte Typen
Die meisten LiteRT-Vorgänge zielen sowohl auf Gleitkommazahlen (float32
) als auch auf
quantisierte Inferenz (uint8
, int8
), aber viele Operationen für andere Typen noch nicht
wie tf.float16
und Strings.
Neben der Verwendung verschiedener Versionen der Vorgänge besteht der andere Unterschied zwischen Gleitkomma- und quantisierten Modellen ist die Art und Weise, wie sie konvertiert werden. Die quantisierte Konvertierung erfordert Informationen zum dynamischen Bereich für Tensoren. Dieses erfordert „falsche Quantisierung“ während des Modelltrainings Bereichsinformationen abrufen, über ein Kalibrierungs-Dataset oder „on-the-fly“ der Bereichsschätzung. Weitere Informationen finden Sie unter quantisierung.
Direkte Conversions, konstante Faltung und Fusion
Eine Reihe von TensorFlow-Vorgängen kann von LiteRT
obwohl es kein direktes Äquivalent gibt. Dies gilt für Vorgänge, bei denen
einfach aus dem Graphen (tf.identity
) entfernt und durch Tensoren ersetzt
(tf.placeholder
) oder in komplexere Operationen (tf.nn.bias_add
) zusammengeführt werden.
Sogar einige unterstützte Vorgänge können manchmal durch eine dieser Methoden entfernt werden.
Prozesse.
Hier ist eine nicht vollständige Liste der TensorFlow-Vorgänge, die normalerweise entfernt werden aus der Grafik:
tf.add
tf.debugging.check_numerics
tf.constant
tf.div
tf.divide
tf.fake_quant_with_min_max_args
tf.fake_quant_with_min_max_vars
tf.identity
tf.maximum
tf.minimum
tf.multiply
tf.no_op
tf.placeholder
tf.placeholder_with_default
tf.realdiv
tf.reduce_max
tf.reduce_min
tf.reduce_sum
tf.rsqrt
tf.shape
tf.sqrt
tf.square
tf.subtract
tf.tile
tf.nn.batch_norm_with_global_normalization
tf.nn.bias_add
tf.nn.fused_batch_norm
tf.nn.relu
tf.nn.relu6
Experimentelle Operationen
Die folgenden LiteRT-Vorgänge sind vorhanden, aber noch nicht für benutzerdefinierte Vorgänge bereit Modelle:
CALL
CONCAT_EMBEDDINGS
CUSTOM
EMBEDDING_LOOKUP_SPARSE
HASHTABLE_LOOKUP
LSH_PROJECTION
SKIP_GRAM
SVDF