שימוש בהפצה מתגלגלת כדי להחליף מודל שהופעל

בפריסה מתגלגלת, מודל שנפרס מוחלף בגרסה חדשה של אותו מודל. המודל החדש משתמש מחדש במשאבי המחשוב מהמודל הקודם.

בבקשת הפריסה המתגלגלת, הערכים של חלוקת התנועה ושל dedicatedResources זהים לאלה של הפריסה הקודמת. אחרי שההשקה ההדרגתית מסתיימת, חלוקת התנועה מתעדכנת ומוצג בה שהתנועה מהפריסה הקודמת DeployedModel עברה לפריסה החדשה.

שדות אחרים שאפשר להגדיר ב-DeployedModel (כמו serviceAccount,‏ disableContainerLogging ו-enableAccessLogging) מוגדרים כברירת מחדל לאותם ערכים כמו בשדה DeployedModel הקודם. עם זאת, אפשר לציין ערכים חדשים לשדות האלה.

כשפורסים מודל באמצעות פריסה מתגלגלת, נוצר DeployedModel חדש. ה-DeployedModel החדש מקבל מזהה חדש ששונה מהמזהה של ה-DeployedModel הקודם. הוא גם מקבל ערך חדש של revisionNumber בשדה rolloutOptions.

אם יש כמה פריסות מתגלגלות שמטרגטות את אותם משאבי גיבוי, DeployedModel עם revisionNumber הכי גבוה נחשב למצב הסופי המיועד.

במהלך הפריסה המתגלגלת, כל העותקים הקיימים של DeployedModel הקודם מוחלפים בעותקים של DeployedModel החדש. התהליך הזה מתבצע במהירות, והרפליקות מתעדכנות בכל פעם שיש לפריסה מספיק רפליקות זמינות או מספיק קיבולת עודפת כדי להפעיל רפליקות נוספות.

בנוסף, ככל שההשקה ההדרגתית מתקדמת, תנועת הגולשים של DeployedModel הישן מועברת בהדרגה ל-DeployedModel החדש. התנועה מאוזנת באופן יחסי למספר העותקים של כל DeployedModel שמוכנים להצגה.

אם הרפליקות החדשות של הפריסה המתגלגלת אף פעם לא מוכנות כי נתיב הבדיקה שלהן מחזיר באופן עקבי קוד תגובה שאינו 200, התנועה לא מועברת לרפליקות הלא מוכנות האלה. במקרה כזה, הפריסה ההדרגתית תיכשל בסופו של דבר, והרפליקות יוחזרו ל-DeployedModel הקודם.

התחלת פריסה מתגלגלת

כדי להתחיל פריסה מתגלגלת, כוללים את השדה rolloutOptions בבקשת פריסת המודל, כמו בדוגמה הבאה.

REST

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

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