שיתוף משאבים בין פריסות

מודל של Gemini Enterprise Agent Platform נפרס כברירת מחדל במכונה וירטואלית (VM) משלו. פלטפורמת Gemini Enterprise Agent מאפשרת אירוח משותף של מודלים באותה מכונה וירטואלית, מה שמאפשר את היתרונות הבאים:

  • שיתוף משאבים בין כמה פריסות.
  • פרסום מודלים במחיר משתלם.
  • שיפור בניצול הזיכרון ומשאבי החישוב.

במדריך הזה מוסבר איך לשתף משאבים בין כמה פריסות ב-Gemini Enterprise Agent Platform.

סקירה כללית

התמיכה באירוח משותף של מודלים מציגה את הרעיון של DeploymentResourcePool, שמקבץ פריסות של מודלים שמשתפים משאבים במכונה וירטואלית אחת. אפשר לפרוס כמה נקודות קצה באותה מכונה וירטואלית בתוך DeploymentResourcePool. לכל נקודת קצה יש מודל אחד או יותר שפרוסים בה. אפשר לקבץ את המודלים שנפרסו לנקודת קצה מסוימת תחת אותו DeploymentResourcePool או תחת אחר.

בדוגמה הבאה יש ארבעה מודלים ושתי נקודות קצה:

מודלים של אירוח משותף מכמה נקודות קצה

האפליקציות Model_A, Model_B ו-Model_C נפרסות ב-Endpoint_1 והתנועה מנותבת לכולן. ‫Model_D נפרס ב-Endpoint_2, שמקבל 100% מהתנועה לנקודת הקצה הזו. במקום להקצות כל מודל למכונה וירטואלית נפרדת, אפשר לקבץ את המודלים באחת מהדרכים הבאות:

  • קיבוץ של Model_A ו-Model_B כדי לשתף מכונה וירטואלית, מה שהופך אותם לחלק מ-DeploymentResourcePool_X.
  • לקבץ את Model_C ו-Model_D (שלא נמצאים כרגע באותה נקודת קצה) כדי לשתף מכונה וירטואלית, וכך להפוך אותם לחלק מ-DeploymentResourcePool_Y.

מאגרי משאבים שונים לפריסה לא יכולים לשתף מכונה וירטואלית.

לתשומת ליבכם

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

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

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

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

מגבלות

יש מגבלות מסוימות כשפורסים מודלים עם שיתוף משאבים מופעל:

פריסת מודל

כדי לפרוס מודל ל-DeploymentResourcePool, מבצעים את השלבים הבאים:

  1. אם צריך, יוצרים מאגר משאבים לפריסה.
  2. אם צריך, יוצרים נקודת קצה.
  3. מאחזרים את מזהה נקודת הקצה.
  4. פורסים את המודל בנקודת הקצה במאגר משאבי הפריסה.

יצירת מאגר משאבים לפריסה

אם אתם פורסים מודל ל-DeploymentResourcePool קיים, דלגו על השלב הזה:

משתמשים ב-CreateDeploymentResourcePool כדי ליצור מאגר משאבים.

Cloud Console

  1. נכנסים לדף Agent Platform Deployment Resource Pools במסוף Google Cloud .

    כניסה למאגרי משאבים לפריסה

  2. לוחצים על יצירה וממלאים את הטופס (שמוצג בהמשך).

    יצירת טופס של מאגר משאבים לפריסה, עם הגדרה של מספר צמתים מינימלי ומקסימלי ל-1 והגדרה של שינוי גודל אוטומטי של צמתים לפי סף CPU ל-60

REST

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

  • ‫LOCATION_ID: האזור שבו משתמשים בפלטפורמת הסוכנים.
  • ‫PROJECT_ID: מזהה הפרויקט. .
  • ‫MACHINE_TYPE: אופציונלי. משאבי המכונה שמשמשים לכל צומת בפריסה הזו. הגדרת ברירת המחדל היא n1-standard-2. מידע נוסף על סוגי מכונות
  • ‫ACCELERATOR_TYPE: סוג המאיץ שיצורף למכונה. אופציונלי אם לא מציינים את ACCELERATOR_COUNT או אם הערך שלו הוא אפס. לא מומלץ לשימוש במודלים של AutoML או במודלים שעברו אימון בהתאמה אישית ומשתמשים בתמונות שלא מבוססות על GPU. מידע נוסף
  • ‫ACCELERATOR_COUNT: מספר המאיצים שכל עותק משוכפל צריך להשתמש בהם. זה שינוי אופציונלי. הערך צריך להיות אפס או לא מוגדר עבור מודלים של AutoML או מודלים שאומנו בהתאמה אישית שמשתמשים בתמונות ללא GPU.
  • ‫MIN_REPLICA_COUNT: מספר הצמתים המינימלי לפריסה הזו. אפשר להגדיל או להקטין את מספר הצמתים לפי הצורך בהתאם לעומס ההסקה, עד למספר המקסימלי של הצמתים, אבל לא פחות ממספר הצמתים הזה. הערך הזה חייב להיות שווה ל-1 או גדול ממנו.
  • ‫MAX_REPLICA_COUNT: המספר המקסימלי של הצמתים לפריסה הזו. אפשר להגדיל או להקטין את מספר הצמתים בהתאם לעומס ההסקה, עד למספר הצמתים הזה ולעולם לא פחות ממספר הצמתים המינימלי.
  • ‫REQUIRED_REPLICA_COUNT: אופציונלי. מספר הצמתים הנדרש כדי שהפריסה הזו תסומן כהצלחה. הערך חייב להיות גדול מ-1 או שווה לו, וקטן ממספר הצמתים המינימלי או שווה לו. אם לא מציינים ערך, ערך ברירת המחדל הוא המספר המינימלי של צמתים.
  • ‫DEPLOYMENT_RESOURCE_POOL_ID: שם ל-DeploymentResourcePool. האורך המקסימלי הוא 63 תווים, והתווים התקפים הם /^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$/.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/deploymentResourcePools

תוכן בקשת JSON:

{
  "deploymentResourcePool":{
    "dedicatedResources":{
      "machineSpec":{
        "machineType":"MACHINE_TYPE",
        "acceleratorType":"ACCELERATOR_TYPE",
        "acceleratorCount":"ACCELERATOR_COUNT"
      },
      "minReplicaCount":MIN_REPLICA_COUNT, 
      "maxReplicaCount":MAX_REPLICA_COUNT,
      "requiredReplicaCount":REQUIRED_REPLICA_COUNT
    }
  },
  "deploymentResourcePoolId":"DEPLOYMENT_RESOURCE_POOL_ID"
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION_ID/deploymentResourcePools/DEPLOYMENT_RESOURCE_POOL_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.CreateDeploymentResourcePoolOperationMetadata",
    "genericMetadata": {
      "createTime": "2022-06-15T05:48:06.383592Z",
      "updateTime": "2022-06-15T05:48:06.383592Z"
    }
  }
}

אפשר לבדוק את סטטוס הפעולה עד שהתשובה כוללת את "done": true.

Python

# Create a deployment resource pool.
deployment_resource_pool = aiplatform.DeploymentResourcePool.create(
    deployment_resource_pool_id="DEPLOYMENT_RESOURCE_POOL_ID",  # User-specified ID
    machine_type="MACHINE_TYPE",  # Machine type
    min_replica_count=MIN_REPLICA_COUNT,  # Minimum number of replicas
    max_replica_count=MAX_REPLICA_COUNT,  # Maximum number of replicas
)

מחליפים את מה שכתוב בשדות הבאים:

  • ‫DEPLOYMENT_RESOURCE_POOL_ID: שם ל-DeploymentResourcePool. האורך המקסימלי הוא 63 תווים, והתווים התקפים הם /^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$/.
  • ‫MACHINE_TYPE: אופציונלי. משאבי המכונה שמשמשים לכל צומת בפריסה הזו. ערך ברירת המחדל הוא n1-standard-2. מידע נוסף על סוגי מכונות
  • ‫MIN_REPLICA_COUNT: מספר הצמתים המינימלי לפריסה הזו. אפשר להגדיל או להקטין את מספר הצמתים לפי הצורך בהתאם לעומס ההסקה, עד למספר המקסימלי של הצמתים, אבל אף פעם לא פחות ממספר הצמתים הזה. הערך הזה חייב להיות שווה ל-1 או גדול ממנו.
  • ‫MAX_REPLICA_COUNT: המספר המקסימלי של הצמתים לפריסה הזו. אפשר להגדיל או להקטין את מספר הצמתים בהתאם לעומס ההסקה, עד למספר הצמתים הזה ולעולם לא פחות ממספר הצמתים המינימלי.

יצירת נקודת קצה

הוראות ליצירת נקודת קצה מופיעות במאמר יצירת נקודת קצה ציבורית באמצעות ה-CLI של gcloud או Agent Platform API. השלב הזה זהה לפריסה של מודל יחיד.

אחזור מזהה נקודת הקצה

כדי לאחזר את מזהה נקודת הקצה, אפשר לעיין במאמר בנושא פריסת מודל באמצעות ה-CLI של gcloud או Agent Platform API. השלב הזה זהה לפריסה של מודל יחיד.

פריסת המודל במאגר משאבי פריסה

אחרי שיוצרים DeploymentResourcePool ונקודת קצה (endpoint), אפשר לבצע פריסה באמצעות ה-method‏ DeployModel של ה-API. התהליך הזה דומה לפריסה של מודל יחיד. אם יש DeploymentResourcePool, מציינים את shared_resources של DeployModel עם שם המשאב של DeploymentResourcePool שאתם פורסים.

Cloud Console

  1. במסוף Google Cloud , נכנסים לדף מרשם המודלים של Agent Platform.

    כניסה למרשם המודלים

  2. מאתרים את המודל ולוחצים על Deploy to endpoint (פריסה לנקודת קצה).

  3. בקטע הגדרות המודל (שמוצג בהמשך), בוחרים באפשרות פריסה למאגר משותף של משאבי פריסה.

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

REST

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

  • ‫LOCATION_ID: האזור שבו משתמשים בפלטפורמת הסוכנים.
  • ‫PROJECT: מזהה הפרויקט. .
  • ‫ENDPOINT_ID: המזהה של נקודת הקצה.
  • ‫MODEL_ID: המזהה של המודל שרוצים לפרוס.
  • ‫DEPLOYED_MODEL_NAME: שם ל-DeployedModel. אפשר להשתמש גם בשם המוצג של Model בשביל DeployedModel.
  • ‫DEPLOYMENT_RESOURCE_POOL_ID: שם ל-DeploymentResourcePool. האורך המקסימלי הוא 63 תווים, והתווים התקפים הם /^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$/.
  • ‫TRAFFIC_SPLIT_THIS_MODEL: אחוז התנועה של התחזיות לנקודת הקצה הזו שינותב למודל שנפרס באמצעות הפעולה הזו. ברירת המחדל היא 100. סכום האחוזים של כל התנועה צריך להיות 100. מידע נוסף על פיצול תנועה
  • ‫DEPLOYED_MODEL_ID_N: אופציונלי. אם מודלים אחרים נפרסים בנקודת הקצה הזו, צריך לעדכן את אחוז חלוקת התנועה שלהם כך שסכום כל האחוזים יהיה 100.
  • ‫TRAFFIC_SPLIT_MODEL_N: ערך אחוז פיצול התנועה למזהה המודל שנפרס.
  • ‫PROJECT_NUMBER: מספר הפרויקט שנוצר באופן אוטומטי

ה-method של ה-HTTP וכתובת ה-URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/endpoints/ENDPOINT_ID:deployModel

תוכן בקשת JSON:

{
  "deployedModel": {
    "model": "projects/PROJECT/locations/us-central1/models/MODEL_ID",
    "displayName": "DEPLOYED_MODEL_NAME",
    "sharedResources":"projects/PROJECT/locations/us-central1/deploymentResourcePools/DEPLOYMENT_RESOURCE_POOL_ID"
  },
  "trafficSplit": {
    "0": TRAFFIC_SPLIT_THIS_MODEL,
    "DEPLOYED_MODEL_ID_1": TRAFFIC_SPLIT_MODEL_1,
    "DEPLOYED_MODEL_ID_2": TRAFFIC_SPLIT_MODEL_2
  },
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1.DeployModelOperationMetadata",
    "genericMetadata": {
      "createTime": "2022-06-19T17:53:16.502088Z",
      "updateTime": "2022-06-19T17:53:16.502088Z"
    }
  }
}

Python

# Deploy model in a deployment resource pool.
model = aiplatform.Model("MODEL_ID")
model.deploy(deployment_resource_pool=deployment_resource_pool)

מחליפים את MODEL_ID במזהה של המודל שרוצים לפרוס.

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

הסקת מסקנות

אתם יכולים לשלוח בקשות הסקה למודל ב-DeploymentResourcePool, כמו לכל מודל אחר שפרוס בפלטפורמת הסוכנים של Gemini Enterprise.