בשרתים מודרניים של מודלי שפה גדולים (LLM), מיושמות ומתוחזקות כמה דרכי הסקה למטרות שונות. בתרחישי השימוש האלה, מומלץ להשתמש בשיטה invoke כדי לגשת לכמה נתיבים בפריסה אחת של Vertex Inference.
אפשר להפעיל את השיטה invoke כשמעלים Model על ידי הגדרת invokeRoutePrefix כ-"/*". אחרי פריסת המודל לנקודת קצה, אפשר לגשת לכל נתיב שאינו נתיב הבסיס בשרת המודל באמצעות קריאת HTTP להפעלה.
לדוגמה, הנתיב '/invoke/foo/bar' יועבר כ-'/foo/bar' לשרת המודל.
התכונה הזו נמצאת בשלב של גרסת טרום-השקה (Preview) לציבור, ויש לה את המגבלות הבאות:
- אפשר לפרוס מודלים שמופעלים באמצעות קריאה לפונקציה רק בנקודת קצה ייעודית.
- יש תמיכה רק בקריאות HTTP למודלים שמופעלת בהם הפעלה, ואין תמיכה ב-RPC.
- כשמעלים מודל, אפשר להגדיר רק אחת מהאפשרויות
predictRouteאוinvokeRoutePrefix. ערך ברירת המחדל הואpredictRoute. אם השדהinvokeRoutePrefixמוגדר במודל, כל המסלולים האחרים של Vertex מלבדinvoke(למשל:predict,:rawPredictוכו') יושבתו אחרי הפריסה. - הערך המותר היחיד ל-
invokeRoutePrefixהוא"/*", והוא חושף את כל הנתיבים שאינם נתיבי הבסיס. מומלץ לנקוט משנה זהירות לגבי מסלולים שלא רוצים לחשוף.
העלאת מודל עם הפעלת קריאה
from google.cloud import aiplatform
invoke_enabled_model = aiplatform.Model.upload(
display_name="invoke-enabled-model",
serving_container_image_uri=IMAGE_URI,
serving_container_invoke_route_prefix="/*",
serving_container_health_route=HEALTH_ROUTE,
serving_container_environment_variables={"KEY": "VALUE"},
serving_container_args=[],
sync=True,
)
פריסה של מודל עם הפעלה
dedicated_endpoint = aiplatform.Endpoint.create(
display_name="dedicated-endpoint-for-invoke-enabled-model",
dedicated_endpoint_enabled=True,
sync=True,
)
dedicated_endpoint.deploy(
model=invoke_enabled_model,
traffic_percentage=100,
machine_type=MACHINE_TYPE,
accelerator_type=ACCELERATOR_TYPE,
accelerator_count=1,
max_replica_count=1,
)
שליחת בקשת הסקה במסלול מותאם אישית שרירותי
הפעלת מסלול מאפשרת גישה לכל נתיבי הבקשות שאינם נתיבי הבסיס בפריסה.
לדוגמה, המחרוזת /invoke/foo/bar תועבר כ-/foo/bar לשרת של המודל. יש שתי דרכים לגשת למסלול.
בקשת ניתוב מותאמת אישית לנקודת קצה ייעודית
הפעלת בקשה לנקודת קצה ייעודית תנותב לאחד מהמודלים שנפרסו על סמך הגדרת חלוקת התנועה.
def invoke_tabular_sample(
project: str,
location: str,
endpoint_id: str,
request_path: str,
http_request_body: Dict[str, Any],
stream: bool = False,
):
aiplatform.init(project=project, location=location)
dedicated_endpoint = aiplatform.Endpoint(endpoint_id)
if stream:
for chunk in dedicated_endpoint.invoke(
request_path=request_path,
body=json.dumps(http_request_body).encode("utf-8"),
headers={"Content-Type": "application/json"},
stream=True,
):
print(chunk)
else:
response = dedicated_endpoint.invoke(
request_path=request_path,
body=json.dumps(http_request_body).encode("utf-8"),
headers={"Content-Type": "application/json"},
)
print(response)
בקשת ניתוב בהתאמה אישית למודל שפרסתם
אפשר לשלוח בקשת הפעלה כדי לטרגט מודל ספציפי שפרסתם. הוא יכול להיות שימושי לבדיקה ולניפוי באגים.
def invoke_direct_deployed_model_inference_tabular_sample(
project: str,
location: str,
endpoint_id: str,
request_path: str,
http_request_body: Dict[str, Any],
deployed_model_id: str,
stream: bool = False,
):
aiplatform.init(project=project, location=location)
dedicated_endpoint = aiplatform.Endpoint(endpoint_id)
if stream:
for chunk in dedicated_endpoint.invoke(
request_path=request_path,
body=json.dumps(http_request_body).encode("utf-8"),
headers={"Content-Type": "application/json"},
deployed_model_id=deployed_model_id,
stream=True,
):
print(chunk)
else:
response = dedicated_endpoint.invoke(
request_path=request_path,
body=json.dumps(http_request_body).encode("utf-8"),
headers={"Content-Type": "application/json"},
deployed_model_id=deployed_model_id,
)
print(response)