Mithilfe benutzerdefinierter Vorhersageroutinen können Sie ermitteln, welcher Code ausgeführt wird, wenn Sie eine Anfrage für eine Onlinevorhersage an AI Platform Prediction senden.
Wenn Sie eine Versionsressource ohne benutzerdefinierte Vorhersageroutine in AI Platform Prediction bereitstellen, werden Vorhersageanfragen analog zu dem Vorhersagevorgang des Frameworks für maschinelles Lernen ausgeführt, den Sie für das Training verwendet haben.
Wenn Sie jedoch eine benutzerdefinierte Vorhersageroutine als Versionsressource bereitstellen, können Sie AI Platform Prediction anweisen, als Antwort auf erhaltene Vorhersageanfragen jeweils benutzerdefinierten Python-Code auszuführen. Sie können die Vorhersageeingabe vorverarbeiten, bevor Sie mit dem trainierten Modell eine Vorhersage ausführen, oder Sie können die Vorhersage des Modells vor dem Senden der Vorhersageergebnisse nachbearbeiten.
Beim Erstellen Ihrer Modellversion müssen Sie AI Platform Prediction zwei Komponenten bereitstellen, um eine benutzerdefinierte Vorhersageroutine zu erstellen:
Ein Modellverzeichnis in Cloud Storage, das alle für die Vorhersage zu verwendenden Artefakte enthält
Ein
.tar.gz
-Quelldistributionspaket von Python in Cloud Storage, das Ihre Implementierung der Predictor-Schnittstelle und sonstigen benutzerdefinierten Code enthält, den AI Platform Prediction zur Vorhersagezeit verwenden soll
Sie können eine benutzerdefinierte Vorhersageroutine nur bereitstellen, wenn Sie für die Modellversion einen Legacy-Maschinentyp (MLS1) verwenden.
Modellartefakte in das Modellverzeichnis hochladen
In der Anleitung zum Bereitstellen von Modellen wird beschrieben, wie Sie in Cloud Storage ein trainiertes Modell zusammen mit anderen Dateien hochladen, die AI Platform Prediction mit Daten oder Zuständen versorgen, die während der Vorhersage zu verwenden sind.
Die Gesamtgröße der Modellartefakte, die Sie für AI Platform Prediction bereitstellen, darf maximal 500 MB betragen.
Sie können Ihr trainiertes ML-Modell als TensorFlow-SavedModel
, model.joblib
-Datei, model.pkl
-Datei oder model.bst
-Datei in das Modellverzeichnis hochladen. Ebenfalls können Sie das Modell als HDF5-Datei mit einem trainierten tf.keras
-Modell oder in einem anderen serialisierten Format bereitstellen.
Zusätzlich können Sie eine Pickle-Datei mit der Instanz einer benutzerdefinierten Präprozessorklasse hinzufügen, die den serialisierten Zustand vom Training enthält.
Betrachten Sie beispielsweise den folgenden Präprozessor, der in der Datei preprocess.py
definiert ist:
Während des Trainings mit einem numerischen Dataset zentriert der Präprozessor die Daten um 0. Dazu wird der Mittelwert jeder Spalte von jedem Wert in der Spalte subtrahiert. Anschließend können Sie die Präprozessorinstanz als Pickle-Datei (preprocessor.pkl
) exportieren, um die Mittelwerte jeder Spalte, die aus den Trainingsdaten berechnet wurden, zu speichern.
Während der Vorhersage kann eine benutzerdefinierte Vorhersageroutine den Präprozessor aus dieser Datei laden, um eine identische Transformation für die Vorhersageeingabe durchzuführen.
Im nächsten Abschnitt wird die Implementierung der Predictor-Schnittstelle beschrieben. Dabei erfahren Sie, wie Sie einen zustandsorientierten Präprozessor wie diesen in einer benutzerdefinierten Vorhersageroutine verwenden können.
Ein ausführliches Beispiel für die Verwendung eines zustandsorientierten Präprozessors während des Trainings und der Vorhersage finden Sie unter Benutzerdefinierte Vorhersageroutine mit Keras erstellen oder Benutzerdefinierte Vorhersageroutine mit scikit-learn erstellen.
Predictor erstellen
Stellen Sie in AI Platform Prediction eine Predictor-Klasse bereit, um vorzugeben, wie Vorhersageanfragen verarbeitet werden sollen. Diese Klasse implementiert die folgende Schnittstelle:
Vorhersageknoten von AI Platform Prediction verwenden die Klassenmethode from_path
, um eine Instanz Ihres Predictors zu laden. Bei dieser Methode sollten die im Modellverzeichnis gespeicherten Artefakte geladen werden. Deren Inhalte werden aus Cloud Storage an einen Speicherort kopiert, der durch das Argument model_dir
angezeigt wird.
Immer wenn Ihre Bereitstellung eine Anfrage für eine Onlinevorhersage erhält, verwendet die von from_path
zurückgegebene Instanz der Predictor-Klasse die zugehörige predict
-Methode, um Vorhersagen zu generieren. AI Platform Prediction serialisiert den Rückgabewert dieser Methode in JSON und sendet ihn als Antwort auf die Vorhersageanfrage.
Die Methode predict
muss keine Eingabe von JSON in Python-Objekte und keine Ausgabe in JSON konvertieren. Dies findet außerhalb der Methode predict
in AI Platform Prediction statt.
AI Platform Prediction parst das Feld instances
aus dem Text der predict
-Anfrage, um der AI Platform Training and Prediction API das Argument instances
bereitzustellen. Alle anderen Felder des Anfragetexts werden geparst und der Methode predict
als Einträge im Wörterbuch **kwargs
bereitgestellt. Weitere Informationen finden Sie unter predict
-Anfrage für die AI Platform Training and Prediction API strukturieren.
Wir ziehen noch einmal das Beispiel aus dem vorherigen Abschnitt heran und gehen davon aus, dass Ihr Modellverzeichnis preprocessor.pkl
(die Pickle-Instanz der Klasse ZeroCenterer
) und entweder ein als model.h5
exportiertes trainiertes tf.keras
-Modell oder ein trainiertes scikit-learn-Modell enthält, das als model.joblib
exportiert wurde.
Abhängig davon, welches ML-Framework Sie verwenden, implementieren Sie eine der folgenden Predictor-Klassen in einer Datei namens predictor.py
:
TensorFlow
scikit-learn
Die Methode predict
konvertiert die Vorhersageergebnisse mit der Methode tolist
in eine Liste, bevor sie sie zurückgibt. NumPy-Arrays können nicht in JSON serialisiert werden. Daher müssen Sie sie in Listen mit Nummern konvertieren (die in JSON serialisiert werden können). Andernfalls sendet AI Platform Prediction keine Antwort auf die Vorhersageanfrage.
Paket mit dem Predictor und den zugehörigen Abhängigkeiten erstellen
Sie müssen den Predictor als .tar.gz
-Distributionspaket mit Quellen verpacken.
Da NumPy, TensorFlow und scikit-learn im Laufzeit-Image von AI Platform Prediction enthalten sind, müssen diese Abhängigkeiten nicht in das Tarball-Paket eingefügt werden. Achten Sie jedoch darauf, alle Abhängigkeiten des Predictors hinzuzufügen, die nicht in AI Platform Prediction vorinstalliert sind.
Für das obige Beispiel müssen Sie preprocess.py
in das Distributionspaket
aufnehmen, auch wenn der Predictor die Datei nicht explizit importiert.
Andernfalls schlägt preprocessor = pickle.load(f)
fehl, weil Python die Klasse der ZeroCenterer
-Instanz in der Pickle-Datei nicht erkennt.
Die folgende setup.py
-Datei zeigt eine Möglichkeit, wie diese Skripte verpackt werden können:
So verpacken Sie den auf dieser Seite beschriebenen benutzerdefinierten Beispielcode und laden ihn anschließend hoch:
Erstellen Sie die in den vorherigen Abschnitten beschriebenen Dateien
preprocess.py
,predictor.py
undsetup.py
im selben Verzeichnis. Rufen Sie dieses Verzeichnis in Ihrer Shell auf.Führen Sie
python setup.py sdist --formats=gztar
aus, umdist/my_custom_code-0.1.tar.gz
zu erstellen.Laden Sie dieses Tarball-Paket an einen Staging-Speicherort in Cloud Storage hoch.
Dieser muss nicht mit Ihrem Modellverzeichnis identisch sein. Wenn Sie beabsichtigen, mehrere Versionen der benutzerdefinierten Vorhersageroutine zu iterieren und bereitzustellen, sollten Sie Ihre benutzerdefinierten Codepakete in ein festgelegtes Staging-Verzeichnis hochladen. Zur Unterscheidung verschiedener Versionen können Sie das Argument
version
insetup.py
erhöhen, wenn Sie den Code aktualisieren.Der folgende Befehl ist eine Möglichkeit, um das Distributionspaket in Cloud Storage hochzuladen:
gcloud storage cp dist/my_custom_code-0.1.tar.gz gs://YOUR_BUCKET/PATH_TO_STAGING_DIR/
Sie können Code für Ihre benutzerdefinierte Vorhersageroutine in einem oder mehreren Paketen bereitstellen.
Benutzerdefinierte Vorhersageroutine bereitstellen
Wählen Sie zuerst eine Region aus, in der Onlinevorhersagen verfügbar sind, und erstellen Sie dann mit gcloud
eine Modellressource:
gcloud ai-platform models create MODEL_NAME{"</var>"}} \
--regions CHOSEN_REGION
Die gcloud beta
-Komponente sollte aktualisiert sein. Erstellen Sie eine Versionsressource und beachten Sie dabei die folgenden gcloud
-Flags:
--origin
: Der Pfad zu Ihrem Modellverzeichnis in Cloud Storage.--package-uris
: Eine durch Kommas getrennte Liste von Nutzercode-Tarballs in Cloud Storage, einschließlich des Pakets, das Ihre Predictor-Klasse enthält.--prediction-class
: Der vollständig qualifizierte Name Ihrer Prediction-Klasse (MODULE_NAME.CLASS_NAME).--framework
: Geben Sie bei der Bereitstellung einer benutzerdefinierten Vorhersageroutine kein Framework an.--runtime-version
: Benutzerdefinierte Vorhersageroutinen sind in den Laufzeitversionen 1.4 bis 2.11 verfügbar.
Im folgenden Befehl wird gezeigt, wie Sie auf Basis der in den vorherigen Abschnitten beschriebenen Beispieldateien eine Versionsressource erstellen:
gcloud components install beta
gcloud beta ai-platform versions create VERSION_NAME \
--model MODEL_NAME{"</var>"}} \
--runtime-version 2.11 \
--python-version 3.7 \
--origin gs://YOUR_BUCKET/PATH_TO_MODEL_DIR \
--package-uris gs://YOUR_BUCKET/PATH_TO_STAGING_DIR/my_custom_code-0.1.tar.gz \
--prediction-class predictor.MyPredictor
Weitere ausführliche Informationen zum Erstellen von Modellen und Versionen oder zum Erstellen von Modellen und Versionen mit der Google Cloud Platform Console anstelle der gcloud CLI finden Sie im Leitfaden zum Bereitstellen von Modellen.
Dienstkonto angeben
Beim Erstellen einer Versionsressource können Sie optional ein Dienstkonto angeben, das Ihre benutzerdefinierte Vorhersageroutine während der Vorhersage verwenden soll. Auf diese Weise können Sie die Berechtigungen für den Zugriff auf andere Google Cloud-Ressourcen anpassen. Weitere Informationen finden Sie unter Ein Dienstkonto für Ihre benutzerdefinierte Vorhersageroutine angeben.
Weitere Informationen
- Eine Anleitung zu benutzerdefinierten Vorhersageroutinen mit Keras oder mit scikit-learn durcharbeiten, um ein umfangreicheres Beispiel für das Trainieren und Bereitstellen eines Modells mit einer benutzerdefinierten Vorhersageroutine zu sehen
- Leitfaden zum Exportieren von Modellen lesen, um Informationen zum Exportieren von Artefakten für die Vorhersage ohne eine benutzerdefinierte Vorhersageroutine zu erhalten
- Leitfaden zum Bereitstellen von Modellen lesen, um mehr über das Bereitstellen von
model
- undversion
-Ressourcen für Vorhersagen in AI Platform Prediction zu erfahren