Bereitstellung eines einfachen TensorFlow-Modells

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Dieses Projekt soll Sie durch den Prozess der Erstellung eines einfachen TensorFlow-Modells, des Exports dieses Modells und der Bereitstellung über Docker und TensorFlow Serving führen. TensorFlow ist ein quelloffenes maschinelles Lernframework, und TensorFlow Serving ist ein flexibles, leistungsstarkes System zur Bereitstellung von maschinellen Lernmodellen. Docker-Container ermöglichen es, diese Modelle einfach und konsistent zu verpacken und bereitzustellen. Am Ende dieses Projekts werden Sie verstehen, wie Sie ein einfaches maschinelles Lernmodell in TensorFlow einrichten, es für die Bereitstellung exportieren und es mithilfe von TensorFlow Serving in einem Docker-Container deployen können.

👀 Vorschau

## Senden Sie eine Vorhersageanfrage an den TensorFlow Serving-Container
curl -X POST \
  http://localhost:9501/v1/models/half_plus_two:predict \
  -d '{"signature_name":"serving_default","instances":[[1.0], [2.0], [5.0]]}'

Ausgabe:

{
  "predictions": [[2.5], [3.0], [4.5]
  ]
}

🎯 Aufgaben

In diesem Projekt werden Sie lernen:

  • Wie Sie TensorFlow und die Abhängigkeiten von TensorFlow Serving installieren
  • Wie Sie ein einfaches TensorFlow-Modell für grundlegende arithmetische Operationen erstellen
  • Wie Sie das Modell in einem für die Bereitstellung mit TensorFlow Serving geeigneten Format exportieren
  • Wie Sie das Modell mithilfe von Docker und TensorFlow Serving bereitstellen
  • Wie Sie Vorhersageanfragen an das bereitgestellte Modell senden und Vorhersagen erhalten

🏆 Errungenschaften

Nach Abschluss dieses Projekts werden Sie in der Lage sein:

  • Ein einfaches maschinelles Lernmodell in TensorFlow einzurichten
  • Ein TensorFlow-Modell für die Bereitstellung zu exportieren
  • Ein TensorFlow-Modell mithilfe von Docker und TensorFlow Serving zu deployen
  • Vorhersageanfragen an das bereitgestellte Modell zu senden und die Ergebnisse zu beobachten

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/save("Save Image") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/run -.-> lab-298840{{"Bereitstellung eines einfachen TensorFlow-Modells"}} docker/ps -.-> lab-298840{{"Bereitstellung eines einfachen TensorFlow-Modells"}} docker/exec -.-> lab-298840{{"Bereitstellung eines einfachen TensorFlow-Modells"}} docker/pull -.-> lab-298840{{"Bereitstellung eines einfachen TensorFlow-Modells"}} docker/save -.-> lab-298840{{"Bereitstellung eines einfachen TensorFlow-Modells"}} docker/volume -.-> lab-298840{{"Bereitstellung eines einfachen TensorFlow-Modells"}} docker/build -.-> lab-298840{{"Bereitstellung eines einfachen TensorFlow-Modells"}} end

Abhängigkeiten installieren

Bevor Sie beginnen, müssen Sie TensorFlow in Ihrer Umgebung installieren. Darüber hinaus laden Sie das TensorFlow Serving-Image von Docker Hub herunter, um Ihr Modell in einer containerisierten Umgebung bereitzustellen. Führen Sie die folgenden Befehle in Ihrem Terminal aus.

Installieren Sie TensorFlow:

## Install TensorFlow
pip install tensorflow==2.14.0
## Downgrade numpy to 1.26.4 to avoid compatibility issues with TensorFlow
pip install numpy==1.26.4

Laden Sie das TensorFlow Serving Docker-Image herunter:

## Pull TensorFlow Serving image from Docker Hub
docker pull tensorflow/serving

In diesem Schritt haben Sie TensorFlow, eine leistungsstarke Bibliothek für numerische Berechnungen und maschinelles Lernen, installiert und anschließend das TensorFlow Serving Docker-Image heruntergeladen.

TensorFlow Serving ist speziell für die Bereitstellung von maschinellen Lernmodellen in Produktionsumgebungen entwickelt. Die Verwendung von Docker stellt sicher, dass TensorFlow Serving in einer isolierten Umgebung mit allen erforderlichen Abhängigkeiten ausgeführt wird, wodurch Konflikte mit anderen Softwarekomponenten auf Ihrem Computer vermieden werden.

Erstellen und Exportieren Ihres Modells

In diesem Schritt definieren Sie ein einfaches TensorFlow-Modell, das eine grundlegende arithmetische Operation ausführt: Es multipliziert seine Eingabe mit 0,5 und addiert dann 2. Nachdem Sie das Modell definiert haben, exportieren Sie es in ein Format, das von TensorFlow Serving verwendet werden kann.

Erstellen und exportieren Sie das Modell in ~/project/half_plus_two.py:

## Import TensorFlow
import tensorflow as tf

## Define a simple Sequential model
model = tf.keras.Sequential([
    tf.keras.layers.Dense(units=1, input_shape=[1], use_bias=True)
])

## Set the weights to achieve the "multiply by 0.5 and add 2" functionality
weights = [tf.constant([[0.5]]), tf.constant([2.0])]
model.set_weights(weights)

## Compile the model (required even if not training)
model.compile(optimizer='sgd', loss='mean_squared_error')

## Export the model to a SavedModel
export_path = './saved_model_half_plus_two/1'
tf.saved_model.save(model, export_path)

In diesem Schritt wird ein TensorFlow-Modell definiert, das eine einfache Operation auf seine Eingabe ausführt: Multiplikation mit 0,5 und Addition von 2. Anschließend wird das Modell in ein für die Bereitstellung geeignetes Format exportiert.

  • Das Modell wird mit TensorFlow's Keras-API definiert, einer High-Level-API zum Bauen und Trainieren von Deep-Learning-Modellen. Das Modell besteht aus einer einzigen dichten Schicht (Dense Layer), einer vollständig verbundenen neuronalen Netzwerkschicht.
  • Die Gewichte des Modells werden manuell festgelegt, um die gewünschte Operation (Multiplikation mit 0,5 und Addition von 2) zu erreichen.
  • Auch wenn dieses Modell nicht weiter trainiert wird, wird es kompiliert, um seine Struktur zu finalisieren. Dies ist ein erforderlicher Schritt in TensorFlow.
  • Schließlich wird das Modell im TensorFlow SavedModel-Format gespeichert. Dies ist ein Verzeichnis, das eine Protobuf-Datei und einen TensorFlow-Checkpoint mit den Modellgewichten enthält. Dieses Format wird von TensorFlow Serving für die Modellbereitstellung benötigt.

Um das Modell zu exportieren, führen Sie das Skript im Terminal aus:

python half_plus_two.py

Das Modell wird in ~/project/saved_model_half_plus_two gespeichert. Die Verzeichnisstruktur sieht wie folgt aus:

.
└── saved_model_half_plus_two
└── 1
├── assets
├── fingerprint.pb
├── saved_model.pb
└── variables
├── variables.data-00000-of-00001
└── variables.index
✨ Lösung prüfen und üben

Bereitstellen des Modells mit Docker und TensorFlow Serving

Nachdem Sie das Modell exportiert haben, ist der nächste Schritt, es mithilfe von TensorFlow Serving in einem Docker-Container bereitzustellen. Dadurch kann Ihr Modell über ein Netzwerk erreicht werden und auf Vorhersageanfragen antworten.

Stellen Sie das Modell mit Docker im Terminal bereit:

## Serve the model using TensorFlow Serving in a Docker container
docker run -t --rm -p 9500:8500 -p 9501:8501 \
  -v "/home/labex/project/saved_model_half_plus_two:/models/half_plus_two" \
  -e MODEL_NAME=half_plus_two \
  tensorflow/serving

In diesem Schritt wird das exportierte Modell mithilfe von TensorFlow Serving in einem Docker-Container bereitgestellt. Der Docker-Befehl run startet eine TensorFlow Serving-Instanz und macht das Modell für Inferenzanfragen verfügbar.

  • Die -p-Flags leiten die Ports vom Docker-Container auf Ihre Hostmaschine weiter, sodass Sie Anfragen an den TensorFlow Serving-Modellserver von Ihrer lokalen Maschine senden können.
  • Die -v-Flag mountet ein Volume von Ihrer Hostmaschine in den Docker-Container, wodurch das exportierte Modell für TensorFlow Serving verfügbar wird.
  • Die Umgebungsvariable -e MODEL_NAME teilt TensorFlow Serving den Namen des bereitzustellenden Modells mit.

Diese Einrichtung kapselt die Modellbereitstellungsumgebung und stellt sicher, dass das Modell unabhängig von der Deploymentsituation konsistent läuft.

Senden einer Vorhersageanfrage an Ihr Modell

Schließlich testen Sie das bereitgestellte Modell, indem Sie eine Vorhersageanfrage senden. Diese Anfrage fordert das Modell auf, seine Logik (Multiplikation mit 0,5 und Addition von 2) auf eine Reihe von Eingabewerten anzuwenden.

Senden Sie eine Vorhersageanfrage in einem anderen neuen Terminal:

## Send a prediction request to the TensorFlow Serving container
curl -X POST \
  http://localhost:9501/v1/models/half_plus_two:predict \
  -d '{"signature_name":"serving_default","instances":[[1.0], [2.0], [5.0]]}'

Ausgabe:

{
  "predictions": [[2.5], [3.0], [4.5]
  ]
}

In diesem letzten Schritt wird das bereitgestellte Modell getestet, indem eine HTTP POST-Anfrage gesendet wird. Diese Anfrage enthält eine JSON-Nutzlast mit Instanzen, für die Vorhersagen benötigt werden.

  • Der curl-Befehl wird verwendet, um eine POST-Anfrage an den TensorFlow Serving-Server zu senden. Die URL gibt das Modell und den Predict-API-Endpunkt an.
  • Die -d-Flag liefert die Daten für die Vorhersageanfrage im JSON-Format. Der Schlüssel signature_name gibt die Serving-Signatur an, die verwendet werden soll. Dies ist eine Möglichkeit, TensorFlow Serving mitzuteilen, welchen Rechengraph auszuführen ist. Der Schlüssel instances enthält die Eingabedaten für die Vorhersage.

Die Antwort des Servers enthält die Vorhersagen, die das Modell für die bereitgestellten Eingabeinstanzen gemacht hat. Dies zeigt, dass das Modell erfolgreich bereitgestellt wurde und Vorhersagen liefert.

Zusammenfassung

In diesem Projekt haben Sie gelernt, wie Sie ein einfaches TensorFlow-Modell erstellen, es für die Bereitstellung exportieren und es mithilfe von TensorFlow Serving und Docker deployen. Sie haben zunächst die erforderlichen Abhängigkeiten installiert, dann ein einfaches Modell definiert und exportiert. Anschließend haben Sie das Modell mithilfe von TensorFlow Serving in einem Docker-Container bereitgestellt und es getestet, indem Sie eine Vorhersageanfrage gesendet haben. Dieser Workflow ist eine grundlegende Fähigkeit für die skalierbare und reproduzierbare Bereitstellung von maschinellen Lernmodellen.