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

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

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

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

סקירה כללית

התמיכה באירוח משותף של מודלים מציגה את הקונספט של DeploymentResourcePool, שמקבץ פריסות של מודלים שמשתפים משאבים בתוך מכונה וירטואלית אחת. אפשר לפרוס כמה נקודות קצה באותו VM ב-DeploymentResourcePool. לכל נקודת קצה יש מודל אחד או יותר שנפרסו. אפשר לקבץ את המודלים שנפרסו לנקודת קצה (endpoint) מסוימת באותו DeploymentResourcePool או באחר.

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

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

‫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.

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

לתשומת ליבכם

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

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

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

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

מגבלות

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

פריסת מודל

כדי לפרוס מודל ב-DeploymentResourcePool:

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

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

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

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

Cloud Console

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

    כניסה לדף Deployment resource pools

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

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

REST

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

  • ‫LOCATION_ID: האזור שבו אתם משתמשים ב-Agent Platform.
  • ‫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: המספר המקסימלי של הצמתים בפריסה הזו. אפשר להגדיל או להקטין את מספר הצמתים בהתאם לעומס ההסקה, עד למספר הצמתים הזה, ולא פחות ממספר הצמתים המינימלי.

יצירת נקודת קצה (endpoint)

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

אחזור של מזהה נקודת הקצה (endpoint)

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

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

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

Cloud Console

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

    כניסה לדף Model Registry

  2. מוצאים את המודל ולוחצים על Deploy to endpoint.

  3. בקטע Model settings (שמוצג למטה), בוחרים באפשרות Deploy to a shared deployment resource pool.

    טופס הגדרות המודל, עם חלוקת תנועה שמוגדרת ל-100 ובחירה באפשרות Deploy to a shared deployment resource pool

REST

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

  • ‫LOCATION_ID: האזור שבו אתם משתמשים ב-Agent Platform.
  • ‫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 Agent Platform.