Mit dem Onlinevorhersagedienst von Vertex AI können Sie synchrone Anfragen an Ihren eigenen Vorhersagemodellendpunkt senden.
Auf dieser Seite erfahren Sie, wie Sie Anfragen an Ihr Modell senden, damit es Onlinevorhersagen mit niedriger Latenz bereitstellen kann.
Hinweise
Bevor Sie die Online Prediction API verwenden können, 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 Projekt-IAM-Administrator, Ihnen die Rolle „Vertex AI Prediction User“ (
vertex-ai-prediction-user
) zuzuweisen, um die Berechtigungen zu erhalten, die Sie für den Zugriff auf die Onlinevorhersage 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 ausgerichtet ist.
Erstellen Sie den Vorhersagecluster und sorgen Sie dafür, dass in Ihrem Projekt eingehender externer Traffic zulässig ist.
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
mit dem vollständig qualifizierten Domainnamen des Endpunkts im FeldendpointFQDN
angezeigt werden. Registrieren Sie diesen Endpunkt-URL-Pfad, um ihn für Ihre Anfragen zu verwenden.
Umgebungsvariablen festlegen
Wenn Sie eine Anfrage an Ihren Modellendpunkt mit einem Python-Skript senden möchten und ein Dienstkonto in Ihrem Projekt einrichten, um autorisierte API-Aufrufe programmatisch auszuführen, können Sie Umgebungsvariablen im Skript definieren, um beim Ausführen auf Werte wie die Dienstkontoschlüssel zuzugreifen.
So legen Sie erforderliche 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_FILENAME
durch 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_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 stellen Sie eine curl
-Anfrage:
Erstellen Sie eine JSON-Datei mit dem Namen
request.json
für den Anfragetext.Sie müssen die 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:443/v1/model:predict -d @request.json
Ersetzen Sie Folgendes:
TOKEN
: Das Authentifizierungstoken, das Sie erhalten haben.ENDPOINT
: Ihr Modellendpunkt 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 über ein Python-Skript:
Erstellen Sie eine JSON-Datei mit dem Namen
request.json
für den Anfragetext.Sie müssen die Eingabe für die Onlinevorhersage mit den Details des Anfragetexts hinzufügen und formatieren, die der Zielcontainer erfordert.
Installieren Sie die aktuelle Version der Vertex AI Platform-Clientbibliothek.
Erforderliche Umgebungsvariablen in einem Python-Skript festlegen
Fügen Sie dem von Ihnen 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 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) _HOST = flags.DEFINE_string("host", None, "Prediction endpoint", required=True) _ENDPOINT_ID = flags.DEFINE_string("endpoint_id", None, "endpoint id", required=True) os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"] = "path-to-ca-cert-file.cert" # ENDPOINT_RESOURCE_NAME is a placeholder value that doesn't affect prediction behavior. ENDPOINT_RESOURCE_NAME="projects/000000000000/locations/us-central1/endpoints/00000000000000" def get_sts_token(host): creds = None try: creds, _ = google.auth.default() creds = creds.with_gdch_audience(host+":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(host, 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=host+":443", credentials=creds))) return client def predict_func(client, instances): resp = client.predict( endpoint=ENDPOINT_RESOURCE_NAME, instances=instances, metadata=[("x-vertex-ai-endpoint-id", _ENDPOINT_ID.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(_HOST.value) client = predict_client_secure(_HOST.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
.Anfrage an den Vorhersageserver senden:
python SCRIPT_NAME --input request.json \ --host ENDPOINT \ --endpoint_id ENDPOINT_ID \
Ersetzen Sie Folgendes:
SCRIPT_NAME
: Der Name des Python-Skripts, z. B.prediction.py
.ENDPOINT
: Ihr Modellendpunkt für die Onlinevorhersageanfrage.ENDPOINT_ID
: Der Wert der Endpunkt-ID.
Bei erfolgreicher Ausführung erhalten Sie eine JSON-Antwort auf Ihre Onlinevorhersageanfrage. Weitere Informationen zu Antworten finden Sie unter Details zum Antworttext.