שירות החיזוי אונליין של Vertex AI מאפשר לכם לשלוח בקשות סינכרוניות לנקודת הקצה של מודל החיזוי שלכם.
בדף הזה מוסבר איך לשלוח בקשות למודל כדי שהוא יוכל לספק תחזיות אונליין עם זמן אחזור נמוך.
לפני שמתחילים
כדי להתחיל להשתמש ב-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 כדי ליצור אינטראקציה עם 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.
שליחת בקשה לנקודת קצה
שליחת בקשה לנקודת הקצה של המודל כדי לקבל חיזוי אונליין:
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
כדי להשתמש בשירות חיזוי אונליין מסקריפט 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) 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)שומרים את סקריפט 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: שם דומיין שמוגדר במלואו של נקודת הקצה של בקשת החיזוי אונליין. -
PROJECT_NAME: שם הפרויקט של נקודת הקצה. -
ENDPOINT_NAME: השם של נקודת הקצה שאליה מתקשרים.
-
אם הפעולה בוצעה ללא שגיאות, תקבלו תגובת JSON לבקשת החיזוי אונליין. מידע נוסף על תגובות זמין במאמר פרטים על גוף התגובה.