בפריסה מתגלגלת, מודל שנפרס מוחלף בגרסה חדשה של אותו מודל. המודל החדש משתמש מחדש במשאבי החישוב מהמודל הקודם.
בבקשה לפריסה מתגלגלת, הערכים של חלוקת התנועה ושל dedicatedResources זהים לאלה של הפריסה הקודמת. אחרי שהפריסה המתגלגלת מסתיימת, פיצול התנועה מתעדכן כך שכל התנועה מהפריסה הקודמת DeployedModel מועברת לפריסה החדשה.
שדות אחרים שניתנים להגדרה ב-DeployedModel (כמו serviceAccount, disableContainerLogging ו-enableAccessLogging) מוגדרים כברירת מחדל לאותם ערכים כמו ב-DeployedModel הקודם. עם זאת, אפשר גם לציין ערכים חדשים בשדות האלה.
כשפורסים מודל באמצעות פריסה מתגלגלת, נוצר DeployedModel חדש. ה-DeployedModel החדש מקבל מזהה חדש ששונה מהמזהה של ה-
הקודם. הוא גם מקבל ערך חדש של revisionNumber בשדה rolloutOptions.
אם יש כמה פריסות מתגלגלות שמטרגטות את אותם משאבי גיבוי, המשאב DeployedModel עם הערך הגבוה ביותר של revisionNumber נחשב למצב הסופי המיועד.
במהלך הפריסה המתגלגלת, כל העותקים הקיימים של DeployedModel הקודם מוחלפים בעותקים של DeployedModel החדש. התהליך הזה מתבצע במהירות, והרפליקות מתעדכנות בכל פעם שיש לפריסה מספיק רפליקות זמינות או מספיק קיבולת לשימוש חורג כדי להפעיל רפליקות נוספות.
בנוסף, ככל שההשקה ההדרגתית מתקדמת, התנועה של DeployedModel הישן מועברת בהדרגה ל-DeployedModel החדש. התנועה מאוזנת באופן יחסי למספר העותקים של DeployedModel שמוכנים להצגת מודעות.
אם הרפליקות החדשות של הפריסה המצטברת אף פעם לא מוכנות כי נתיב הבדיקה שלהן מחזיר באופן עקבי קוד תגובה שאינו 200, התנועה לא מועברת לרפליקות שלא מוכנות. במקרה כזה, הפריסה המתגלגלת תיכשל בסופו של דבר, והרפליקות יוחזרו ל-DeployedModel הקודם.
התחלת פריסה הדרגתית
כדי להתחיל פריסה מדורגת, כוללים את השדה rolloutOptions בבקשת פריסת המודל, כמו בדוגמה הבאה.
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- LOCATION_ID: האזור שבו משתמשים ב-Agent Platform.
- PROJECT_ID: מזהה הפרויקט. .
- ENDPOINT_ID: המזהה של נקודת הקצה.
- MODEL_ID: המזהה של המודל שרוצים לפרוס.
-
PREVIOUS_DEPLOYED_MODEL: מזהה
DeployedModelשל מודל באותה נקודת קצה. כאן מציינים אתDeployedModelשמשאבי הגיבוי שלו ישמשו לשימוש חוזר. אפשר להתקשר אלGetEndpointכדי לקבל רשימה של מודלים שנפרסו בנקודת קצה, יחד עם המזהים המספריים שלהם. - MAX_UNAVAILABLE_REPLICAS: מספר העותקים של המודל שאפשר להשבית במהלך הפריסה המתגלגלת.
- MAX_SURGE_REPLICAS: מספר העותקים הנוספים של המודל שאפשר להפעיל במהלך הפריסה המתגלגלת. אם הערך מוגדר לאפס, המערכת משתמשת רק בקיבולת הקיימת.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel
תוכן בקשת JSON:
{
"deployedModel": {
"model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID",
"rolloutOptions": {
"previousDeployedModel": "PREVIOUS_DEPLOYED_MODEL",
"maxUnavailableReplicas": "MAX_UNAVAILABLE_REPLICAS",
"maxSurgeReplicas": "MAX_SURGE_REPLICAS"
}
}
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אמורים לקבל קוד סטטוס של הצלחה (2xx) ותגובה ריקה.
אם רוצים, אפשר להחליף את maxSurgeReplicas ואת maxUnavailableReplicas, או את שניהם, בערכי אחוזים, כמו בדוגמה הבאה.
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- MAX_UNAVAILABLE_PERCENTAGE: אחוז העותקים של המודל שאפשר להשבית במהלך הפריסה המתגלגלת.
- MAX_SURGE_PERCENTAGE: אחוז העותקים הנוספים של המודל שאפשר להפעיל במהלך פריסה מדורגת. אם הערך מוגדר לאפס, המערכת משתמשת רק בקיבולת הקיימת.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel
תוכן בקשת JSON:
{
"deployedModel": {
"model": "projects/PROJECT/locations/LOCATION_ID/models/MODEL_ID",
"rolloutOptions": {
"previousDeployedModel": "PREVIOUS_DEPLOYED_MODEL",
"maxUnavailablePercentage": "MAX_UNAVAILABLE_PERCENTAGE",
"maxSurgePercentage": "MAX_SURGE_PERCENTAGE"
}
}
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אמורים לקבל קוד סטטוס של הצלחה (2xx) ותגובה ריקה.
החזרה לגרסה קודמת של פריסה מתגלגלת
כדי לבטל השקה הדרגתית, מתחילים השקה הדרגתית חדשה של המודל הקודם, ומשתמשים במזהה DeployedModel של ההשקה ההדרגתית המתבצעת כרגע בתור previousDeployedModel.
כדי לקבל את מזהה DeployedModel לפריסה מתמשכת, מגדירים את הפרמטר allDeploymentStates=true בקריאה ל-GetEndpoint, כמו בדוגמה הבאה.
REST
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- LOCATION_ID: האזור שבו משתמשים ב-Agent Platform.
- PROJECT_ID: מזהה הפרויקט. .
- ENDPOINT_ID: המזהה של נקודת הקצה.
ה-method של ה-HTTP וכתובת ה-URL:
GET https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID?allDeploymentStates=true
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"name": "projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID",
"displayName": "rolling-deployments-endpoint",
"deployedModels": [
{
"id": "2718281828459045",
"model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID@1",
"displayName": "rd-test-model",
"createTime": "2024-09-11T21:37:48.522692Z",
"dedicatedResources": {
"machineSpec": {
"machineType": "e2-standard-2"
},
"minReplicaCount": 5,
"maxReplicaCount": 5
},
"modelVersionId": "1",
"state": "BEING_DEPLOYED"
}
],
"etag": "AMEw9yMs3TdZMn8CUg-3DY3wS74bkIaTDQhqJ7-Ld_Zp7wgT8gsEfJlrCOyg67lr9dwn",
"createTime": "2024-09-11T21:22:36.588538Z",
"updateTime": "2024-09-11T21:27:28.563579Z",
"dedicatedEndpointEnabled": true,
"dedicatedEndpointDns": "ENDPOINT_ID.LOCATION_ID-PROJECT_ID.prediction.vertexai.goog"
}
מגבלות
- ה-
DeployedModelהקודם צריך להיות באותה נקודת קצה כמו ה-DeployedModelהחדש. - אי אפשר ליצור כמה פריסות מתגלגלות עם אותו
previousDeployedModel. - אי אפשר ליצור פריסות מתגלגלות על גבי
DeployedModelשלא נפרס במלואו. חריג: אםpreviousDeployedModelהוא פריסה מתגלגלת בתהליך, אפשר ליצור פריסה מתגלגלת חדשה מעליו. כך אפשר לבצע רולבק לפריסות שמתחילות להיכשל. - מודלים קודמים לא מבוטלים אוטומטית אחרי פריסה מתגלגלת שהושלמה בהצלחה. אפשר לבטל פריסה של המודל באופן ידני. כשמבטלים את הפריסה של המודל הקודם, צריך לחכות לפחות 10-15 דקות אחרי שמיגרציית התנועה מסתיימת, לפני ששולחים את בקשת ביטול הפריסה. זאת כדי לאפשר לחיבורים בתהליך להסתיים ולעדכוני הניתוב להסתנכרן באופן מלא.
- בפריסות מדורגות בנקודות קצה ציבוריות משותפות, הערכים של
predictRouteו-healthRouteשל המודל החדש צריכים להיות זהים לאלה של המודל הקודם. - אי אפשר להשתמש בפריסות מדורגות עם אירוח משותף של מודלים.
- אי אפשר להשתמש בהפצה הדרגתית למודלים שנדרשים להם הסברים אונליין.