Onlinevorhersagen abrufen

Die Onlinevorhersage von AI Platform ist ein Dienst, der dahingehend optimiert ist, Ihre Daten mit so wenig Latenz wie möglich durch gehostete Modelle zu verarbeiten. Sie senden kleine Mengen von Daten an den Dienst und dieser gibt Ihre Vorhersagen in der Antwort zurück.

Weitere Informationen finden Sie unter Onlinevorhersage im Vergleich zur Batchvorhersage und Vorhersageübersicht.

Vorbereitung

Sie müssen zuerst folgende Schritte ausführen, um Vorhersagen anzufordern:

Regionen

Die Onlinevorhersage von AI Platform ist derzeit in folgenden Regionen verfügbar:

  • us-central1
  • us-east1
  • us-east4
  • asia-northeast1
  • europe-west1

Ausführliche Informationen zu den verfügbaren Regionen für die Trainings- und Vorhersagedienste von AI Platform finden Sie unter Regionen.

Modelle und Versionen erstellen

Beachten Sie, dass Sie die Art und Weise, in der Onlinevorhersagen ausgeführt werden, nur während der Erstellung der Modell- und Versionsressourcen festlegen können:

Erstellte Ressource Bei der Ressourcenerstellung festzulegende Einstellungen
Modell Region, in der Vorhersagen ausgeführt werden sollen
Modell Logging von Onlinevorhersagen aktivieren
Version Zu verwendende Laufzeitversion
Version Zu verwendende Python-Version
Version Für die Onlinevorhersage zu verwendender Maschinentyp

Nachdem Sie das Modell oder die Version erstellt haben, können Sie die oben aufgeführten Einstellungen nicht mehr ändern. Wenn Sie die Einstellungen ändern möchten, müssen Sie ein neues Modell oder eine neue Versionsressource mit den neuen Einstellungen erstellen und Ihr Modell noch einmal bereitstellen.

Maschinentypen für die Onlinevorhersage

Die Onlinevorhersage unterstützt derzeit Single- und Quad-Core-CPUs. Wenn Sie an Alphaprogrammen für andere Hardwarekonfigurationen teilnehmen möchten, kontaktieren Sie uns über AI Platform-Feedback.

Name Kern(e) RAM (GB)
mls1-c1-m2 (Standard) 1 2
mls1-c4-m2 (Beta) 4 2

Geben Sie beim Erstellen der AI Platform-Modellversion den Maschinentyp mls1-c4-m2 an, um Quad-Core-CPUs für die Onlinevorhersage zu verwenden.

gcloud

Verwenden Sie zum Angeben der Quad-Core-CPU die gcloud beta-Komponente und führen Sie den Befehl mit dem optionalen Flag --machine-type "mls1-c4-m2" aus. Beispiel:

  gcloud components install beta

  gcloud beta ai-platform versions create "[YOUR_VERSION_NAME]" \
      --model "[YOUR_MODEL_NAME]" \
      --origin "[YOUR_GCS_PATH_TO_MODEL_DIRECTORY]" \
      --runtime-version "1.14" \
      --python-version "3.5" \
      --machine-type "mls1-c4-m2"

Python

In diesem Beispiel wird die Google APIs-Clientbibliothek für Python verwendet. Informationen zum Erstellen einer Modellversion finden Sie in der vollständigen Anleitung.

Fügen Sie zum Angeben der Quad-Core-CPU den optionalen Eintrag 'machineType': 'mls1-c4-m2' in requestDict ein, das Sie an die Anfrage zum Erstellen der Version übergeben. Beispiel:

   requestDict = {'name': '[YOUR_VERSION_NAME]',
      'description': '[YOUR_VERSION_DESCRIPTION]',
      'deploymentUri': '[YOUR_GCS_PATH_TO_MODEL_DIRECTORY]',
      'runtimeVersion': '1.14',
      'pythonVersion': '3.5',
      'machineType': 'mls1-c4-m2'}

Informationen zu den Preisen für diese Maschinentypen finden Sie auf der Seite "Preise".

Logs für Onlinevorhersageanfragen anfordern

Der AI Platform-Vorhersagedienst protokolliert standardmäßig keine Informationen zu Anfragen, da die Logs kostenpflichtig sind. Die Onlinevorhersage mit einer hohen Rate von Abfragen pro Sekunde (QPS) kann zu einer hohen Anzahl von Logs führen, die gemäß dem Stackdriver-Preismodell berechnet werden.

Wenn Sie Logging für Onlinevorhersagen jedoch nutzen möchten, können Sie Ihr Modell beim Erstellen der Modellressource so konfigurieren, dass Logs generiert werden. Es gibt zwei Arten von Logging, die Sie unabhängig voneinander aktivieren können:

  • Zugriffs-Logging, das Informationen wie Zeitstempel und Latenz für jede Anfrage enthält.

  • Stream-Logging, das die Streams stderr und stdout aus den Vorhersageknoten enthält und bei der Fehlerbehebung hilfreich sein kann. Diese Art des Loggings befindet sich in der Betaphase.

gcloud

Zum Aktivieren des Zugriffs-Loggings fügen Sie das Flag --enable-logging hinzu, wenn Sie Ihr Modell mit dem Befehl gcloud ai-platform models create erstellen. Beispiel:

gcloud ai-platform models create model_name \
  --regions us-central1 \
  --enable-logging

Zum Aktivieren des Stream-Loggings (Beta) verwenden Sie die gcloud beta-Komponente und fügen das Flag --enable-console-logging hinzu. Beispiel:

gcloud components install beta

gcloud beta ai-platform models create model_name \
  --regions us-central1 \
  --enable-console-logging

REST API

Zum Aktivieren des Zugriffs-Loggings legen Sie in der Modellressource das Feld onlinePredictionLogging auf True fest, wenn Sie Ihr Modell mit projects.models.create erstellen.

Zum Aktivieren des Stream-Loggings (Beta) legen Sie in der Modellressource das Feld onlinePredictionConsoleLogging auf True fest.

Eingabe für Onlinevorhersagen formatieren

Instanzen als JSON-Strings formatieren

Das Grundformat für Onlinevorhersagen ist eine Liste mit Dateninstanzen. Es kann sich dabei um eine einfache Werteliste oder Elemente eines JSON-Objekts handeln. Dies hängt davon ab, wie Sie die Eingaben in der Trainingsanwendung konfiguriert haben: TensorFlow-Modelle und benutzerdefinierte Vorhersageroutinen können komplexere Eingaben akzeptieren. Die meisten Scikit-Learn- und XGBoost-Modelle erwarten hingegeben eine Liste von Zahlen als Eingabe.

Dieses Beispiel zeigt einen Eingabetensor und einen Instanzschlüssel für ein TensorFlow-Modell:

{"values": [1, 2, 3, 4], "key": 1}

Die Zusammensetzung des JSON-Strings kann komplex sein, solange diese Regeln eingehalten werden:

  • Die oberste Ebene der Instanzdaten muss ein JSON-Objekt sein – ein Wörterbuch aus Schlüssel/Wert-Paaren.

  • Einzelne Werte in einem Instanzobjekt können Strings, Zahlen oder Listen sein. JSON-Objekte können nicht eingebettet werden.

  • Listen dürfen nur Elemente des gleichen Typs (einschließlich anderer Listen) enthalten. Strings und numerische Werte dürfen nicht kombiniert werden.

Sie übergeben Eingabeinstanzen für Onlinevorhersagen als Nachrichtentext für den Aufruf "projects.predict". Weitere Informationen zu den Formatierungsanforderungen des Anfragetextes finden Sie hier.

gcloud

  1. Beachten Sie, dass die Eingabedatei eine durch Zeilenumbruch getrennte JSON-Datei sein muss, in der jede Instanz ein JSON-Objekt ist und in einer eigenen Zeile steht.

    {"values": [1, 2, 3, 4], "key": 1}
    {"values": [5, 6, 7, 8], "key": 2}
    

REST API

  1. Nehmen Sie jede Instanz als Element in eine Liste auf und nennen Sie das Listenmitglied instances.

    {"instances": [
      {"values": [1, 2, 3, 4], "key": 1},
      {"values": [5, 6, 7, 8], "key": 2}
    ]}
    

Binärdaten in der Vorhersageeingabe

Binärdaten können nicht als von JSON unterstützte UTF-8-codierte Strings formatiert werden. Wenn Sie Binärdaten in Ihren Eingaben verwenden, müssen Sie für deren Darstellung die base64-Codierung verwenden. Folgende besondere Formatierungen sind erforderlich:

  • Der codierte String muss als JSON-Objekt mit einem einzelnen Schlüssel namens b64 formatiert werden. Im folgenden Python 2.7-Beispiel wird ein Puffer aus JPEG-Rohdaten mithilfe der base64-Bibliothek codiert, um eine Instanz zu erstellen:

    {"image_bytes": {"b64": base64.b64encode(jpeg_data)}}
    

    In Python 3.5 gibt die Base64-Codierung eine Byte-Sequenz aus. Diese müssen Sie in einen String konvertieren, um die Serialisierung in JSON zu ermöglichen:

    {'image_bytes': {'b64': base64.b64encode(jpeg_data).decode()}}
    
  • Benennen Sie die Aliase für die binären Ein- und Ausgabetensoren in Ihrem TensorFlow-Modellcode so, dass sie auf "_bytes" enden.

Vorhersagen anfordern

Wenn Sie eine Onlinevorhersage anfordern möchten, senden Sie die Instanzen Ihrer Eingabedaten als JSON-String in einer Vorhersageanfrage. Informationen zum Formatieren des Anfrage- und Antworttextes finden Sie unter Details zur Vorhersageanfrage.

Wenn Sie keine Modellversion angeben, verwendet die Vorhersageanfrage die Standardversion des Modells.

gcloud

  1. Erstellen Sie Umgebungsvariablen für die Parameter und schließen Sie einen Versionswert ein, wenn Sie eine bestimmte Modellversion angeben möchten:

    MODEL_NAME="[YOUR-MODEL-NAME]"
    INPUT_DATA_FILE="instances.json"
    VERSION_NAME="[YOUR-VERSION-NAME]"
    
  2. Verwenden Sie gcloud ai-platform predict, um Instanzen an ein bereitgestelltes Modell zu senden. Beachten Sie, dass --version optional ist.

    gcloud ai-platform predict --model $MODEL_NAME  \
                       --version $VERSION_NAME \
                       --json-instances $INPUT_DATA_FILE
    
  3. Das gcloud-Tool analysiert die Antwort und gibt die Vorhersagen in einem für Menschen lesbaren Format an Ihr Terminal aus. Wenn Sie ein anderes Ausgabeformat wie etwa JSON oder CSV festlegen möchten, fügen Sie Ihrem Vorhersagebefehl das Flag "--format" hinzu. Weitere Informationen erhalten Sie unter den verfügbaren Ausgabeformaten.

Python

Sie können die Google APIs-Clientbibliothek für Python verwenden, um die AI Platform API für Training und Vorhersagen aufzurufen, ohne manuell HTTP-Anforderungen zu erstellen. Bevor Sie das folgende Codebeispiel ausführen, müssen Sie die Authentifizierung einrichten.

def predict_json(project, model, instances, version=None):
    """Send json data to a deployed model for prediction.

    Args:
        project (str): project where the AI Platform Model is deployed.
        model (str): model name.
        instances ([Mapping[str: Any]]): Keys should be the names of Tensors
            your deployed model expects as inputs. Values should be datatypes
            convertible to Tensors, or (potentially nested) lists of datatypes
            convertible to tensors.
        version: str, version of the model to target.
    Returns:
        Mapping[str: any]: dictionary of prediction results defined by the
            model.
    """
    # Create the AI Platform service object.
    # To authenticate set the environment variable
    # GOOGLE_APPLICATION_CREDENTIALS=<path_to_service_account_file>
    service = googleapiclient.discovery.build('ml', 'v1')
    name = 'projects/{}/models/{}'.format(project, model)

    if version is not None:
        name += '/versions/{}'.format(version)

    response = service.projects().predict(
        name=name,
        body={'instances': instances}
    ).execute()

    if 'error' in response:
        raise RuntimeError(response['error'])

    return response['predictions']

Java

Mit der Google API-Clientbibliothek für Java können Sie die AI Platform Training and Prediction API aufrufen, ohne HTTP-Anfragen manuell zu erstellen. Bevor Sie das folgende Codebeispiel ausführen, müssen Sie die Authentifizierung einrichten.

/*
 * Copyright 2017 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.FileContent;
import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpContent;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.UriTemplate;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.discovery.Discovery;
import com.google.api.services.discovery.model.JsonSchema;
import com.google.api.services.discovery.model.RestDescription;
import com.google.api.services.discovery.model.RestMethod;
import java.io.File;

/*
 * Sample code for sending an online prediction request to Cloud Machine Learning Engine.
 */

public class OnlinePredictionSample {
  public static void main(String[] args) throws Exception {
    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
    Discovery discovery = new Discovery.Builder(httpTransport, jsonFactory, null).build();

    RestDescription api = discovery.apis().getRest("ml", "v1").execute();
    RestMethod method = api.getResources().get("projects").getMethods().get("predict");

    JsonSchema param = new JsonSchema();
    String projectId = "YOUR_PROJECT_ID";
    // You should have already deployed a model and a version.
    // For reference, see https://cloud.google.com/ml-engine/docs/deploying-models.
    String modelId = "YOUR_MODEL_ID";
    String versionId = "YOUR_VERSION_ID";
    param.set(
        "name", String.format("projects/%s/models/%s/versions/%s", projectId, modelId, versionId));

    GenericUrl url =
        new GenericUrl(UriTemplate.expand(api.getBaseUrl() + method.getPath(), param, true));
    System.out.println(url);

    String contentType = "application/json";
    File requestBodyFile = new File("input.txt");
    HttpContent content = new FileContent(contentType, requestBodyFile);
    System.out.println(content.getLength());

    GoogleCredential credential = GoogleCredential.getApplicationDefault();
    HttpRequestFactory requestFactory = httpTransport.createRequestFactory(credential);
    HttpRequest request = requestFactory.buildRequest(method.getHttpMethod(), url, content);

    String response = request.execute().parseAsString();
    System.out.println(response);
  }
}

Fehlerbehebung bei Onlinevorhersagen

Bei Onlinevorhersagen treten mitunter folgende Fehler auf:

  • Unzureichender Speicherplatz
  • Falsch formatierte Eingabedaten

Versuchen Sie, die Größe des Modells zu reduzieren, bevor Sie es für die Vorhersage in AI Platform bereitstellen.

Weitere Informationen zur Fehlerbehebung bei Onlinevorhersagen

Weitere Informationen

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

Feedback geben zu...