In diesem Beispiel wird ein Modell zur Vorhersage des Einkommensniveaus einer Person basierend auf dem Census Income Data Set (Dataset zur Einkommenserhebung) trainiert. Nachdem Sie das Modell lokal trainiert und gespeichert haben, stellen Sie es auf AI Platform Prediction bereit und senden Anfragen, um Onlinevorhersagen zu erhalten.
Sie können scikit-learn-Pipelines in AI Platform Prediction bereitstellen. Bevor Sie das Training mit einem Estimator beginnen, können Sie mit dem Pipelinemodul in scikit-learn mehrere Datentransformationen anwenden. Dies umfasst mehrere Schritte der Datenverarbeitung und bei jedem Schritt werden dieselben Trainingsdaten verwendet.
Diese Anleitung ist auch auf GitHub als Jupyter Notebook verfügbar. Einige der verlinkten Dokumente sind ggf. nur auf Englisch verfügbar.
Modell in AI Platform Prediction bereitstellen
So stellen Sie ein Modell in fünf Schritten in AI Platform Prediction bereit, um Vorhersagen abzurufen:
- Modell in einer Datei speichern
- Gespeichertes Modell in Cloud Storage hochladen
- In AI Platform Prediction eine Modellressource erstellen
- Durch Verknüpfung des gespeicherten Modells eine Modellversion erstellen
- Onlinevorhersage treffen
Vorbereitung
Führen Sie die folgenden Schritte aus, um ein GCP-Konto einzurichten, die AI Platform Prediction API zu aktivieren und das Cloud SDK zu installieren und zu aktivieren.
GCP-Projekt einrichten
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the AI Platform Training & Prediction and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Umgebung einrichten
Wählen Sie eine der folgenden Optionen aus, um Ihre Umgebung entweder lokal auf macOS oder in einer Remote-Umgebung in Cloud Shell einzurichten.
Nutzern von macOS wird empfohlen, ihre Umgebung mit dem folgenden MACOS-Tab einzurichten. Cloud Shell ist unter macOS, Linux und Windows verfügbar. Die entsprechende Anleitung finden Sie auf dem Tab CLOUD SHELL. Cloud Shell bietet eine schnelle Möglichkeit für den Test von AI Platform Prediction, eignet sich jedoch nicht für fortlaufende Entwicklungsarbeiten.
macOS
-
Python-Installation prüfen.
Prüfen Sie, ob Python installiert ist, und installieren Sie es gegebenenfalls.python -V
-
pip
-Installation prüfen.
pip
ist der Paketmanager von Python, der in aktuellen Versionen von Python enthalten ist. Prüfen Sie, ob Siepip
bereits installiert haben. Dazu führen Siepip --version
aus. Ist das nicht der Fall, lesen Sie die Anleitung zum Installieren vonpip
.Mit diesem Befehl können Sie ein Upgrade von
pip
ausführen:pip install -U pip
Weitere Informationen finden Sie in der Dokumentation zu pip.
-
virtualenv
installieren
virtualenv
ist ein Tool, mit dem sich isolierte Python-Umgebungen erstellen lassen. Prüfen Sie, ob Sievirtualenv
bereits installiert haben. Dazu führen Sievirtualenv --version
aus. Ist dies nicht der Fall, installieren Sievirtualenv
:pip install --user --upgrade virtualenv
Zur Einrichtung einer isolierten Entwicklungsumgebung für diese Anleitung erstellen Sie in
virtualenv
eine neue virtuelle Umgebung. Mit dem folgenden Befehl wird beispielsweise eine Umgebung mit dem Namenaip-env
aktiviert:virtualenv aip-env source aip-env/bin/activate
-
Führen Sie für diese Anleitung die übrigen Befehle in Ihrer virtuellen Umgebung aus.
Hier finden Sie weitere Informationen zur Verwendung vonvirtualenv
. Zum Beenden vonvirtualenv
führen Siedeactivate
aus.
Cloud Shell
-
Öffnen Sie die Google Cloud Console.
-
Klicken Sie oben auf Cloud Shell aktivieren.
In einem neuen Frame im unteren Teil der Console wird eine Cloud Shell-Sitzung geöffnet und darin eine Eingabeaufforderung angezeigt. Die Initialisierung der Shell-Sitzung kann einige Sekunden dauern.
Die Cloud Shell-Sitzung kann jetzt verwendet werden.
-
Für die Verwendung Ihres ausgewählten Projekts konfigurieren Sie das
gcloud
-Befehlszeilentool.gcloud config set project [selected-project-id]
Dabei ist
[selected-project-id]
Ihre Projekt-ID. Diese geben Sie ohne die Klammern ein.
Frameworks installieren
macOS
Führen Sie in Ihrer virtuellen Umgebung den folgenden Befehl aus, um die Versionen von scikit-learn und pandas zu installieren, die in der Laufzeitversion 2.11 von AI Platform Prediction verwendet werden:
(aip-env)$ pip install scikit-learn==1.0.2 pandas==1.3.5
Durch die Angabe von Versionsnummern im vorherigen Befehl sorgen Sie dafür, dass die Abhängigkeiten in Ihrer virtuellen Umgebung mit den Abhängigkeiten in der Laufzeitversion übereinstimmen. Dies hilft, unerwartetes Verhalten zu vermeiden, wenn Ihr Code in AI Platform Prediction ausgeführt wird.
Weitere Informationen, Hinweise zu weiteren Installationsoptionen und Informationen zur Fehlerbehebung finden Sie in den Installationsanleitungen für die einzelnen Frameworks:
Cloud Shell
Führen Sie den folgenden Befehl aus, um scikit-learn und pandas zu installieren:
pip install --user scikit-learn pandas
Weitere Informationen, Hinweise zu weiteren Installationsoptionen und Informationen zur Fehlerbehebung finden Sie in den Installationsanleitungen für die einzelnen Frameworks:
Daten herunterladen
Das in diesem Beispiel für das Training verwendete Census Income Data Set (Dataset zur Einkommenserhebung) wird vom UC Irvine Machine Learning Repository gehostet. Weitere Details finden Sie in den Informationen zu den Daten.
- Die Trainingsdatei ist
adult.data
. - Die Bewertungsdatei ist
adult.test
.
Modell trainieren und speichern
Mithilfe der folgenden Schritte trainieren und speichern Sie ein Modell:
- Laden Sie die Daten in einen Pandas-Datenframe, um sie für die Verwendung mit scikit-learn vorzubereiten.
- Trainieren Sie ein einfaches Modell in scikit-learn.
- Speichern Sie das Modell in einer Datei, die in AI Platform Prediction hochgeladen werden kann.
Wenn Sie bereits ein trainiertes Modell zum Hochladen haben, können Sie weitere Informationen unter Modell exportieren nachlesen.
Daten laden und umwandeln
Sie können Pipeline
-Objekte mit der Version von joblib
in scikit-learn oder pickle
exportieren, genauso wie Sie scikit-learn-Estimators exportieren. Im folgenden Beispiel werden Pipelines verwendet, um einzelne kategoriale Merkmale in numerische Werte zu konvertieren, sie zu kombinieren und das Modell mithilfe eines RandomForestClassifier
zu trainieren.
from sklearn.externals import joblib
import json
import numpy as np
import os
import pandas as pd
import pickle
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectKBest
from sklearn.pipeline import FeatureUnion
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import LabelBinarizer
# Define the format of your input data, including unused columns.
# These are the columns from the census data files.
COLUMNS = (
'age',
'workclass',
'fnlwgt',
'education',
'education-num',
'marital-status',
'occupation',
'relationship',
'race',
'sex',
'capital-gain',
'capital-loss',
'hours-per-week',
'native-country',
'income-level'
)
# Categorical columns are columns that need to be turned into a numerical value to be used by scikit-learn
CATEGORICAL_COLUMNS = (
'workclass',
'education',
'marital-status',
'occupation',
'relationship',
'race',
'sex',
'native-country'
)
# Load the training census dataset
with open('./census_data/adult.data', 'r') as train_data:
raw_training_data = pd.read_csv(train_data, header=None, names=COLUMNS)
# Remove the column we are trying to predict ('income-level') from our features list
# Convert the Dataframe to a lists of lists
train_features = raw_training_data.drop('income-level', axis=1).as_matrix().tolist()
# Create our training labels list, convert the Dataframe to a lists of lists
train_labels = (raw_training_data['income-level'] == ' >50K').as_matrix().tolist()
# Load the test census dataset
with open('./census_data/adult.test', 'r') as test_data:
raw_testing_data = pd.read_csv(test_data, names=COLUMNS, skiprows=1)
# Remove the column we are trying to predict ('income-level') from our features list
# Convert the Dataframe to a lists of lists
test_features = raw_testing_data.drop('income-level', axis=1).as_matrix().tolist()
# Create our training labels list, convert the Dataframe to a lists of lists
test_labels = (raw_testing_data['income-level'] == ' >50K.').as_matrix().tolist()
# Since the census data set has categorical features, we need to convert
# them to numerical values. We'll use a list of pipelines to convert each
# categorical column and then use FeatureUnion to combine them before calling
# the RandomForestClassifier.
categorical_pipelines = []
# Each categorical column needs to be extracted individually and converted to a numerical value.
# To do this, each categorical column will use a pipeline that extracts one feature column via
# SelectKBest(k=1) and a LabelBinarizer() to convert the categorical value to a numerical one.
# A scores array (created below) will select and extract the feature column. The scores array is
# created by iterating over the COLUMNS and checking if it is a CATEGORICAL_COLUMN.
for i, col in enumerate(COLUMNS[:-1]):
if col in CATEGORICAL_COLUMNS:
# Create a scores array to get the individual categorical column.
# Example:
# data = [39, 'State-gov', 77516, 'Bachelors', 13, 'Never-married', 'Adm-clerical',
# 'Not-in-family', 'White', 'Male', 2174, 0, 40, 'United-States']
# scores = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
#
# Returns: [['Sate-gov']]
scores = []
# Build the scores array
for j in range(len(COLUMNS[:-1])):
if i == j: # This column is the categorical column we want to extract.
scores.append(1) # Set to 1 to select this column
else: # Every other column should be ignored.
scores.append(0)
skb = SelectKBest(k=1)
skb.scores_ = scores
# Convert the categorical column to a numerical value
lbn = LabelBinarizer()
r = skb.transform(train_features)
lbn.fit(r)
# Create the pipeline to extract the categorical feature
categorical_pipelines.append(
('categorical-{}'.format(i), Pipeline([
('SKB-{}'.format(i), skb),
('LBN-{}'.format(i), lbn)])))
# Create pipeline to extract the numerical features
skb = SelectKBest(k=6)
# From COLUMNS use the features that are numerical
skb.scores_ = [1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0]
categorical_pipelines.append(('numerical', skb))
# Combine all the features using FeatureUnion
preprocess = FeatureUnion(categorical_pipelines)
# Create the classifier
classifier = RandomForestClassifier()
# Transform the features and fit them to the classifier
classifier.fit(preprocess.transform(train_features), train_labels)
# Create the overall model as a single pipeline
pipeline = Pipeline([
('union', preprocess),
('classifier', classifier)
])
Modell exportieren
Zum Exportieren des Modells können Sie joblib oder die Python-Bibliothek pickle
verwenden:
joblib
from sklearn.externals import joblib
# Export the model to a file
joblib.dump(pipeline, 'model.joblib')
pickle
# Export the model to a file
with open('model.pkl', 'wb') as model_file:
pickle.dump(pipeline, model_file)
Anforderungen an die Benennung von Modelldateien
Je nach verwendeter Bibliothek muss die gespeicherte Modelldatei, die Sie in Cloud Storage hochladen, entweder den Namen model.pkl
oder model.joblib
tragen. Diese Einschränkung sorgt dafür, dass AI Platform Prediction zur Modellrekonstruktion beim Importieren das gleiche Muster verwendet, das auch beim Exportieren verwendet wurde.
Zum Export des Modells verwendete Bibliothek | Korrekter Modellname |
---|---|
pickle |
model.pkl |
sklearn.externals.joblib |
model.joblib |
Organisieren Sie bei zukünftigen Iterationen Ihres Modells den Cloud Storage-Bucket so, dass jedes neue Modell ein eigenes Verzeichnis hat.
Modell in Cloud Storage speichern
Für diese Anleitung ist es am einfachsten, wenn Sie einen dedizierten Cloud Storage-Bucket in demselben Projekt wie AI Platform Prediction verwenden.
Wenn Sie einen Bucket in einem anderen Projekt verwenden, müssen Sie dafür sorgen, dass Ihr AI Platform Prediction-Dienstkonto auf das Modell in Cloud Storage zugreifen kann. Ohne die entsprechenden Berechtigungen schlägt die Anfrage zum Erstellen einer AI Platform Prediction-Modellversion fehl. Weitere Informationen zum Gewähren von Berechtigungen für Cloud Storage.
Cloud Storage-Bucket einrichten
In diesem Abschnitt erfahren Sie, wie Sie einen neuen Bucket erstellen. Sie können auch einen vorhandenen Bucket verwenden. Dieser muss sich aber in der Region befinden, in der Sie AI Platform-Jobs ausführen. Hinzu kommt: Wenn der Bucket nicht zu dem Projekt gehört, das Sie für die Ausführung von AI Platform Prediction verwenden, müssen Sie den AI Platform Prediction-Dienstkonten explizit Zugriff gewähren.
-
Geben Sie einen Namen für den neuen Bucket an. Der Name muss sich von allen anderen Bucket-Namen in Cloud Storage unterscheiden:
BUCKET_NAME="YOUR_BUCKET_NAME"
Beispielsweise verwenden Sie den Projektnamen mit angehängtem
-aiplatform
:PROJECT_ID=$(gcloud config list project --format "value(core.project)") BUCKET_NAME=${PROJECT_ID}-aiplatform
-
Prüfen Sie den erstellten Bucketnamen.
echo $BUCKET_NAME
-
Wählen Sie eine Region für den Bucket aus und legen Sie eine Umgebungsvariable
REGION
fest.Verwenden Sie die Region, in der Sie auch AI Platform Prediction-Jobs ausführen möchten. Hier finden Sie die verfügbaren Regionen für AI Platform Prediction-Dienste.
Mit dem folgenden Code wird beispielsweise
REGION
erstellt und dafürus-central1
festgelegt:REGION=us-central1
-
Erstellen Sie den neuen Bucket:
gcloud storage buckets create gs://$BUCKET_NAME --location=$REGION
Exportierte Modelldatei in Cloud Storage hochladen
Führen Sie den folgenden Befehl aus, um Ihre gespeicherte Modelldatei in Ihren Bucket in Cloud Storage hochzuladen:
gcloud storage cp ./model.joblib gs://your_bucket_name/model.joblib
Daten für die Vorhersage formatieren
Bevor Sie eine Onlinevorhersageanfrage senden, müssen Sie Ihre Testdaten formatieren, um sie für die Verwendung mit dem Vorhersagedienst von AI Platform Prediction vorzubereiten. Das Format Ihrer Eingabeinstanzen muss mit den Anforderungen Ihres Modells übereinstimmen.
gcloud
Erstellen Sie eine input.json
-Datei mit jeder Eingabeinstanz in einer separaten Zeile.
Im folgenden Beispiel werden die ersten zehn Dateninstanzen in der Liste test_features
verwendet, die in den vorherigen Schritten definiert wurde.
[25, "Private", 226802, "11th", 7, "Never-married", "Machine-op-inspct", "Own-child", "Black", "Male", 0, 0, 40, "United-States"]
[38, "Private", 89814, "HS-grad", 9, "Married-civ-spouse", "Farming-fishing", "Husband", "White", "Male", 0, 0, 50, "United-States"]
[28, "Local-gov", 336951, "Assoc-acdm", 12, "Married-civ-spouse", "Protective-serv", "Husband", "White", "Male", 0, 0, 40, "United-States"]
[44, "Private", 160323, "Some-college", 10, "Married-civ-spouse", "Machine-op-inspct", "Husband", "Black", "Male", 7688, 0, 40, "United-States"]
[18, "?", 103497, "Some-college", 10, "Never-married", "?", "Own-child", "White", "Female", 0, 0, 30, "United-States"]
[34, "Private", 198693, "10th", 6, "Never-married", "Other-service", "Not-in-family", "White", "Male", 0, 0, 30, "United-States"]
[29, "?", 227026, "HS-grad", 9, "Never-married", "?", "Unmarried", "Black", "Male", 0, 0, 40, "United-States"]
[63, "Self-emp-not-inc", 104626, "Prof-school", 15, "Married-civ-spouse", "Prof-specialty", "Husband", "White", "Male", 3103, 0, 32, "United-States"]
[24, "Private", 369667, "Some-college", 10, "Never-married", "Other-service", "Unmarried", "White", "Female", 0, 0, 40, "United-States"]
[55, "Private", 104996, "7th-8th", 4, "Married-civ-spouse", "Craft-repair", "Husband", "White", "Male", 0, 0, 10, "United-States"]
Das Format der Eingabeinstanzen muss den Anforderungen Ihres Modells entsprechen. In diesem Beispiel benötigt das Census-Modell 14 Merkmale. Ihre Eingabe muss also eine Formmatrix sein (num_instances, 14
).
REST API
Erstellen Sie eine input.json
-Datei mit jeweils einer Zeile pro Eingabeinstanz. Im folgenden Beispiel werden die ersten zehn Dateninstanzen aus der Liste test_features
verwendet, die in den vorherigen Schritten definiert wurde.
{
"instances": [
[25, "Private", 226802, "11th", 7, "Never-married", "Machine-op-inspct", "Own-child", "Black", "Male", 0, 0, 40, "United-States"],
[38, "Private", 89814, "HS-grad", 9, "Married-civ-spouse", "Farming-fishing", "Husband", "White", "Male", 0, 0, 50, "United-States"],
[28, "Local-gov", 336951, "Assoc-acdm", 12, "Married-civ-spouse", "Protective-serv", "Husband", "White", "Male", 0, 0, 40, "United-States"],
[44, "Private", 160323, "Some-college", 10, "Married-civ-spouse", "Machine-op-inspct", "Husband", "Black", "Male", 7688, 0, 40, "United-States"],
[18, "?", 103497, "Some-college", 10, "Never-married", "?", "Own-child", "White", "Female", 0, 0, 30, "United-States"],
[34, "Private", 198693, "10th", 6, "Never-married", "Other-service", "Not-in-family", "White", "Male", 0, 0, 30, "United-States"],
[29, "?", 227026, "HS-grad", 9, "Never-married", "?", "Unmarried", "Black", "Male", 0, 0, 40, "United-States"],
[63, "Self-emp-not-inc", 104626, "Prof-school", 15, "Married-civ-spouse", "Prof-specialty", "Husband", "White", "Male", 3103, 0, 32, "United-States"],
[24, "Private", 369667, "Some-college", 10, "Never-married", "Other-service", "Unmarried", "White", "Female", 0, 0, 40, "United-States"],
[55, "Private", 104996, "7th-8th", 4, "Married-civ-spouse", "Craft-repair", "Husband", "White", "Male", 0, 0, 10, "United-States"]
]
}
Das Format der Eingabeinstanzen muss den Anforderungen Ihres Modells entsprechen. In diesem Beispiel benötigt das Census-Modell 14 Merkmale. Ihre Eingabe muss also eine Formmatrix sein (num_instances, 14
).
Weitere Informationen finden Sie unter Eingabe für Onlinevorhersagen formatieren.
Modell mit lokalen Vorhersagen testen
Mit dem Befehl gcloud ai-platform local predict
können Sie testen, wie das Modell Vorhersagen durchführt, bevor Sie es für AI Platform-Vorhersage bereitstellen. Der Befehl verwendet für Vorhersagen Abhängigkeiten in Ihrer lokalen Umgebung und gibt Ergebnisse im selben Format zurück, das gcloud ai-platform predict
für Onlinevorhersagen verwendet. Wenn Sie Vorhersagen in Ihrer lokalen Umgebung testen, können Sie Fehler erkennen und somit Kosten in Verbindung mit Anfragen für Onlinevorhersagen vermeiden.
Für das Argument --model-dir
geben Sie ein Verzeichnis an, das Ihr exportiertes Modell für maschinelles Lernen enthält und sich entweder auf Ihrem lokalen Computer oder in Cloud Storage befindet. Für das Argument --framework
geben Sie tensorflow
, scikit-learn
oder xgboost
an. Sie können den Befehl gcloud ai-platform local predict
nicht mit einer benutzerdefinierten Vorhersageroutine verwenden.
Das folgende Beispiel zeigt, wie lokale Vorhersagen durchgeführt werden:
gcloud ai-platform local predict --model-dir LOCAL_OR_CLOUD_STORAGE_PATH_TO_MODEL_DIRECTORY/ \
--json-instances LOCAL_PATH_TO_PREDICTION_INPUT.JSON \
--framework NAME_OF_FRAMEWORK
Modelle und Versionen bereitstellen
AI Platform Prediction verwaltet Ihre trainierten Modelle mithilfe von Modell- und Versionsressourcen. Ein AI Platform Prediction-Modell ist ein Container für die Versionen Ihres Modells für maschinelles Lernen.
Zum Bereitstellen eines Modells legen Sie eine Modellressource in AI Platform Prediction an, erstellen eine Version dieses Modells und verknüpfen dann die Modellversion mit der in Cloud Storage gespeicherten Modelldatei.
Modellressource erstellen
AI Platform Prediction verwendet Modellressourcen, um verschiedene Versionen Ihres Modells zu organisieren.
Sie müssen zu diesem Zeitpunkt entscheiden, ob Modellversionen, die zu diesem Modell gehören, einen regionalen Endpunkt oder den globalen Endpunkt verwenden sollen. In den meisten Fällen sollten Sie einen regionalen Endpunkt auswählen. Wenn Sie Funktionen benötigen, die nur auf Legacy-Maschinentypen (MLS1) verfügbar sind, verwenden Sie den globalen Endpunkt.
Sie müssen auch zu diesem Zeitpunkt entscheiden, ob die Modellversionen, die zu diesem Modell gehören, Logs bei der Bereitstellung von Vorhersagen exportieren sollen. In den folgenden Beispielen wird das Logging nicht aktiviert. Weitere Informationen zur Logging-Aktivierung
Konsole
Öffnen Sie in der Google Cloud Console die Seite AI Platform Prediction-Modelle:
Klicken Sie oben auf der Seite Modelle auf die Schaltfläche Neues Modell. Dadurch gelangen Sie auf die Seite Modell erstellen.
Geben Sie im Feld Modellname einen eindeutigen Namen für Ihr Modell ein.
Wenn das Kästchen Regionalen Endpunkt verwenden angeklickt ist, verwendet AI Platform Prediction einen regionalen Endpunkt. Wenn Sie stattdessen den globalen Endpunkt verwenden möchten, entfernen Sie das Häkchen aus dem Kästchen Regionalen Endpunkt verwenden.
Wählen Sie in der Drop-down-Liste Region einen Standort für Ihre Vorhersageknoten aus. Die verfügbaren Regionen unterscheiden sich je nachdem, ob Sie einen regionalen Endpunkt oder den globalen Endpunkt verwenden.
Klicken Sie auf Erstellen.
Achten Sie darauf, dass Sie wieder auf die Seite Modelle zurückgekehrt sind und Ihr neues Modell in der Liste angezeigt wird.
gcloud
Regionaler Endpunkt
Führen Sie diesen Befehl aus:
gcloud ai-platform models create MODEL_NAME \
--region=REGION
Ersetzen Sie Folgendes:
- MODEL_NAME: Name, den Sie für Ihr Modell auswählen.
- REGION: Die Region des regionalen Endpunkts, in dem Vorhersageknoten ausgeführt werden sollen. Dies muss eine Region sein, die Compute Engine-Maschinentypen (N1) unterstützt.
Wenn Sie das Flag --region
nicht angeben, werden Sie von der gcloud CLI aufgefordert, einen regionalen Endpunkt auszuwählen (oder us-central
auf dem globalen Endpunkt zu verwenden).
Alternativ können Sie das Attribut ai_platform/region
auf eine bestimmte Region festlegen, damit die gcloud CLI immer den entsprechenden regionalen Endpunkt für AI Platform Prediction verwendet, auch wenn Sie das Flag --region
nicht angeben. (Diese Konfiguration gilt nicht für Befehle in der Befehlsgruppe gcloud ai-platform operations
.)
Globaler Endpunkt
Führen Sie diesen Befehl aus:
gcloud ai-platform models create MODEL_NAME \
--regions=REGION
Ersetzen Sie Folgendes:
- MODEL_NAME: Name, den Sie für Ihr Modell auswählen.
- REGION: Region auf dem globalen Endpunkt, in der Vorhersageknoten ausgeführt werden sollen. Dies muss eine Region sein, die Legacy-Maschinentypen (MLS1) unterstützt.
Wenn Sie das Flag --regions
nicht angeben, werden Sie von der gcloud CLI aufgefordert, einen regionalen Endpunkt auszuwählen (oder us-central1
auf dem globalen Endpunkt zu verwenden).
REST API
Regionaler Endpunkt
Formatieren Sie die Anfrage, indem Sie das Modellobjekt in den Anfragetext einfügen. Geben Sie mindestens einen Namen für Ihr Modell an. Ersetzen Sie dazu MODEL_NAME in dem folgenden Beispiel:
{ "name": "MODEL_NAME" }
Machen Sie einen REST API-Aufruf an die folgende URL und ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID:
POST https://REGION-ml.googleapis.com/v1/projects/PROJECT_ID/models/
Dabei gilt:
REGION: Region des regionalen Endpunkts, für die das Modell bereitgestellt wird. Dies muss eine Region sein, die Compute Engine-Maschinentypen (N1) unterstützt.
PROJECT_ID: Ihre Google Cloud-Projekt-ID.
Sie können beispielsweise die folgende Anfrage mit dem Befehl
curl
stellen. Mit diesem Befehl wird die Anfrage mithilfe der Anmeldedaten autorisiert, die mit der Google Cloud CLI-Installation verknüpft sind.curl -X POST -H "Content-Type: application/json" \ -d '{"name": "MODEL_NAME"}' \ -H "Authorization: Bearer `gcloud auth print-access-token`" \ "https://REGION-ml.googleapis.com/v1/projects/PROJECT_ID/models"
Die API gibt in etwa folgende Antwort zurück:
{ "name": "projects/PROJECT_ID/models/MODEL_NAME", "regions": [ "REGION" ] }
Globaler Endpunkt
Formatieren Sie die Anfrage, indem Sie das Modellobjekt in den Anfragetext einfügen. Geben Sie mindestens einen Namen für Ihr Modell an. Ersetzen Sie dazu MODEL_NAME im folgenden Beispiel und geben Sie eine Region an, indem Sie REGION durch eine Region ersetzen, die Legacy-Maschinentypen (MLS1) unterstützt:
{ "name": "MODEL_NAME", "regions": ["REGION"] }
Machen Sie einen REST API-Aufruf an die folgende URL und ersetzen Sie PROJECT_ID durch Ihre Google Cloud-Projekt-ID:
POST https://ml.googleapis.com/v1/projects/PROJECT_ID/models/
Sie können beispielsweise die folgende Anfrage mit dem Befehl
curl
stellen. Mit diesem Befehl wird die Anfrage mithilfe der Anmeldedaten autorisiert, die mit der Google Cloud CLI-Installation verknüpft sind.curl -X POST -H "Content-Type: application/json" \ -d '{"name": "MODEL_NAME", "regions": ["REGION"]}' \ -H "Authorization: Bearer `gcloud auth print-access-token`" \ "https://ml.googleapis.com/v1/projects/PROJECT_ID/models"
Die API gibt in etwa folgende Antwort zurück:
{ "name": "projects/PROJECT_ID/models/MODEL_NAME", "regions": [ "REGION" ] }
Weitere Informationen finden Sie in der API für AI Platform Prediction-Modelle.
Modellversionen erstellen
Jetzt können Sie mit dem trainierten und zuvor in Cloud Storage hochgeladenen Modell eine Modellversion erstellen. Beim Erstellen einer Version können Sie eine Reihe von Parametern angeben. In der folgenden Liste werden allgemeine Parameter beschrieben, von denen einige erforderlich sind:
name
: Muss innerhalb des AI Platform Prediction-Modells einmalig sein.deploymentUri
: Der Pfad zu Ihrem Modellverzeichnis in Cloud Storage.- Wenn Sie ein TensorFlow-Modell bereitstellen, ist dies ein SavedModel-Verzeichnis.
- Wenn Sie ein scikit-learn- oder XGBoost-Modell bereitstellen, ist dies das Verzeichnis, in dem sich die Datei
model.joblib
,model.pkl
odermodel.bst
befindet. - Wenn Sie eine benutzerdefinierte Vorhersageroutine bereitstellen, ist dies das Verzeichnis, in dem sich alle Modellartefakte befinden. Die Gesamtgröße dieses Verzeichnisses darf maximal 500 MB betragen.
framework
:TENSORFLOW
,SCIKIT_LEARN
oderXGBOOST
.runtimeVersion
: Eine Laufzeitversion auf der Basis der Abhängigkeiten, die Ihr Modell benötigt. Wenn Sie ein scikit-learn-Modell oder ein XGBoost-Modell bereitstellen, muss dies mindestens Version 1.4 sein. Wenn Sie die Modellversion für die Batchvorhersage verwenden möchten, müssen Sie die Laufzeitversion 2.1 oder früher verwenden.pythonVersion
: Muss auf "3.5" (für Laufzeitversionen 1.4 bis 1.14) oder "3.7" festgelegt sein (für Laufzeitversionen 1.15 und höher), um mit von Python 3 exportierten Modelldateien kompatibel zu sein. Kann bei Laufzeitversion 1.15 oder früher auch auf "2.7" festgelegt werden.machineType
(optional): Der Typ der virtuellen Maschine, den AI Platform-Vorhersage für die Knoten verwendet, die Vorhersagen bereitstellen. Weitere Informationen zu Maschinentypen Wenn nicht festgelegt, wird für regionale Endpunkte standardmäßign1-standard-2
und für den globalen Endpunktmls1-c1-m2
verwendet.
Weitere Informationen zu jedem dieser Parameter sowie zu zusätzlichen weniger gebräuchlichen Parametern finden Sie in der API-Referenz für die Versionsressource.
Wenn Sie Ihr Modell darüber hinaus an einem regionalen Endpunkt erstellt haben, müssen Sie die Version auch an demselben regionalen Endpunkt erstellen.
Konsole
Öffnen Sie in der Google Cloud Console die Seite AI Platform Prediction-Modelle:
Wählen Sie auf der Seite Modelle den Namen der Modellressource aus, die Sie zur Erstellung der Version verwenden möchten. Dadurch gelangen Sie auf die Seite Modelldetails.
Klicken Sie oben auf der Seite Modelldetails auf die Schaltfläche Neue Version. Dadurch gelangen Sie auf die Seite Version erstellen.
Geben Sie in das Feld Name den Versionsnamen ein. Geben Sie optional in das Feld Beschreibung eine Beschreibung für die Version ein.
Geben Sie die Informationen über das Training des Modells in den entsprechenden Drop-down-Menüs ein:
- Wählen Sie die zum Training Ihres Modells verwendete Python-Version aus.
- Wählen Sie das Framework und die Framework-Version aus.
- Wählen Sie die ML-Laufzeitversion aus. Weitere Informationen zu AI Platform Prediction-Laufzeitversionen finden Sie hier.
Wählen Sie einen Maschinentyp für die Onlinevorhersage aus.
Geben Sie im Feld Modell-URI den Standort des Cloud Storage-Buckets ein, in den Sie die Modelldatei hochgeladen haben. Mit der Schaltfläche Durchsuchen können Sie den richtigen Pfad suchen.
Achten Sie darauf, dass Sie den Pfad zu dem Verzeichnis angeben, das die Datei enthält, und nicht den Pfad zur Modelldatei selbst. Verwenden Sie z. B.
gs://your_bucket_name/model-dir/
stattgs://your_bucket_name/model-dir/saved_model.pb
odergs://your_bucket_name/model-dir/model.pkl
.Zum Bereitstellen der Onlinevorhersage wählen Sie eine Skalierungsoption aus:
Wenn Sie "Automatische Skalierung" auswählen, wird das optionale Feld Mindestanzahl von Knoten angezeigt. Geben Sie hier die Mindestanzahl der Knoten ein, die auch dann jederzeit aktiv bleiben sollen, wenn der Dienst herunterskaliert wurde.
Wenn Sie "Manuelle Skalierung" auswählen, geben Sie die Anzahl der Knoten ein, die ständig ausgeführt werden sollen.
Weitere Informationen zu den Skalierungsoptionen je nach Maschinentyp
Weitere Informationen finden Sie unter Preise für Vorhersagen.
Zum Erstellen Ihrer Modellversion klicken Sie auf Speichern.
gcloud
Legen Sie Umgebungsvariablen für den Pfad zum Cloud Storage-Verzeichnis mit der Modellbinärdatei sowie für den Versionsnamen, den Modellnamen und das von Ihnen gewählte Framework fest.
Wenn Sie eine Version mit der gcloud CLI erstellen, geben Sie den Framework-Namen in Großbuchstaben mit Unterstrichen (z. B.
SCIKIT_LEARN
) oder in Kleinbuchstaben mit Bindestrichen (z. B.scikit-learn
) an. Beide Optionen führen zu identischem Verhalten.Ersetzen Sie
[VALUES_IN_BRACKETS]
dabei durch die entsprechenden Werte:MODEL_DIR="gs://your_bucket_name/" VERSION_NAME="[YOUR-VERSION-NAME]" MODEL_NAME="[YOUR-MODEL-NAME]" FRAMEWORK="[YOUR-FRAMEWORK_NAME]"
Erstellen Sie die Version:
gcloud ai-platform versions create $VERSION_NAME \ --model=$MODEL_NAME \ --origin=$MODEL_DIR \ --runtime-version=2.11 \ --framework=$FRAMEWORK \ --python-version=3.7 \ --region=REGION \ --machine-type=MACHINE_TYPE
Dabei gilt:
REGION: Die Region des regionalen Endpunkts, für die Sie das Modell erstellt haben. Wenn Sie das Modell auf dem globalen Endpunkt erstellt haben, lassen Sie das Flag
--region
aus.MACHINE_TYPE: Ein Maschinentyp, der bestimmt, welche Rechenressourcen für Ihre Vorhersageknoten verfügbar sind.
Das Erstellen der Version dauert einige Minuten. Wenn sie fertig ist, sollten Sie die folgende Ausgabe sehen:
Creating version (this might take a few minutes)......done.
Rufen Sie Informationen über Ihre neue Version ab:
gcloud ai-platform versions describe $VERSION_NAME \ --model=$MODEL_NAME
Die Ausgabe sollte etwa so aussehen:
createTime: '2018-02-28T16:30:45Z' deploymentUri: gs://your_bucket_name framework: [YOUR-FRAMEWORK-NAME] machineType: mls1-c1-m2 name: projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions/[YOUR-VERSION-NAME] pythonVersion: '3.7' runtimeVersion: '2.11' state: READY
REST API
Formatieren Sie Ihren Anfragetext so, dass das Versionsobjekt enthalten ist. In diesem Beispiel werden
name
,deploymentUri
,runtimeVersion
,framework
undmachineType
der Version angegeben. Ersetzen Sie[VALUES_IN_BRACKETS]
dabei durch die entsprechenden Werte:{ "name": "[YOUR-VERSION-NAME]", "deploymentUri": "gs://your_bucket_name/", "runtimeVersion": "2.11", "framework": "[YOUR_FRAMEWORK_NAME]", "pythonVersion": "3.7", "machineType": "[YOUR_MACHINE_TYPE]" }
Senden Sie den REST API-Aufruf an den folgenden Pfad und ersetzen Sie
[VALUES_IN_BRACKETS]
dabei durch die entsprechenden Werte:POST https://REGION-ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions
Ersetzen Sie REGION durch die Region des regionalen Endpunkts, in dem Sie Ihr Modell erstellt haben. Wenn Sie Ihr Modell auf dem globalen Endpunkt erstellt haben, verwenden Sie
ml.googleapis.com
.Sie können beispielsweise die folgende Anfrage mit dem Befehl
curl
stellen:curl -X POST -H "Content-Type: application/json" \ -d '{"name": "[YOUR-VERSION-NAME]", "deploymentUri": "gs://your_bucket_name/", "runtimeVersion": "2.11", "framework": "[YOUR_FRAMEWORK_NAME]", "pythonVersion": "3.7", "machineType": "[YOUR_MACHINE_TYPE]"}' \ -H "Authorization: Bearer `gcloud auth print-access-token`" \ "https://REGION-ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions"
Das Erstellen der Version dauert einige Minuten. Wenn sie fertig ist, sollte die Ausgabe in etwa so aussehen:
{ "name": "projects/[YOUR-PROJECT-ID]/operations/create_[YOUR-MODEL-NAME]_[YOUR-VERSION-NAME]-[TIMESTAMP]", "metadata": { "@type": "type.googleapis.com/google.cloud.ml.v1.OperationMetadata", "createTime": "2018-07-07T02:51:50Z", "operationType": "CREATE_VERSION", "modelName": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]", "version": { "name": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions/[YOUR-VERSION-NAME]", "deploymentUri": "gs://your_bucket_name", "createTime": "2018-07-07T02:51:49Z", "runtimeVersion": "2.11", "framework": "[YOUR_FRAMEWORK_NAME]", "machineType": "[YOUR_MACHINE_TYPE]", "pythonVersion": "3.7" } } }
Anfrage für Onlinevorhersage senden
Nachdem Sie erfolgreich eine Version erstellt haben, startet AI Platform Prediction einen neuen Server, der Vorhersageanfragen ausführen kann.
In diesem Abschnitt wird Folgendes gezeigt:
- Wie Sie das Modell durch das Senden von Anfragen für kleinere Datasets mit
gcloud
testen können - Wie Sie größere Anfragen mit der Python-Client-Bibliothek für das volle Test-Dataset senden und die ersten zehn Ergebnisse darstellen können.
gcloud
In diesem Abschnitt wird erläutert, wie Sie eine Vorhersageanfrage mit der Datei input.json
senden, die Sie in einem vorherigen Schritt erstellt haben.
Legen Sie Umgebungsvariablen für den Modellnamen, den Versionsnamen und den Namen der Eingabedatei fest. Ersetzen Sie
[VALUES_IN_BRACKETS]
dabei durch die entsprechenden Werte:MODEL_NAME="[YOUR-MODEL-NAME]" VERSION_NAME="[YOUR-VERSION-NAME]" INPUT_FILE="input.json"
Senden Sie die Vorhersageanfrage:
gcloud ai-platform predict --model $MODEL_NAME --version \ $VERSION_NAME --json-instances $INPUT_FILE
Die Vorhersageergebnisse geben
True
zurück, wenn das vorhergesagte Einkommen der Person höher als 50.000 $ pro Jahr ist, ansonsten wirdFalse
zurückgegeben. Ihre ersten zehn Ergebnisse können zum Beispiel so aussehen:[False, False, False, True, False, False, False, False, False, False]
REST API
In diesem Abschnitt wird gezeigt, wie Sie eine Vorhersageanfrage mit der Datei input.json
senden, die Sie im vorherigen Schritt erstellt haben.
Senden Sie die Vorhersageanfragen:
curl -X POST -H "Content-Type: application/json" -d @input.json \
-H "Authorization: Bearer `gcloud auth print-access-token`" \
"https://ml.googleapis.com/v1/projects/${PROJECT_ID}/models/${MODEL_NAME}/versions/${VERSION_NAME}:predict"
Die Vorhersageergebnisse geben True
zurück, wenn das vorhergesagte Einkommen der Person höher als 50.000 $ pro Jahr ist, ansonsten wird False
zurückgegeben. Die Vorhersageergebnisse werden in der Console in Form einer Liste mit booleschen Werten dargestellt.
Ihre ersten zehn Ergebnisse könnten zum Beispiel so oder ähnlich aussehen:
{"predictions": [false, false, false, true, false, false, false, false, false, false]}
Python
In diesem Beispiel wird die Python-Client-Bibliothek verwendet, um Vorhersageanfragen für das gesamte Census-Dataset zu senden. Die ersten zehn Ergebnisse werden ausgegeben. Weitere Informationen finden Sie unter Python-Clientbibliothek.
Ersetzen Sie [VALUES_IN_BRACKETS]
dabei durch die entsprechenden Werte:
import googleapiclient.discovery
# Fill in your PROJECT_ID, VERSION_NAME and MODEL_NAME before running
# this code.
PROJECT_ID = [YOUR PROJECT_ID HERE]
VERSION_NAME = [YOUR VERSION_NAME HERE]
MODEL_NAME = [YOUR MODEL_NAME HERE]
service = googleapiclient.discovery.build('ml', 'v1')
name = 'projects/{}/models/{}'.format(PROJECT_ID, MODEL_NAME)
name += '/versions/{}'.format(VERSION_NAME)
# Due to the size of the data, it needs to be split in 2
first_half = test_features[:int(len(test_features)/2)]
second_half = test_features[int(len(test_features)/2):]
complete_results = []
for data in [first_half, second_half]:
responses = service.projects().predict(
name=name,
body={'instances': data}
).execute()
if 'error' in responses:
print(response['error'])
else:
complete_results.extend(responses['predictions'])
# Print the first 10 responses
for i, response in enumerate(complete_results[:10]):
print('Prediction: {}\tLabel: {}'.format(response, test_labels[i]))
Die Vorhersageergebnisse geben True
zurück, wenn das vorhergesagte Einkommen der Person höher als 50.000 $ pro Jahr ist, ansonsten wird False
zurückgegeben. Ihre ersten zehn Ergebnisse könnten zum Beispiel so ähnlich aussehen:
Prediction: False Label: False
Prediction: False Label: False
Prediction: True Label: True
Prediction: True Label: True
Prediction: False Label: False
Prediction: False Label: False
Prediction: False Label: False
Prediction: True Label: True
Prediction: False Label: False
Prediction: False Label: False
Weitere Informationen zu den einzelnen Eingabeparametern finden Sie in den Details zu AI Platform Prediction API-Vorhersageanfragen.
Über die Daten
Das in diesem Beispiel für das Training verwendete Census Income Data Set (Dataset zur Einkommenserhebung) wird vom UC Irvine Machine Learning Repository gehostet.
Erhebungsdaten mit freundlicher Genehmigung von: Lichman, M. (2013). UCI Machine Learning Repository http://archive.ics.uci.edu/ml. Irvine, CA: University of California, School of Information and Computer Science. Dieses Dataset ist öffentlich verfügbar und kann unter den folgenden von der Dataset-Quelle angegebenen Bedingungen verwendet werden: http://archive.ics.uci.edu/ml. Das Dataset wird WIE BESEHEN ohne ausdrückliche oder stillschweigende Garantie von Google bereitgestellt. Google lehnt jegliche Haftung für direkte oder indirekte Schäden ab, die aus der Nutzung des Datasets resultieren.
Weitere Informationen
- Diese Anleitung als Jupyter Notebook auf GitHub testen
- Weitere Beispiele zu scikit-learn-Notebooks auf GitHub