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

Mit dem Export eines SavedModel wird ein SavedModel-Verzeichnis erstellt, 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

Das SavedModel darf maximal 250 MB umfassen, um mit AI Platform bereitgestellt werden zu können. Dies beinhaltet alle Assets und Variablen im SavedModel-Verzeichnis und nicht nur die SavedModel-Protokollpufferdatei selbst, also saved_model.pb oder saved_model.pbtxt.

Um die Modellgröße während der Entwicklung zu bestimmen, exportieren Sie ein SavedModel und prüfen die Dateigröße des Verzeichnisses.

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

Wenn Sie diese Schritte ausführen, können Sie das SavedModel unter das Limit von 250 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 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 Eingabemerkmale 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.

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 finden Sie hier.

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 finden Sie hier.

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 finden Sie hier.

Bereitstellungsgrafik während des Trainings erstellen

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

  1. Definieren Sie 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. Definieren Sie eine Bereitstellungseingabefunktion in Ihrem Python-Skript wie beim Training:

    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:

  • 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. Fügen Sie dazu in add_meta_graph_and_variables das Tag tag_constants.SERVING Ihrer tags-Liste hinzu.

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

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

AI Platform für TensorFlow