Mit dem Online-Vorhersagedienst von Vertex AI können Sie synchrone Anfragen an Ihren eigenen Vorhersagemodell-Endpunkt senden.
Auf dieser Seite erfahren Sie, wie Sie Anfragen an Ihr Modell senden, damit es Onlinevorhersagen mit niedriger Latenz bereitstellen kann.
Hinweis
Für die Verwendung der Online Prediction API benötigen Sie ein Projekt und die entsprechenden Anmeldedaten.
Führen Sie die folgenden Schritte aus, bevor Sie eine Onlinevorhersage abrufen:
- Projekt für Vertex AI einrichten
Bitten Sie Ihren IAM-Projektadministrator, Ihnen die Rolle „Vertex AI Prediction User“ (
vertex-ai-prediction-user) zuzuweisen, um die Berechtigungen zu erhalten, die Sie für den Zugriff auf Online-Vorhersagen benötigen.Informationen zu dieser Rolle finden Sie unter IAM-Berechtigungen vorbereiten.
Erstellen und trainieren Sie ein Vorhersagemodell, das auf einen der unterstützten Container abzielt.
Erstellen Sie den Vorhersagecluster und achten Sie darauf, dass Ihr Projekt eingehenden externen Traffic zulässt.
Details zur benutzerdefinierten
Endpoint-Ressource Ihres Vorhersagemodells anzeigen: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
statusangezeigt werden, wobei der voll qualifizierte Domainname des Endpunkts im FeldendpointFQDNangezeigt 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 Ihren Modellendpunkt senden möchten und ein Dienstkonto in Ihrem Projekt eingerichtet haben, 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:
Erstellen Sie ein JupyterLab-Notebook, um mit der Online Prediction API zu interagieren.
Erstellen Sie ein Python-Skript im JupyterLab-Notebook.
Fügen Sie dem Python-Script den folgenden Code hinzu:
import os os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "APPLICATION_DEFAULT_CREDENTIALS_FILENAME"Ersetzen Sie
APPLICATION_DEFAULT_CREDENTIALS_FILENAMEdurch den Namen der JSON-Datei, die die von Ihnen im Projekt erstellten Dienstkontoschlüssel enthält, z. B.my-service-key.json.Speichern Sie das Python-Skript unter einem Namen, z. B.
prediction.py.Führen Sie das Python-Skript aus, um die Umgebungsvariablen festzulegen:
python SCRIPT_NAMEErsetzen Sie
SCRIPT_NAMEdurch 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 stellen Sie eine curl-Anfrage:
Erstellen Sie eine JSON-Datei mit dem Namen
request.jsonfür den Anfragetext.Sie müssen Ihre Eingabe für die Onlinevorhersage mit den Details des Anfragetexts hinzufügen und formatieren, die der Zielcontainer benötigt.
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.jsonErsetzen Sie Folgendes:
TOKEN: das von Ihnen abgerufene Authentifizierungstoken.ENDPOINT_HOSTNAME: der FQDN Ihres Modellendpunkts für die Onlinevorhersageanfrage.
Wenn die Anfrage erfolgreich ist, 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 Online Prediction-Dienst über ein Python-Skript:
Erstellen Sie eine JSON-Datei mit dem Namen
request.jsonfür den Anfragetext.Sie müssen Ihre Eingabe für die Onlinevorhersage mit den Details des Anfragetexts hinzufügen und formatieren, die der Zielcontainer benötigt.
Installieren Sie die aktuelle Version der Vertex AI Platform-Clientbibliothek.
Legen Sie die erforderlichen Umgebungsvariablen in einem Python-Skript fest.
Fügen Sie dem von Ihnen erstellten Python-Script 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) 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)Speichern Sie das Python-Skript unter einem Namen, z. B.
prediction.py.Stellen 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: Voll qualifizierter Domainname des Endpunkts für die Onlinevorhersageanfrage.PROJECT_NAME: Projektname des Endpunkts.ENDPOINT_NAME: der Name des aufzurufenden Endpunkts.
Wenn die Anfrage erfolgreich ist, erhalten Sie eine JSON-Antwort auf Ihre Onlinevorhersageanfrage. Weitere Informationen zu Antworten finden Sie unter Details zum Antworttext.