Kompatibilität mit LiteRT- und TensorFlow-Operatoren

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.

TensorFlow-Operatoren

Aus dieser Reihe von ML-Modelloperatoren gibt es drei Arten von Modelle, die vom Conversion-Prozess unterstützt werden:

  1. Modelle mit nur integriertem LiteRT-Operator. (empfohlen)
  2. Modelle mit den integrierten Operatoren und Auswahl von TensorFlow Kernoperatoren.
  3. 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