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:
- Richten Sie ein Projekt für Vertex AI ein.
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.
Erstellen und trainieren Sie ein Vorhersagemodell, das auf einen der unterstützten Container ausgerichtet ist.
Erstellen Sie den Vorhersagecluster und prüfen Sie, ob Ihr Projekt eingehenden externen Traffic zulässt.
Details der benutzerdefinierten Ressource
EndpointIhres 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
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 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:
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-Skript 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 Dienstkontoschlüssel enthält, die Sie erstellt haben im Projekt, z. B.my-service-key.json.Speichern Sie das Python-Skript unter einem Namen wie
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 senden 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 erfordert.
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 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:
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 erfordert.
Installieren Sie die neueste Version der Vertex AI Platform-Clientbibliothek.
Legen Sie die erforderlichen Umgebungsvariablen in einem Python-Skript fest.
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)Speichern Sie das Python-Skript unter einem Namen wie
prediction.py.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.