SavedModel für Vorhersagen exportieren

Sie können Ihre trainierten Modelle in AI Platform 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ührliche Informationen zum Exportieren in ein SavedModel finden Sie in der TensorFlow-Anleitung zum Speichern und Wiederherstellen von Modellen. Ausführliche Informationen zum Bereitstellen eines SavedModel in AI Platform für das Abrufen von Vorhersagen erhalten Sie im Handbuch 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 zur Anpassung der Verarbeitung von AI Platform-Vorhersageanfragen kombinieren. 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 an die Bereitstellung von Vorhersagen andere Anforderungen gestellt werden als an den 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. Wenn Sie das trainierte Modell als SavedModel exportieren, wird die Trainingsgrafik mit ihren Assets, Variablen und Metadaten in einem mit AI Platform 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 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.

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 2 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.

Wenn Sie für das Training und die Vorhersage einen Estimator verwenden, können Sie ein SavedModel mit der Funktion export_savedmodel abrufen. Andernfalls steht der SavedModelBuilder zum Exportieren eines Modells zur Verfügung. Im Beispiel für MNIST erfahren Sie, wie Sie ein Modell über den SavedModelBuilder mit den richtigen Tags und Signaturen exportieren.

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 treffsichere Vorhersagen erstellen.

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

  • Sie können die Dateigröße verringern, wenn 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.

  • Sie können kontinuierliche Daten quantisieren. Damit lässt sich das Modell ohne signifikante Genauigkeitseinbußen um bis zu 75 % verkleinern.

  • Sie können Variablen mit niedrigerer Genauigkeit verwenden. Ändern Sie beispielsweise den Datentyp (dtype) von int64 in int32.

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

  • Sie können den ausführlichen Artikel über Techniken zum Optimieren von TensorFlow-Modellen für die Vorhersage lesen und Beispiele zur Anwendung dieser Techniken durcharbeiten.

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.

Weitere Informationen zur Verwendung des Graph Transform Tools

Bereitstellungseingabefunktionen erstellen

Wenn Sie eine Bereitstellungsgrafik exportieren, besteht ein wichtiger Schritt darin, eine Bereitstellungseingabefunktion zu definieren. In Bezug auf den gesamten Trainingsprozess kann dies zu folgenden Zeitpunkten geschehen:

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

Weitere Informationen zu Bereitstellungseingabefunktionen

Bereitstellungsgrafik während des Trainings erstellen

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

  1. Sie definieren eine Bereitstellungseingabefunktion. 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 export_savedmodel 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.contrib.learn.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 dem Modellverzeichnis (model_dir) erstellt wird, das für das Training verwendet wurde, und dann export_savedmodel 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 export_savedmodel 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:

  • Zur Auswahl einer Grafik im SavedModel zur Bereitstellung von Vorhersagen
  • 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.

Weitere Informationen