איך שומרים מקום בעזרת הסקת מסקנות אונליין

במאמר הזה נסביר איך להשתמש בהזמנות של Compute Engine כדי להבטיח ברמה גבוהה של ודאות שלמשימות ההסקות אונליין שלכם יהיו המשאבים הווירטואליים (VM) הדרושים להרצה.

התכונה 'מקומות שמורים' היא תכונה של Compute Engine. הם עוזרים לוודא שמתי שתצטרכו יהיו לכם משאבים בשביל ליצור מכונות וירטואליות עם אותה חומרה (זיכרון ו-vCPU) ומשאבים אופציונליים (מעבדי CPU, יחידות GPU, יחידות TPU ודיסקים מקומיים של SSD).

כשיוצרים שמירת מקום, מערכת Compute Engine בודקת שהקיבולת המבוקשת זמינה בתחום (zone) שצוין. אם כן, מערכת Compute Engine שומרת את המשאבים, יוצרת את שמירת המקום וקורה הדבר הבא:

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

מגבלות ודרישות

כשמשתמשים בשמירת מקום ב-Compute Engine עם Agent Platform, חשוב להביא בחשבון את המגבלות והדרישות הבאות:

  • Agent Platform יכולה להשתמש במקומות שמורים רק עבור מעבדי CPU, מכונות וירטואליות עם GPU או TPU (גרסת טרום-השקה (Preview)).
  • Agent Platform לא יכולה להשתמש במקומות שמורים של מכונות וירטואליות שמחוברים אליהן באופן ידני דיסקים מקומיים מסוג SSD.
  • השימוש בהזמנות של Compute Engine עם Agent Platform נתמך רק עבור אימון, הסקת מסקנות ו-Gemini Enterprise Agent Platform Workbench (גרסת Preview) ללא שרתים ב-Gemini Enterprise Agent Platform.
  • כדי שהמאפיינים של המכונה הווירטואלית בהזמנה יתאימו בדיוק לעומס העבודה של Agent Platform כדי לנצל את ההזמנה. לדוגמה, אם בהזמנה מצוין סוג מכונה a2-ultragpu-8g, עומס העבודה של Agent Platform יכול להשתמש בהזמנה רק אם הוא גם משתמש בסוג מכונה a2-ultragpu-8g. דרישות
  • כדי להשתמש במכונות וירטואליות של GPU או ב-TPU ששמורות במקום משותף, צריך להשתמש בהן באמצעות פרויקט הבעלים או פרויקט צרכן שבו המקום השמור משותף. מידע נוסף זמין במאמר איך פועל מקום שמור משותף.
  • כדי לתמוך בעדכונים שוטפים של פריסות Agent Platform, מומלץ להגדיל את מספר מכונות ה-VM ביותר מהמספר הכולל של העותקים המשוכפלים, באופן הבא, בהתאם לסוג ההזמנה שמשמש את DeployedModel:
    • SPECIFIC_RESERVATION: צריך לציין לפחות מכונה וירטואלית אחת נוספת. מומלץ לציין 10% (אבל לפחות אחת). מודלים שנפרסו באמצעות SPECIFIC_RESERVATION מובטח שיצרכו רק מכונות וירטואליות מההזמנה. Agent Platform לא יכול לבצע עדכונים אם אין מכונה וירטואלית נוספת.
    • ANY:
      • לא נדרשות מכונות וירטואליות נוספות, כי מודלים שפריסתם מתבצעת באמצעות הזמנת ANY משתמשים במכונות וירטואליות לפי דרישה אם הקיבולת של ההזמנה לא מספיקה. עם זאת, אם לא תשתמשו במכונות וירטואליות נוספות, יכול להיות שלא תנצלו את כל היתרונות של ההזמנה אחרי השדרוג. לדוגמה, נניח שיש לכם הזמנה עם 40 מכונות וירטואליות ואתם פורסים מודל עם 40 רפליקות באמצעות ההזמנה הזו. בפריסה הראשונה, כל 40 המכונות הווירטואליות בהזמנה משמשות את DeployedModel. אחרי השדרוג, רק 36 מכונות וירטואליות הן מההזמנה, ו-4 מכונות וירטואליות הן על פי דרישה.
      • אם רוצים שהשימוש יישאר במסגרת ההזמנה, מומלץ להוסיף לפחות מכונה וירטואלית אחת לכל DeployedModel או DeploymentResourcePool שמשתמשים בהזמנה. אם מספר המכונות הווירטואליות מאותו סוג בהזמנות שלכם (ANY) קטן מ-50, מומלץ להגדיל את המספר ב-10% (אבל לפחות ב-1). אם הוא גדול מ-50, מומלץ להגדיל אותו ב-25%. לדוגמה:
        • אם אתם מתכננים לפרוס מודלים באמצעות 40 מכונות וירטואליות מסוג A3, אתם יכולים להזמין מכונה וירטואלית אחת מסוג A3 עם 44 מכונות וירטואליות, או 2 הזמנות של מכונות וירטואליות מסוג A3: הזמנה X עם 30 מכונות וירטואליות והזמנה Y עם 14 מכונות וירטואליות (44 בסך הכול). אותו הדבר נכון גם לגבי מספרים אחרים של הזמנות, כל עוד הן משותפות עם Agent Platform ומספר המכונות הווירטואליות בהזמנות האלה הוא לפחות 44.
        • אם אתם מתכננים לפרוס מודלים באמצעות 100 מכונות וירטואליות מסוג A3, המספר הכולל של מכונות וירטואליות בכל ההזמנות של A3 שמשותפות עם Agent Platform צריך להיות לפחות 125.
        • אם אתם מתכננים לפרוס 2 מודלים באמצעות 10 מכונות וירטואליות, המספר הכולל של מכונות וירטואליות בכל ההזמנות של A3 שמשותפות עם Agent Platform צריך להיות לפחות 12. מספר המכונות הווירטואליות קטן מ-50, אבל מספר המכונות הווירטואליות הנוספות הוא 2 (1 לכל DeployedModel).
  • כדי להשתמש בהזמנה SPECIFIC_RESERVATION, צריך להקצות לחשבון השירות של Agent Platform את תפקיד ה-IAM‏ Compute Viewer בפרויקט שבו נמצאות ההזמנות (service-${PROJECT_NUMBER}@gcp-sa-aiplatform.iam.gserviceaccount.com, כאשר PROJECT_NUMBER הוא מספר הפרויקט שבו נעשה שימוש בהזמנה).

חיוב

כשמשתמשים בהזמנות ב-Compute Engine, מתבצע חיוב על הפעולות הבאות:

  • התמחור של Compute Engine עבור משאבי Compute Engine, כולל הנחות תמורת התחייבות לשימוש (CUD) שרלוונטיות. המחירון של Compute Engine
  • עמלות על ניהול הסקת מסקנות אונליין ב-Agent Platform, בנוסף לעלויות השימוש בתשתית. מידע על תמחור התחזיות

לפני שמתחילים

התרת שימוש בהזמנה

לפני שמשתמשים בשמירת מקום למעבדי CPU, למכונות וירטואליות של GPU או ל-TPU, צריך להגדיר את מדיניות השיתוף שלה כדי לאפשר ל-Agent Platform להשתמש בשמירת המקום. כדי לעשות זאת, משתמשים באחת מהשיטות הבאות:

אפשר לצרוך תוכן במהלך יצירת הזמנה

כשיוצרים הזמנה לפרויקט יחיד או הזמנה משותפת של מכונות וירטואליות של GPU, אפשר לאפשר ל-Agent Platform להשתמש בהזמנה באופן הבא:

  • אם אתם משתמשים במסוף, בקטע Google Cloud services בוחרים באפשרות Share reservation. Google Cloud
  • אם אתם משתמשים ב-Google Cloud CLI, צריך לכלול את הדגל --reservation-sharing-policy עם הערך ALLOW_ALL.
  • אם אתם משתמשים ב-API בארכיטקטורת REST, עליכם לכלול בגוף הבקשה את השדה serviceShareType עם הערך ALLOW_ALL.

אפשר להשתמש בהזמנה קיימת

אפשר לשנות מקום שמור שנוצר אוטומטית של מכונות וירטואליות עם GPU או TPU עבור מקום שמור לעתיד רק אחרי שעת ההתחלה של המקום השמור.

כדי לאפשר ל-Agent Platform להשתמש בהזמנה קיימת, אפשר להשתמש באחת מהשיטות הבאות:

אפשר להשתמש בכמה הזמנות ספציפיות

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

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

איך מוודאים שההזמנה מנוצלת

כדי לוודא שההזמנה מנוצלת, אפשר לעיין במאמר אימות ניצול ההזמנות במסמכי התיעוד של Compute Engine.

קבלת מסקנות אונליין באמצעות הזמנה

כדי ליצור פריסת מודל שצורכת מקום שמור של מכונות וירטואליות עם GPU ב-Compute Engine, צריך להשתמש ב-API בארכיטקטורת REST או ב-Agent Platform SDK ל-Python.

REST

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

  • LOCATION_ID: האזור שבו משתמשים ב-Agent Platform.
  • PROJECT_ID: הפרויקט שבו נוצרה ההזמנה. כדי להשתמש בהזמנה משותפת מפרויקט אחר, צריך לשתף את ההזמנה עם הפרויקט הזה. מידע נוסף זמין במאמר בנושא שינוי פרויקטים צרכניים בהזמנה משותפת.
  • ENDPOINT_ID: המזהה של נקודת הקצה.
  • MODEL_ID: המזהה של המודל שרוצים לפרוס.
  • DEPLOYED_MODEL_NAME: שם ל-DeployedModel. אפשר להשתמש גם בשם המוצג של Model בשביל DeployedModel.
  • MACHINE_TYPE: סוג המכונה שבה יש להשתמש בכל צומת בפריסה הזו. הגדרת ברירת המחדל היא n1-standard-2. מידע נוסף על סוגי המכונות הנתמכים זמין במאמר הגדרת משאבי מחשוב לחיזוי.
  • ACCELERATOR_TYPE: סוג המאיץ לצירוף למכונה. מידע נוסף על סוג ה-GPU שכל סוג מכונה תומך בו זמין במאמר מעבדי GPU לעומסי עבודה של מחשוב.
  • ACCELERATOR_COUNT: מספר המאיצים לצירוף למכונה.
  • RESERVATION_AFFINITY_TYPE: הערך חייב להיות ANY, SPECIFIC_RESERVATION או NONE.
    • המשמעות של ANY היא שהמכונות הווירטואליות של customJob יכולות להשתמש באופן אוטומטי בכל הזמנה עם מאפיינים תואמים.
    • SPECIFIC_RESERVATION – המכונות הווירטואליות של customJob יכולות להשתמש רק בהזמנות שהמכונות הווירטואליות מטארגטות באופן ספציפי לפי שם.
    • NONE מציין שהמכונות הווירטואליות של customJob לא יכולות להשתמש באף הזמנה. ציון הערך NONE זהה להשמטת הגדרת שיוך להזמנה.
  • ZONE: האזור שבו נוצרה ההזמנה.
  • RESERVATION_NAME_N: שמות ההזמנות, לפי סדר העדיפות. כל שם צריך להיות שם המשאב המלא של ההזמנה או של בלוק ההזמנות.
  • MIN_REPLICA_COUNT: מספר הצמתים המינימלי לפריסה הזו. אפשר להגדיל או להקטין את מספר הצמתים לפי הצורך בהתאם לעומס ההסקה, עד למספר המקסימלי של הצמתים ולפחות למספר הזה של הצמתים. הערך הזה חייב להיות שווה ל-1 או גדול ממנו.
  • MAX_REPLICA_COUNT: המספר המקסימלי של הצמתים לפריסה הזו. אפשר להגדיל או להקטין את מספר הצמתים בהתאם לעומס ההסקה, עד למספר הצמתים הזה ולעולם לא פחות ממספר הצמתים המינימלי.
  • TRAFFIC_SPLIT_THIS_MODEL: אחוז תנועת התחזיות לנקודת הקצה הזו שתנותב למודל שנפרס באמצעות הפעולה הזו. ברירת המחדל היא 100. סכום האחוזים של כל התנועה צריך להיות 100. מידע נוסף על פיצול תנועה
  • DEPLOYED_MODEL_ID_N: אופציונלי. אם מודלים אחרים נפרסים בנקודת הקצה הזו, צריך לעדכן את אחוז חלוקת התנועה שלהם כך שסכום כל האחוזים יהיה 100.
  • TRAFFIC_SPLIT_MODEL_N: ערך אחוז פיצול התנועה למפתח של מזהה המודל שנפרס.
  • PROJECT_NUMBER: מספר הפרויקט שנוצר באופן אוטומטי.

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

POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID:deployModel

תוכן בקשת JSON:

{
  "deployedModel": {
    "model": "projects/PROJECT/locations/LOCATION_ID/models/MODEL_ID",
    "displayName": "DEPLOYED_MODEL_NAME",
    "dedicatedResources": {
      "machineSpec": {
        "machineType": "MACHINE_TYPE",
        "acceleratorType": "ACCELERATOR_TYPE",
        "acceleratorCount": ACCELERATOR_COUNT,
        "reservationAffinity": {
          "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME_1",
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME_2"
          ]
        }
      },
      "minReplicaCount": MIN_REPLICA_COUNT,
      "maxReplicaCount": MAX_REPLICA_COUNT
    },
  },
  "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_ID/locations/LOCATION_ID/endpoints/ENDPOINT_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.DeployModelOperationMetadata",
    "genericMetadata": {
      "createTime": "2020-10-19T17:53:16.502088Z",
      "updateTime": "2020-10-19T17:53:16.502088Z"
    }
  }
}

Python

כדי ללמוד איך להתקין או לעדכן את Agent Platform SDK ל-Python, אפשר לעיין במאמר התקנת Agent Platform SDK ל-Python. מידע נוסף מופיע במאמרי העזרה של Agent Platform SDK for Python API.

לפני שמריצים את אחד מהסקריפטים הבאים, צריך להחליף את המשתנים הבאים בערכים:

  • DEPLOYED_NAME: שם למודל שנפרס.
  • TRAFFIC_SPLIT: ערך אחוז חלוקת התנועה עבור מפתח מזהה המודל שנפרס.
  • MACHINE_TYPE: המכונה שמשמשת לכל צומת בפריסה הזו. הגדרת ברירת המחדל היא n1-standard-2. מידע נוסף על סוגי מכונות
  • ACCELERATOR_TYPE: סוג המאיץ לצירוף למכונה. מידע נוסף על סוג ה-GPU שכל סוג מכונה תומך בו זמין במאמר מעבדי GPU לעומסי עבודה של מחשוב.
  • ACCELERATOR_COUNT: מספר המאיצים לצירוף למכונה.
  • PROJECT_ID: הפרויקט שבו נוצרה ההזמנה. כדי להשתמש בהזמנה משותפת מפרויקט אחר, צריך לשתף את ההזמנה עם הפרויקט הזה. מידע נוסף זמין במאמר בנושא שינוי פרויקטים צרכניים בהזמנה משותפת.
  • ZONE: האזור שבו נמצאת ההזמנה.
  • RESERVATION_NAME_N: שמות ההזמנות, לפי סדר העדיפות. כל שם צריך להיות שם המשאב המלא של ההזמנה או של בלוק ההזמנה.
  • MIN_REPLICA_COUNT: מספר הצמתים המינימלי לפריסה הזו. אפשר להגדיל או להקטין את מספר הצמתים לפי הצורך בהתאם לעומס ההסקה, עד למספר המקסימלי של הצמתים ולפחות למספר הזה של הצמתים. הערך הזה חייב להיות גדול מ-1 או שווה לו.
  • MAX_REPLICA_COUNT: המספר המקסימלי של הצמתים לפריסה הזו. אפשר להגדיל או להקטין את מספר הצמתים בהתאם לעומס ההסקה, עד למספר הצמתים הזה ולעולם לא פחות ממספר הצמתים המינימלי.

בהתאם לסוג ההזמנה שרוצים לנצל, מבצעים אחת מהפעולות הבאות:

  • כדי להשתמש בהזמנה ספציפית אחת או יותר:
    endpoint5.deploy(
        model = model,
        deployed_model_display_name=DEPLOYED_NAME,
        traffic_split=TRAFFIC_SPLIT,
        machine_type="MACHINE_TYPE",
        accelerator_type="ACCELERATOR_TYPE",
        accelerator_count=ACCELERATOR_COUNT,
        reservation_affinity_type="SPECIFIC_RESERVATION",
        reservation_affinity_key="compute.googleapis.com/reservation-name",
        reservation_affinity_values=[
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME_1",
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME_2"
            ],
        min_replica_count=MIN_REPLICA_COUNT,
        max_replica_count=MAX_REPLICA_COUNT,
        sync=True
    )
  • כדי להשתמש בבקשת הזמנה שנעשה בה שימוש אוטומטי:
    endpoint5.deploy(
        model = model,
        deployed_model_display_name=DEPLOYED_NAME,
        traffic_split=TRAFFIC_SPLIT,
        machine_type="MACHINE_TYPE",
        accelerator_type="ACCELERATOR_TYPE",
        accelerator_count=ACCELERATOR_COUNT,
        reservation_affinity_type="ANY_RESERVATION",
        min_replica_count=MIN_REPLICA_COUNT,
        max_replica_count=MAX_REPLICA_COUNT,
        sync=True
    )

המאמרים הבאים