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

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

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

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

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

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

כשמשתמשים בהזמנות של Compute Engine עם Vertex AI, חשוב להביא בחשבון את ההגבלות והדרישות הבאות:

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

חיוב

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

REST

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

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

מידע על התקנה או עדכון של Vertex AI SDK ל-Python זמין במאמר התקנה של Vertex AI SDK ל-Python. מידע נוסף מופיע במאמרי העזרה של ה-API של Vertex AI SDK ל-Python.

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

  • 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
    )

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