Onlinevorhersage abrufen

Mit dem Onlinevorhersagedienst von Vertex AI können Sie synchrone Anfragen an den Endpunkt Ihres eigenen Vorhersagemodells senden.

Auf dieser Seite erfahren Sie, wie Sie Anfragen an Ihr Modell senden, damit es Onlinevorhersagen mit geringer Latenz bereitstellen kann.

Hinweis

Für die Verwendung der Onlinevorhersage-API benötigen Sie ein Projekt und die entsprechenden Anmeldedaten.

Führen Sie die folgenden Schritte aus, bevor Sie eine Onlinevorhersage erhalten:

  1. Richten Sie ein Projekt für Vertex AI ein.
  2. Bitten Sie Ihren Projekt-IAM-Administrator, Ihnen die Rolle „Vertex AI Prediction User“ (vertex-ai-prediction-user) zuzuweisen, um die Berechtigungen für den Zugriff auf die Onlinevorhersage zu erhalten.

    Informationen zu dieser Rolle finden Sie unter IAM-Berechtigungen vorbereiten.

  3. Erstellen und trainieren Sie ein Vorhersagemodell, das auf einen der unterstützten Container ausgerichtet ist.

  4. Erstellen Sie den Vorhersagecluster und prüfen Sie, ob Ihr Projekt eingehenden externen Traffic zulässt.

  5. Exportieren Sie Ihre Modellartefakte für die Vorhersage.

  6. Stellen Sie Ihr Modell auf einem Endpunkt bereit.

  7. Details der benutzerdefinierten Ressource Endpoint Ihres Vorhersagemodells ansehen:

    kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'
    

    Ersetzen Sie Folgendes:

    • PREDICTION_CLUSTER_KUBECONFIG: der Pfad zur kubeconfig-Datei im Vorhersagecluster.
    • PREDICTION_ENDPOINT: der Name des Endpunkts.
    • PROJECT_NAMESPACE: der Name des Namespace des Vorhersageprojekts.

    In der Ausgabe muss das Feld status angezeigt werden, wobei der voll qualifizierte Domainname des Endpunkts im Feld endpointFQDN angezeigt wird. Registrieren Sie diesen Endpunkt-URL-Pfad, um ihn für Ihre Anfragen zu verwenden.

Umgebungsvariablen festlegen

Wenn Sie eine Anfrage mit einem Python-Skript an den Endpunkt Ihres Modells senden und Sie ein Dienstkonto in Ihrem Projekt einrichten, um autorisierte API-Aufrufe programmatisch auszuführen, können Sie im Skript Umgebungsvariablen definieren, um beim Ausführen auf Werte wie die Dienstkontoschlüssel zuzugreifen.

So legen Sie die erforderlichen Umgebungsvariablen in einem Python-Skript fest:

  1. Erstellen Sie ein JupyterLab-Notebook um mit der Online Prediction API zu interagieren.

  2. Erstellen Sie ein Python-Skript im JupyterLab-Notebook.

  3. Fügen Sie dem Python-Skript den folgenden Code hinzu:

    import os
    
    os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "APPLICATION_DEFAULT_CREDENTIALS_FILENAME"
    

    Ersetzen Sie APPLICATION_DEFAULT_CREDENTIALS_FILENAME durch den Namen der JSON-Datei, die die Dienstkontoschlüssel enthält, die Sie erstellt haben im Projekt, z. B. my-service-key.json.

  4. Speichern Sie das Python-Skript unter einem Namen wie prediction.py.

  5. Führen Sie das Python-Skript aus, um die Umgebungsvariablen festzulegen:

    python SCRIPT_NAME
    

    Ersetzen Sie SCRIPT_NAME durch den Namen, den Sie Ihrem Python-Skript gegeben haben, z. B. prediction.py.

Anfrage an einen Endpunkt senden

Senden Sie eine Anfrage an den Endpunkt des Modells, um eine Onlinevorhersage zu erhalten:

curl

So senden Sie eine curl-Anfrage:

  1. Erstellen Sie eine JSON-Datei mit dem Namen request.json für den Anfragetext.

    Sie müssen Ihre Eingabe für die Onlinevorhersage mit den Details des Anfragetexts hinzufügen und formatieren die der Zielcontainer erfordert.

  2. Rufen Sie ein Authentifizierungstoken ab.

  3. Stellen Sie die Anfrage:

    curl -X POST -H "Content-Type: application/json; charset=utf-8" -H "Authorization: Bearer TOKEN"
    https://ENDPOINT_HOSTNAME:443/v1/model:predict -d @request.json
    

    Ersetzen Sie Folgendes:

    • TOKEN: das Authentifizierungstoken, das Sie erhalten haben.
    • ENDPOINT_HOSTNAME: der voll qualifizierte Domainname des Endpunkts Ihres Modells für die Onlinevorhersageanfrage.

Bei erfolgreicher Ausführung erhalten Sie eine JSON-Antwort auf Ihre Onlinevorhersageanfrage.

Die folgende Ausgabe zeigt ein Beispiel:

{
    "predictions": [[-357.10849], [-171.621658]
    ]
}

Weitere Informationen zu Antworten finden Sie unter Details zum Antworttext.

Python

So verwenden Sie den Onlinevorhersagedienst aus einem Python-Skript:

  1. Erstellen Sie eine JSON-Datei mit dem Namen request.json für den Anfragetext.

    Sie müssen Ihre Eingabe für die Onlinevorhersage mit den Details des Anfragetexts hinzufügen und formatieren die der Zielcontainer erfordert.

  2. Installieren Sie die neueste Version der Vertex AI Platform-Clientbibliothek.

  3. Legen Sie die erforderlichen Umgebungsvariablen in einem Python-Skript fest.

  4. Authentifizieren Sie Ihre API-Anfrage.

  5. Fügen Sie dem erstellten Python-Skript den folgenden Code hinzu:

    import json
    import os
    from typing import Sequence
    
    import grpc
    from absl import app
    from absl import flags
    import google
    
    from google.auth.transport import requests
    from google.protobuf import json_format
    from google.protobuf.struct_pb2 import Value
    from google.cloud.aiplatform_v1.services import prediction_service
    
    _INPUT = flags.DEFINE_string("input", None, "input", required=True)
    _ENDPOINT_HOSTNAME = flags.DEFINE_string("endpoint_hostname", None, "Prediction endpoint FQDN", required=True)
    _PROJECT_NAME = flags.DEFINE_string("project_name", None, "project name", required=True)
    _ENDPOINT_NAME = flags.DEFINE_string("endpoint_name", None, "endpoint name", required=True)
    
    os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"] = "path-to-ca-cert-file.cert"
    
    def get_sts_token(endpoint_hostname):
      creds = None
      try:
        creds, _ = google.auth.default()
        creds = creds.with_gdch_audience("https://"+endpoint_hostname+":443")
        req = requests.Request()
        creds.refresh(req)
        print("Got token: ")
        print(creds.token)
      except Exception as e:
        print("Caught exception" + str(e))
        raise e
      return creds.token
    
    # predict_client_secure builds a client that requires TLS
    def predict_client_secure(endpoint_hostname, token):
      with open(os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"], 'rb') as f:
        channel_creds = grpc.ssl_channel_credentials(f.read())
    
      call_creds = grpc.access_token_call_credentials(token)
    
      creds = grpc.composite_channel_credentials(
        channel_creds,
        call_creds,
      )
    
      client = prediction_service.PredictionServiceClient(
          transport=prediction_service.transports.grpc.PredictionServiceGrpcTransport(
           channel=grpc.secure_channel(target=endpoint_hostname+":443", credentials=creds)))
    
      return client
    
    def predict_func(client, instances):
      # The endpoint resource name is required for authorization.
      # A wrong value might lead to an access denied error.
      endpoint_resource_name = f"projects/{_PROJECT_NAME.value}/locations/{_PROJECT_NAME.value}/endpoints/{_ENDPOINT_NAME.value}"
      resp = client.predict(
        endpoint=endpoint_resource_name,
        instances=instances,
        metadata=[("x-vertex-ai-endpoint-id", _ENDPOINT_NAME.value)]
      )
      print(resp)
    
    def main(argv: Sequence[str]):
      del argv  # Unused.
      with open(_INPUT.value) as json_file:
          data = json.load(json_file)
          instances = [json_format.ParseDict(s, Value()) for s in data["instances"]]
    
      token = get_sts_token(_ENDPOINT_HOSTNAME.value)
      client = predict_client_secure(_ENDPOINT_HOSTNAME.value, token)
      predict_func(client=client, instances=instances)
    
    if __name__=="__main__":
      app.run(main)
    
  6. Speichern Sie das Python-Skript unter einem Namen wie prediction.py.

  7. Senden Sie die Anfrage an den Vorhersageserver:

    python SCRIPT_NAME --input request.json \
        --endpoint_hostname ENDPOINT_FQDN \
        --project_name PROJECT_NAME \
        --endpoint_name ENDPOINT_NAME \
    

    Ersetzen Sie Folgendes:

    • SCRIPT_NAME: der Name des Python-Skripts, z. B. prediction.py.
    • ENDPOINT_FQDN: der voll qualifizierte Domainname des Endpunkts für die Onlinevorhersageanfrage.
    • PROJECT_NAME: der Projektname des Endpunkts.
    • ENDPOINT_NAME: der Name des Endpunkts, der aufgerufen werden soll.

Bei erfolgreicher Ausführung erhalten Sie eine JSON-Antwort auf Ihre Onlinevorhersageanfrage. Weitere Informationen zu Antworten finden Sie unter Details zum Antworttext.