SavedModel für Vorhersagen exportieren

Sie können Ihre trainierten Modelle in AI Platform Prediction bereitstellen und dort für Vorhersagen verwenden. Dazu müssen Sie sie zuerst in das TensorFlow SavedModel-Format exportieren.

Auf dieser Seite werden einige wichtige Punkte behandelt, die Sie beim Erstellen Ihres SavedModel berücksichtigen müssen. Ausführlichere Informationen zum Exportieren in ein SavedModel finden Sie in der TensorFlow-Anleitung zu SavedModels und in der TensorFlow-Anleitung zum Speichern von Keras-Modellen. Ausführliche Informationen zum Bereitstellen eines SavedModel in AI Platform Prediction für das Abrufen von Vorhersagen erhalten Sie im Leitfaden zum Bereitstellen von Modellen. Allgemeine Hintergrundinformationen zu Vorhersagen finden Sie auf der Seite "Vorhersageübersicht".

Benutzerdefinierte Vorhersageroutinen

Alternativ zum Bereitstellen eines SavedModel können Sie auch eine benutzerdefinierte Vorhersageroutine erstellen und bereitstellen. Mit einer benutzerdefinierten Vorhersageroutine lässt sich ein SavedModel oder ein auf andere Weise gespeichertes trainiertes Modell mit anderen Trainingsartefakten und mit Ihrem Python-Code kombinieren, um die Verarbeitung von Vorhersageanfragen durch AI Platform Prediction individuell anzupassen. Diese Flexibilität ermöglicht beispielsweise die Vorverarbeitung der Vorhersageeingabe, bevor Ihr Modell eine Vorhersage erstellt.

Weitere Informationen finden Sie im Handbuch zu benutzerdefinierten Vorhersageroutinen.

Trainings- und Bereitstellungsgrafiken – Grundlagen

Wenn Sie Ihr Modell trainiert und als SavedModel exportiert haben, müssen Sie einige wichtige Schritte ausführen, bevor Sie damit Vorhersagen bereitstellen können.

Trainingsgrafiken und Bereitstellungsgrafiken unterscheiden sich in einigen wesentlichen Punkten. Trainingsgrafiken umfassen Funktionen, die für die Bereitstellung irrelevant sind. Dazu gehören:

  • Dateileser
  • Eingabewarteschlangen
  • Dropout-Ebenen
  • Verlustfunktionen
  • Optimierungstools

Da die Bereitstellung von Vorhersagen andere Anforderungen hat als der Trainingsprozess, empfiehlt es sich, eine eigene Grafik nur für die Bereitstellung von Vorhersagen zu exportieren.

SavedModel – Grundlagen

Ein SavedModel ist das von TensorFlow empfohlene Format zum Speichern von Modellen und das erforderliche Format zum Bereitstellen trainierter TensorFlow-Modelle in AI Platform Prediction. Wenn Sie das trainierte Modell als SavedModel exportieren, wird die Trainingsgrafik mit ihren Assets, Variablen und Metadaten in einem mit AI Platform Prediction kompatiblen Format gespeichert. Dort kann sie dann für Vorhersagen verwendet und wiederhergestellt werden.

Nach dem Export eines SavedModel haben Sie ein SavedModel-Verzeichnis, das Folgendes enthält:

  • In SavedModel-Protokollpuffern gespeicherte Trainingsgrafik(en)
  • Externe Dateien, die Assets genannt werden
  • Variablen, die als Prüfpunktdateien gespeichert werden

Wenn Sie das SavedModel in AI Platform Prediction bereitstellen, müssen Sie dazu das gesamte SavedModel-Verzeichnis angeben und nicht nur die SavedModel-Protokollpufferdatei mit der Grafik und deren Metadaten. Diese Datei hat in der Regel die Erweiterung .pb oder .pbtxt.

Mit dem SavedModel können Sie mehrere Versionen einer Grafik speichern, die dieselben Assets und Variablen (oder Checkpoints) aufweisen. So ließen sich beispielsweise zwei Versionen derselben Grafik entwickeln, um eine davon auf CPUs und die andere auf GPUs auszuführen.

Weitere Informationen zur Struktur eines SavedModel-Verzeichnisses finden Sie hier.

Aus verschiedenen TensorFlow APIs exportieren

Es gibt mehrere Möglichkeiten, SavedModels aus Ihrem TensorFlow-Trainingscode zu exportieren. In der folgenden Liste werden verschiedene Möglichkeiten für verschiedene TensorFlow APIs beschrieben:

Kompatibilität mit AI Explanations

Wenn Sie AI Explanations mit Ihrem Modell verwenden möchten, lesen Sie sich die Informationen zu zusätzlichen Anforderungen für Ihr SavedModel durch.

Modellgröße prüfen und anpassen

Ihr SavedModel muss 500 MB oder kleiner sein, wenn es in einer Modellversion mit einem Legacy-Maschinentyp (MLS1) bereitgestellt werden soll. Es kann eine Größe von bis zu 10 GB haben, wenn Sie einen Compute Engine-Maschinentyp (N1) verwenden. Weitere Informationen zu Maschinentypen für die Onlinevorhersage

Diese Größenbeschränkung beinhaltet alle Assets und Variablen im SavedModel-Verzeichnis und nicht nur die SavedModel-Protokollpufferdatei selbst, also saved_model.pb oder saved_model.pbtxt.

Zur Bestimmung der Modellgröße während der Entwicklung exportieren Sie ein SavedModel und prüfen die Dateigröße des Verzeichnisses.

Wenn das SavedModel das Limit von 500 MB überschreitet, gehen Sie so vor:

Wenn Sie diese Schritte ausführen, können Sie das SavedModel unter das Limit von 500 MB bringen und die Latenz von Vorhersagen verringern. Sie profitieren dann nicht nur von einer Leistungssteigerung, sondern sparen sich auch das Anfordern einer Kontingenterhöhung und die damit verbundene Wartezeit.

Wenn Sie dennoch ein größeres Kontingent benötigen, lesen Sie die Informationen zum Anfordern einer Kontingenterhöhung.

Optimale Vorhersagegrafik erstellen

Beim Training werden mehrere Checkpoints generiert, die zur Bereitstellung von Vorhersagen nicht verwendet werden. Achten Sie darauf, dass das hochgeladene Verzeichnis solche Artefakte nicht enthält, sondern nur das bereitzustellende Modell.

Wenn Sie beispielsweise Zusammenfassungen während des Trainingsprozesses für die Visualisierung in TensorBoard exportieren, sollten Sie dafür sorgen, dass diese nicht in das SavedModel einbezogen werden. Diese TensorBoard-Zusammenfassungen sind für eine Vorhersagegrafik nicht erforderlich.

Genauigkeit zur Verringerung der Dateigröße reduzieren

Die Reduzierung der Genauigkeit von Variablen und Eingabedaten verringert zwar die Modellgröße erheblich, allerdings zulasten der Vorhersagegenauigkeit. Daten mit hoher Genauigkeit werden weniger effizient gespeichert als Daten mit niedriger Genauigkeit. Obwohl Daten mit niedriger Genauigkeit eine Rauschquelle darstellen, kann ein neuronales Netzwerk dieses Rauschen "ignorieren" und dennoch ziemlich genaue Vorhersagen treffen.

Wenn die Verwendung dieser Methoden in Ihrem Anwendungsfall zu einem zu großen Verlust an Vorhersagegenauigkeit führt, sollten Sie eine Kontingenterhöhung anfordern.

  • Verringern Sie die Dateigröße, indem Sie Gewichtungen verkleinern, die standardmäßig Gleitkommazahlen sind, deren effiziente Speicherung schwierig ist. Diese ineffizient gespeicherten Gewichtungen tragen am meisten zur Gesamtdateigröße des Modells bei.

  • Quantisieren Sie die kontinuierlichen Daten. Damit lässt sich das Modell ohne signifikante Genauigkeitseinbußen um bis zu 75 % verkleinern.

  • Verwenden Sie Variablen mit niedrigerer Genauigkeit. Ändern Sie beispielsweise den Datentyp (dtype) von int64 in int32.

  • Verkleinern Sie andere Eingabefeatures im Ordner assets Ihres SavedModel-Verzeichnisses. Verwenden Sie beispielsweise kleinere Vokabulargrößen für Textdaten.

  • Lesen Sie den ausführlichen Artikel über Techniken zum Optimieren von TensorFlow-Modellen für die Vorhersage und arbeiten Sie Beispiele zur Anwendung dieser Techniken durch. Die verlinkten Techniken gelten nur, wenn Sie TensorFlow 1 verwenden.

Tools zum Prüfen von SavedModels und Grafiken

TensorFlow bietet eine Befehlszeilenschnittstelle, mit der Sie eine Integritätsprüfung für Aspekte des SavedModels ausführen können, z. B. für die Eingabeformatierung und SignatureDefs. Weitere Informationen zur SavedModel-Befehlszeilenschnittstelle

Mit dem Graph Transform Tool in TensorFlow können Sie das Modell für die Bereitstellung optimieren. Obwohl die Verwendung dieses Tools im Kontext der mobilen Bereitstellung erläutert wird, kann es auch zur Optimierung von Modellen verwendet werden, die nicht mobil bereitgestellt werden.

Bereitstellungseingabefunktionen erstellen

Wenn Sie Ihr SavedModel mit tf.keras.Model.save exportieren, müssen Sie keine Bereitstellungseingabefunktion angeben.

Andernfalls bestimmen Sie beim Export des SavedModels eine Bereitstellungseingabefunktion. In Bezug auf den gesamten Trainingsprozess kann das zu folgenden Zeitpunkten geschehen:

  • In der Endphase des Trainingsprozesses
  • Nach Abschluss des Trainings als separater Prozess

Die folgenden Beispiele zeigen, wie das für einen trainierten Estimator möglich ist. Weitere Informationen zu Bereitstellungseingabefunktionen für Estimators

Bereitstellungsgrafik während des Trainings erstellen

Dies erfolgt normalerweise am Ende des Trainingsprozesses, ist jedoch noch Teil des Trainings.

  1. Sie definieren eine Bereitstellungseingabefunktion. Achten Sie darauf, dass die äußerste Dimension der Features in Ihrer Funktion None ist. Dies entspricht Ihrer Batchgröße und wird unten gezeigt, wenn Sie den Wert von Elementen in Ihrem Feature-Wörterbuch mithilfe von tf.placeholder definieren. Der folgende Beispielcode stammt aus unserem Datenerhebungsbeispiel:

    def json_serving_input_fn():
        """Build the serving inputs."""
        inputs = {}
        for feat in featurizer.INPUT_COLUMNS:
            inputs[feat.name] = tf.placeholder(shape=[None], dtype=feat.dtype)
    
        return tf.estimator.export.ServingInputReceiver(inputs, inputs)
    
    
  2. Exportieren Sie mithilfe von tf.estimator.Estimator.export_saved_model ein SavedModel aus dem Estimator. Übergeben Sie dabei den Pfad zum Modell im Parameter export_dir_base und den Namen der Bereitstellungseingabefunktion im Parameter serving_input_fn. Im Beispiel der Datenerhebung (Census) wird ein Estimator vom Typ tf.estimator.DNNLinearCombinedClassifier verwendet.

Bereitstellungsgrafik außerhalb des Trainings erstellen

Wenn Sie Ihr Modell bereits trainiert haben, können Sie Vorhersagen ohne ein erneutes Training abrufen. Dieser Prozess ähnelt stark dem Erstellen einer Bereitstellungsgrafik während des Trainings. Der Hauptunterschied besteht darin, dass Sie die Bereitstellungsgrafik in einem eigenen Python-Skript erstellen, das Sie nach Abschluss des Trainings ausführen müssen. Der Grundgedanke ist dabei, dass der Estimator mit demselben model_dir erstellt wird, das für das Training verwendet wurde, und dann tf.estimator.Estimator.export_saved_model wie oben beschrieben aufgerufen wird.

  1. Wie beim Training definieren Sie eine Bereitstellungseingabefunktion in Ihrem Python-Skript:

    def json_serving_input_fn():
        """Build the serving inputs."""
        inputs = {}
        for feat in featurizer.INPUT_COLUMNS:
            inputs[feat.name] = tf.placeholder(shape=[None], dtype=feat.dtype)
    
        return tf.estimator.export.ServingInputReceiver(inputs, inputs)
    
    
  2. Achten Sie beim Erstellen des Estimator darauf, dass Sie den Parameter model_dir auf denselben Wert wie für das Training einstellen. Damit stehen dem Estimator Prüfpunkte aus dem zuvor gespeicherten Modell zur Verfügung.

  3. Rufen Sie schließlich tf.estimator.Estimator.export_saved_model mit dem Estimator auf. Übergeben Sie dabei den Pfad zu Ihrem Modell im Parameter export_dir_base und den Namen der Bereitstellungseingabefunktion im Parameter serving_input_fn.

TensorFlow-Tags und -Signaturen

Wenn Sie ein SavedModel aus tf.keras oder aus einem TensorFlow-Estimator exportieren, kann die exportierte Grafik standardmäßig sofort Vorhersagen bereitstellen.

In anderen Fällen, zum Beispiel beim Erstellen einer TensorFlow-Vorhersagegrafik, müssen Sie dafür die korrekten Werte für die Tags und Signaturen der Grafik angeben. TensorFlow stellt Konstanten für diese Tag- und Signaturwerte bereit, die für folgende Zwecke verwendet werden:

  • Um eine Grafik im SavedModel zur Bereitstellung von Vorhersagen auszuwählen
  • Als Anzeige dafür, dass Sie eine Vorhersagesignatur für die Vorhersagegrafik erstellen

Signaturen definieren die Eingaben und Ausgaben für die Grafik. Wenn Sie eine Signatur für die Vorhersagegrafik erstellen, müssen Sie für den Parameter method_name in build_signature_def eine gültige Signaturkonstante angeben. Für Vorhersagen ist die beste Wahl normalerweise PREDICT_METHOD_NAME.

Mit einem Tag müssen Sie angeben, welche Grafik im SavedModel zur Bereitstellung von Vorhersagen verwendet wird. Dazu fügen Sie in add_meta_graph_and_variables das Tag tag_constants.SERVING Ihrer tags-Liste hinzu.

In diesem Beispiel sehen Sie, wie eine Vorhersagegrafik mit den richtigen Konstanten für Tags und Signaturen erstellt wird.

Nächste Schritte