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

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

בבקשת הפריסה המתגלגלת, הערכים של חלוקת התנועה ושל 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: האזור שבו משתמשים ב-Agent Platform.
  • PROJECT_ID: [מזהה הפרויקט](/resource-manager/docs/creating-managing-projects#identifiers). .
  • 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: [מזהה הפרויקט](/resource-manager/docs/creating-managing-projects#identifiers). .
  • 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 עבור המודל החדש צריכים להיות זהים לאלה של המודל הקודם.
  • פריסות מתגלגלות לא תואמות לאירוח משותף של מודלים.
  • אי אפשר להשתמש בהפצה מדורגת למודלים שנדרשים להם הסברים אונליין.