שירות החיזוי אונליין של Vertex AI ב-Google Distributed Cloud (GDC) עם air gap מאפשר לשלוח בקשות סינכרוניות לנקודת הקצה של מודל החיזוי שנפרס. כדי לשלוח בקשות לחיזוי, אתם יכולים להשתמש ב-curl או בסקריפט של Python כדי להציג חיזויים אונליין עם זמן אחזור קצר.
לפני שמתחילים
כדי להשתמש ב-Online Prediction API, צריך פרויקט ופרטי כניסה מתאימים.
כדי לקבל חיזוי אונליין, צריך לבצע את הפעולות הבאות:
- הגדרת פרויקט ל-Vertex AI.
כדי לקבל את ההרשאות שנדרשות לגישה לחיזוי אונליין, צריך לבקש מהאדמין של הפרויקט ב-IAM להקצות לכם את התפקיד "משתמש בחיזוי ב-Vertex AI" (
vertex-ai-prediction-user).למידע על התפקיד הזה, ראו הכנת הרשאות IAM.
יוצרים ומאמנים מודל חיזוי שמטרגט את אחד מהקונטיינרים הנתמכים.
יוצרים את אשכול החיזוי ומוודאים שהפרויקט מאפשר תנועה חיצונית נכנסת.
מציגים את הפרטים של המשאב בהתאמה אישית
Endpointשל מודל החיזוי:kubectl --kubeconfig PREDICTION_CLUSTER_KUBECONFIG get endpoint PREDICTION_ENDPOINT -n PROJECT_NAMESPACE -o jsonpath='{.status.endpointFQDN}'מחליפים את מה שכתוב בשדות הבאים:
-
PREDICTION_CLUSTER_KUBECONFIG: הנתיב לקובץ kubeconfig באשכול החיזוי. -
PREDICTION_ENDPOINT: השם של נקודת הקצה. -
PROJECT_NAMESPACE: השם של מרחב השמות של פרויקט החיזוי.
הפלט צריך להציג את השדה
status, שמציג את שם הדומיין שמוגדר במלואו של נקודת הקצה בשדהendpointFQDN. כדי להשתמש בנתיב כתובת ה-URL של נקודת הקצה בבקשות, צריך לרשום אותו.-
הגדרת משתני הסביבה
אם אתם רוצים לשלוח בקשה לנקודת הקצה של המודל באמצעות סקריפט Python ולהגדיר חשבון שירות בפרויקט כדי לבצע קריאות ל-API באופן פרוגרמטי, אתם יכולים להגדיר משתני סביבה בסקריפט כדי לגשת לערכים כמו מפתחות של חשבון השירות בזמן הריצה.
כדי להגדיר את משתני הסביבה הנדרשים בסקריפט Python:
יוצרים JupyterLab notebook כדי לקיים אינטראקציה עם Online Prediction API.
יוצרים סקריפט Python ב-notebook של JupyterLab.
מוסיפים את הקוד הבא לסקריפט של Python:
import os os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "APPLICATION_DEFAULT_CREDENTIALS_FILENAME"מחליפים את
APPLICATION_DEFAULT_CREDENTIALS_FILENAMEבשם של קובץ ה-JSON שמכיל את המפתחות של חשבון השירות שיצרתם בפרויקט, למשלmy-service-key.json.שומרים את הסקריפט של Python בשם כלשהו, למשל
prediction.py.מריצים את הסקריפט של Python כדי להגדיר את משתני הסביבה:
python SCRIPT_NAMEמחליפים את
SCRIPT_NAMEבשם שנתתם לסקריפט Python, למשלprediction.py.
שליחת בקשה לנקודת קצה (endpoint)
שולחים בקשה לנקודת הקצה של המודל כדי לקבל חיזוי אונליין:
curl
כדי לשלוח בקשה ל-curl:
יוצרים קובץ JSON בשם
request.jsonלגוף הבקשה.צריך להוסיף את הקלט לחיזוי אונליין ולעצב אותו עם פרטי גוף הבקשה שנדרשים למאגר היעד.
שולחים את הבקשה:
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מחליפים את מה שכתוב בשדות הבאים:
-
TOKEN: אסימון האימות שקיבלתם. -
ENDPOINT_HOSTNAME: ה-FQDN של נקודת הקצה של המודל לבקשת החיזוי אונליין.
-
אם הפעולה בוצעה ללא שגיאות, תקבלו תגובת JSON לבקשת החיזוי אונליין.
הפלט הבא מציג דוגמה:
{
"predictions": [[-357.10849], [-171.621658]
]
}
למידע נוסף על תגובות, ראו פרטים על גוף התגובה.
Python
כדי להשתמש בשירות Online Prediction מסקריפט Python:
יוצרים קובץ JSON בשם
request.jsonלגוף הבקשה.צריך להוסיף את הקלט לחיזוי אונליין ולעצב אותו עם פרטי גוף הבקשה שנדרשים למאגר היעד.
מתקינים את הגרסה העדכנית של ספריית הלקוח של Vertex AI Platform.
מוסיפים את הקוד הבא לסקריפט Python שיצרתם:
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)שומרים את הסקריפט של Python בשם כלשהו, למשל
prediction.py.שולחים את הבקשה לשרת החיזוי:
python SCRIPT_NAME --input request.json \ --endpoint_hostname ENDPOINT_FQDN \ --project_name PROJECT_NAME \ --endpoint_name ENDPOINT_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
SCRIPT_NAME: השם של הסקריפט ב-Python, למשלprediction.py. -
ENDPOINT_FQDN: שם הדומיין שמוגדר במלואו (FQDN) של נקודת הקצה לבקשת החיזוי אונליין. -
PROJECT_NAME: שם הפרויקט של נקודת הקצה. -
ENDPOINT_NAME: השם של נקודת הקצה שאליה תתבצע הקריאה.
-
אם הפעולה בוצעה ללא שגיאות, תקבלו תגובת JSON לבקשת החיזוי אונליין. למידע נוסף על תגובות, ראו פרטים על גוף התגובה.