Onlinevorhersagen mit scikit-learn abrufen

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 in AI Platform bereit und rufen damit Onlinevorhersagen ab.

Sie können scikit-learn-Pipelines auf AI Platform 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.

Dieses Tutorial ist auch auf GitHub als Jupyter Notebook verfügbar.

Ein Modell in AI Platform bereitstellen

So stellen Sie ein Modell in fünf Schritten in AI Platform bereit, um Vorhersagen abzurufen:

  • Speichern Sie Ihr Modell in einer Datei
  • Laden Sie das gespeicherte Modell in Cloud Storage hoch
  • Erstellen Sie eine Modellressource in AI Platform
  • Erstellen Sie eine Modellversion durch Verknüpfung Ihres gespeicherten Modells
  • Treffen Sie eine Onlinevorhersage

Vorbereitung

Führen Sie folgende Schritte aus, um ein GCP-Konto einzurichten, die AI Platform API zu aktivieren sowie das Cloud SDK zu installieren und zu aktivieren.

GCP-Projekt einrichten

  1. Melden Sie sich in Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, registrieren Sie sich hier für ein neues Konto.

  2. Wählen Sie in der GCP Console auf der Projektauswahlseite ein GCP-Projekt aus oder erstellen Sie eins.

    Zur Projektauswahl

  3. Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Platform-Projekt aktiviert ist. So bestätigen Sie die Abrechnung für Ihr Projekt.

  4. Aktivieren Sie die AI Platform ("Cloud Machine Learning Engine") and Compute Engineerforderlichen APIs.

    APIs aktivieren

  5. Installieren und initialisieren Sie das Cloud SDK.

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 Tab MACOS 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, eignet sich jedoch nicht für fortlaufende Entwicklungsarbeiten.

macOS

  1. Python-Installation prüfen
    Prüfen Sie, ob Python installiert ist, und installieren Sie es gegebenenfalls.

    python -V
  2. pip-Installation prüfen
    pip ist der Paketmanager von Python, der in aktuellen Versionen von Python enthalten ist. Prüfen Sie, ob Sie pip bereits installiert haben. Führen Sie dazu pip --version aus. Ist dies nicht der Fall, lesen Sie die Anleitung zum Installieren von pip.

    Mit dem folgenden Befehl können Sie ein Upgrade von pipausführen:

    pip install -U pip

    Weitere Informationen finden Sie in der Dokumentation zu pip.

  3. virtualenv installieren
    virtualenv ist ein Tool, mit dem sich isolierte Python-Umgebungen erstellen lassen. Prüfen Sie, ob Sie virtualenv bereits installiert haben. Führen Sie dazu virtualenv --version aus. Ist dies nicht der Fall, installieren Sie virtualenv:

    pip install --user --upgrade virtualenv

    Zum Einrichten 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 Namen cmle-env aktiviert:

    virtualenv cmle-env
    source cmle-env/bin/activate
  4. Führen Sie für diese Anleitung die übrigen Befehle in Ihrer virtuellen Umgebung aus.

    Hier finden Sie weitere Informationen zur Verwendung von virtualenv. Führen Sie deactivate zum Beenden von virtualenv aus.

Cloud Shell

  1. Öffnen Sie die Google Cloud Platform Console.

    Google Cloud Platform Console

  2. Klicken Sie oben auf Cloud Shell aktivieren.

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

    Cloud Shell-Sitzung

    Die Cloud Shell-Sitzung kann jetzt verwendet werden.

  3. Konfigurieren Sie das gcloud-Befehlszeilentool für die Verwendung Ihres ausgewählten Projekts.

    gcloud config set project [selected-project-id]

    Dabei ist [selected-project-id] Ihre Projekt-ID. Geben Sie diese ohne die Klammern ein.

Google Cloud SDK-Komponenten prüfen

So prüfen Sie, ob die Google Cloud SDK-Komponenten installiert sind:

  1. Listen Sie Ihre Modelle auf:

    gcloud ai-platform models list
  2. Wenn Sie noch keine Modelle erstellt haben, gibt der Befehl eine leere Liste zurück:

    Listed 0 items.

    Nach dem Erstellen von Modellen können Sie diese mit diesem Befehl auflisten.

  3. Wenn Sie gcloud bereits installiert haben, aktualisieren Sie :

    gcloud components update

Frameworks installieren

macOS

Führen Sie in Ihrer virtuellen Umgebung den folgenden Befehl aus, um die in Laufzeitversion 1.14 von AI Platform verwendeten Versionen von scikit-learn und pandas zu installieren:

(cmle-env)$ pip install scikit-learn==0.20.2 pandas==0.24.0

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 verhindert unerwartetes Verhalten, wenn Ihr Code auf AI Platform 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

In diesem Beispiel wird das Census Income Data Set (Dataset zur Einkommenserhebung) für das Training verwendet. Es wird vom UC Irvine Machine Learning Repository gehostet. Weitere Informationen finden Sie unter 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:

  1. Laden Sie die Daten in einen Pandas-Datenframe, um sie für die Verwendung mit scikit-learn vorzubereiten.
  2. Trainieren Sie ein einfaches Modell in scikit-learn.
  3. Speichern Sie das Modell in einer Datei, die in AI Platform hochgeladen werden kann.

Wenn Sie bereits ein trainiertes Modell zum Hochladen haben, finden Sie weitere Informationen unter Modell exportieren.

Daten laden und umwandeln

Sie können Pipeline-Objekte mit joblib 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

# 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 gewährleistet, dass AI Platform 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
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, einen dedizierten Cloud Storage-Bucket in demselben Projekt wie AI Platform zu verwenden.

Wenn Sie einen Bucket in einem anderen Projekt verwenden, müssen Sie dafür sorgen, dass Ihr AI Platform-Dienstkonto auf das Modell in Cloud Storage zugreifen kann. Ohne die entsprechenden Berechtigungen schlägt die Anfrage zum Erstellen einer AI Platform-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 in dem Projekt ist, das Sie für die Ausführung von AI Platform verwenden, müssen Sie den AI Platform-Dienstkonten explizit Zugriff gewähren.

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

    Verwenden Sie beispielsweise den Projektnamen mit angehängtem -mlengine:

    PROJECT_ID=$(gcloud config list project --format "value(core.project)")
    BUCKET_NAME=${PROJECT_ID}-mlengine
  2. Prüfen Sie den erstellten Bucketnamen.

    echo $BUCKET_NAME
  3. Wählen Sie eine Region für den Bucket aus und legen Sie eine Umgebungsvariable REGION fest.

    Verwenden Sie die Region, in der Sie AI Platform-Jobs ausführen möchten. Hier finden Sie die Regionen, in denen AI Platform-Dienste verfügbar sind.

    Beispielsweise wird mit dem folgenden Code die Umgebungsvariable REGION erstellt und dafür als Wert us-central1 festgelegt:

    REGION=us-central1
  4. Erstellen Sie den neuen Bucket:

    gsutil mb -l $REGION gs://$BUCKET_NAME

Exportierte Modelldatei in Cloud Storage hochladen

Führen Sie den folgenden Befehl aus, um Ihre gespeicherte Modelldatei in Ihren Bucket in Cloud Storage hochzuladen:

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

{
  "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 Prediction 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 ermitteln und somit Kosten in Verbindung mit Anfragen für Onlinevorhersagen vermeiden.

Geben Sie für das Argument --model-dir 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. Geben Sie tensorflow, scikit-learn oder xgboost für das Argument --framework an. Sie können den Befehl gcloud ai-platform local predict nicht mit einer benutzerdefinierten Vorhersageroutine verwenden.

Das folgende Beispiel zeigt, wie lokale Vorhersagen ausgefü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 organisiert Ihre trainierten Modelle nach Modell- und Versionsressourcen. Ein AI Platform-Modell ist ein Container für die Versionen Ihres Modells für maschinelles Lernen.

Zum Bereitstellen eines Modells legen Sie eine Modellressource auf AI Platform an, erstellen eine Version dieses Modells und verknüpfen dann die Modellversion mit der in Cloud Storage gespeicherten Modelldatei.

Modellressource erstellen

AI Platform verwendet Modellressourcen, um verschiedene Versionen Ihres Modells zu organisieren.

Console

  1. Öffnen Sie die Seite der AI Platform-Modelle in der GCP Console.

    Modelle in der GCP Console öffnen

  2. Erstellen Sie gegebenenfalls das Modell, dem Sie eine neue Version hinzufügen möchten:

    1. Klicken Sie oben auf der Seite Modelle auf die Schaltfläche Neues Modell. Dadurch wird die Seite Modell erstellen aufgerufen.

    2. Geben Sie in das Feld Modellname einen Namen für Ihr Modell ein. Geben Sie optional in das Feld Beschreibung eine Beschreibung für das Modell ein.

    3. Klicken Sie auf Erstellen.

    4. Achten Sie darauf, dass Sie sich wieder auf der Seite Modelle befinden und das neue Modell in der Liste angezeigt wird.

gcloud

Erstellen Sie eine Modellressource für Ihre Modellversionen und geben Sie den gewünschten Namen für das Modell ohne die Klammern ein:

gcloud ai-platform models create "[YOUR-MODEL-NAME]"

REST API

  1. Formatieren Sie die Anfrage durch Einfügen des Modellobjekts in den Anfragetext. Sie müssen mindestens den Namen für das Modell angeben. Geben Sie den gewünschten Namen für das Modell ohne die Klammern ein:

    {"name": "[YOUR-MODEL-NAME]"}
    
  2. Senden Sie den REST API-Aufruf an den folgenden Pfad und ersetzen Sie [VALUES_IN_BRACKETS] dabei durch die entsprechenden Werte:

    POST https://ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/
    

    Sie können beispielsweise die folgende Anfrage mit cURL stellen:

    curl -X POST -H "Content-Type: application/json" \
      -d '{"name": "[YOUR-MODEL-NAME]"}' \
      -H "Authorization: Bearer `gcloud auth print-access-token`" \
      "https://ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models"
    

    Die Ausgabe sollte in etwa so aussehen:

    {
      "name": "projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]",
      "regions": [
        "us-central1"
      ]
    }
    

Weitere Informationen finden Sie in der AI Platform Model API.

Modellversionen erstellen

Sie können jetzt mit dem trainierten und zuvor in Cloud Storage hochgeladenen Modell eine Modellversion erstellen. Geben Sie dabei die folgenden Parameter an:

  • name: Muss innerhalb des AI Platform-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 oder model.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 oder XGBOOST.

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

  • pythonVersion: Muss auf "3.5" festgelegt sein, um mit von Python 3 exportierten Modelldateien kompatibel zu sein. Ist nichts festgelegt, wird standardmäßig "2.7" verwendet.

  • machineType (optional): Der Typ der virtuellen Maschine, den AI Platform Prediction für die Knoten verwendet, die Vorhersagen bereitstellen. Weitere Informationen finden Sie auf der Seite zu Maschinentypen. Verwendet standardmäßig mls1-c1-m2, wenn nichts anderes festgelegt wird.

Weitere Informationen zu diesen Parametern finden Sie im AI Platform-Training und unter der Prediction API für eine Versionsressource.

Beachten Sie die kompletten Details für jede Laufzeitversion.

Console

  1. Wählen Sie auf der Seite Modelle den Namen der Modellressource aus, die Sie zur Erstellung der Version verwenden möchten. Dadurch wird die Seite Modelldetails aufgerufen.

    Modelle in der GCP Console öffnen

  2. Klicken Sie oben auf der Seite Modelldetails auf die Schaltfläche Neue Version. Dadurch wird die Seite Version erstellen aufgerufen.

  3. Geben Sie in das Feld Name den Versionsnamen ein. Geben Sie optional in das Feld Beschreibung eine Beschreibung für die Version ein.

  4. 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-Laufzeitversionen finden Sie unter Laufzeitversionsliste.
  5. Wählen Sie optional einen Maschinentyp für die Onlinevorhersage aus. Der Standardwert in diesem Feld ist "Single-Core-CPU".

  6. 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 nach dem 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/ statt gs://your_bucket_name/model-dir/saved_model.pb oder gs://your_bucket_name/model-dir/model.pkl.

  7. Wählen Sie zum Bereitstellen der Onlinevorhersage 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. Der Standardwert in diesem Feld ist "0".

    • Wenn Sie "Manuelle Skalierung" auswählen, geben Sie die Anzahl der Knoten ein, die ständig ausgeführt werden sollen.

      Weitere Informationen finden Sie unter Vorhersagekosten.

  8. Zum Erstellen Ihrer Modellversion klicken Sie auf Speichern.

gcloud

  1. Legen Sie Umgebungsvariablen für den Pfad zum Cloud Storage-Verzeichnis mit der Modellbinärdatei sowie für den Versionsnamen, den Modellnamen und Ihre Framework-Auswahl fest.

    Wenn Sie eine Version mit dem gcloud-Tool 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 zum identischen 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]"
    

  2. Erstellen Sie die Version:

    gcloud ai-platform versions create $VERSION_NAME \
      --model $MODEL_NAME \
      --origin $MODEL_DIR \
      --runtime-version=1.14 \
      --framework $FRAMEWORK \
      --python-version=3.5
    

    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.

  3. Rufen Sie Informationen über Ihre neue Version ab:

    gcloud ai-platform versions describe $VERSION_NAME \
      --model $MODEL_NAME
    

    Die Ausgabe sollte in 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.5'
    runtimeVersion: '1.14'
    state: READY

REST API

  1. Formatieren Sie Ihren Anfragetext so, dass das Versionsobjekt enthalten ist. In diesem Beispiel werden name, deploymentUri, runtimeVersion und framework der Version angegeben. Ersetzen Sie [VALUES_IN_BRACKETS] dabei durch die entsprechenden Werte:

      {
        "name": "[YOUR-VERSION-NAME]",
        "deploymentUri": "gs://your_bucket_name/"
        "runtimeVersion": "1.14"
        "framework": "[YOUR_FRAMEWORK_NAME]"
        "pythonVersion": "3.5"
      }
    
  2. Senden Sie den REST API-Aufruf an den folgenden Pfad und ersetzen Sie [VALUES_IN_BRACKETS] dabei durch die entsprechenden Werte:

      POST https://ml.googleapis.com/v1/projects/[YOUR-PROJECT-ID]/models/[YOUR-MODEL-NAME]/versions
    

    Sie können beispielsweise die folgende Anfrage mit cURL stellen:

        curl -X POST -H "Content-Type: application/json" \
          -d '{"name": "[YOUR-VERSION-NAME]", "deploymentUri": "gs://your_bucket_name/", "runtimeVersion": "1.14", "framework": "[YOUR_FRAMEWORK_NAME]", "pythonVersion": "3.5"}' \
          -H "Authorization: Bearer `gcloud auth print-access-token`" \
          "https://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": "1.14",
            "framework": "[YOUR_FRAMEWORK_NAME]",
            "machineType": "mls1-c1-m2",
            "pythonVersion": "3.5"
          }
        }
      }
    

Anfrage für Onlinevorhersage senden

Nachdem Sie eine Version erfolgreich erstellt haben, startet AI Platform einen neuen Server, der Vorhersageanfragen ausführen kann.

In diesem Abschnitt wird Folgendes gezeigt:

  1. Wie Sie das Modell durch das Senden von Anfragen für kleinere Datasets mit gcloud testen können
  2. Wie Sie größere Anfragen mit der Python-Clientbibliothek für das komplette 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.

  1. 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"
    
  2. 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 wird False 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önnen zum Beispiel so aussehen:

{"predictions": [false, false, false, true, false, false, false, false, false, false]}

Python

In diesem Beispiel wird die Python-Clientbibliothek 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önnen zum Beispiel so 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 API-Vorhersageanfragen.

Über die Daten

In diesem Beispiel wird das Census Income Data Set (Dataset zur Einkommenserhebung) für das Training verwendet. Es 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 Verwendung des Datasets resultieren.

Weitere Informationen