איך שומרים מקום בעזרת אימון

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

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

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

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

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

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

  • ב-Agent Platform אפשר להשתמש בהזמנות רק עבור מעבדי CPU, מכונות וירטואליות עם GPU או TPU (גרסת טרום-השקה (Preview)).
  • פלטפורמת הסוכנים לא יכולה להשתמש בהזמנות של מכונות וירטואליות שצורפו אליהן באופן ידני דיסקים לאחסון מתמיד (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 לפחות במכונת VM אחת נוספת לכל פריסה בו-זמנית.
  • ‫Flex Start for Dynamic Workload Scheduler והפעלת משימות אימון במשאב מתמשך נתמכים שניהם, למעט כשמשתמשים בהזמנות של Compute Engine עם אימון ב-Agent Platform.

חיוב

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

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

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

לפני שמשתמשים בשמירת מקום למעבדי 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 להשתמש בהזמנה קיימת, אפשר להשתמש באחת מהשיטות הבאות:

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

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

יצירת משימת אימון בלי שרת (serverless) באמצעות מקום שמור

שימוש ב-REST API כדי ליצור משימת אימון ללא שרת בפלטפורמת Gemini Enterprise Agent שצורכת הזמנה של מכונות וירטואליות עם GPU ב-Compute Engine.

REST

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

  • LOCATION: האזור שבו יופעלו הקונטיינר או חבילת Python.
  • PROJECT_ID: הפרויקט שבו נוצרה ההזמנה. כדי להשתמש בהזמנה משותפת מפרויקט אחר, צריך לשתף את ההזמנה עם הפרויקט הזה. מידע נוסף זמין במאמר בנושא שינוי פרויקטים צרכניים בהזמנה משותפת.
  • JOB_NAME: שדה חובה. שם מוצג לCustomJob.
  • MACHINE_TYPE: סוג המכונה שבה יש להשתמש למשימה. הגדרת ברירת המחדל היא n1-standard-2. מידע נוסף על סוגי המכונות הנתמכים זמין במאמר בנושא הגדרת משאבי מחשוב לאימון מותאם אישית.
  • ACCELERATOR_TYPE: סוג המאיץ לצירוף למכונה. מידע נוסף על סוג ה-GPU שכל סוג מכונה תומך בו זמין במאמר מעבדי GPU לעומסי עבודה של מחשוב.
  • ACCELERATOR_COUNT: מספר המאיצים לצירוף למכונה.
  • מגדירים את משימת האימון בהתאמה אישית:
    • RESERVATION_AFFINITY_TYPE: הערך חייב להיות ANY_RESERVATION,‏ SPECIFIC_RESERVATION או NO_RESERVATION.

      • ANY_RESERVATION אומר שהמכונות הווירטואליות של customJob יכולות להשתמש באופן אוטומטי בכל הזמנה עם מאפיינים תואמים.
      • SPECIFIC_RESERVATION אומר שהמכונות הווירטואליות של customJob יכולות להשתמש רק בפרטי בקשה שהמכונות הווירטואליות מיועדות ספציפית אליהם לפי שם.
      • הערך NO_RESERVATION מציין שהמכונות הווירטואליות של customJob לא יכולות לצרוך הזמנה. הגדרת NO_RESERVATION זהה להשמטת הגדרת שיוך להזמנה.
    • ZONE: האזור שבו נוצרה ההזמנה.
    • RESERVATION_NAME: השם של ההזמנה.
    • DISK_TYPE: אופציונלי. סוג דיסק האתחול שבו רוצים להשתמש למשימה, או pd-standard (ברירת מחדל) או pd-ssd. מידע נוסף על סוגי דיסקים
    • DISK_SIZE: אופציונלי. הגודל ב-GB של דיסק האתחול שבו יש להשתמש עבור העבודה. ערך ברירת המחדל הוא 100.
    • REPLICA_COUNT: מספר העותקים המשוכפלים של העובדים לשימוש. ברוב המקרים, צריך להגדיר את הערך הזה ל-1 עבור מאגר העובדים הראשון.
    • אם אפליקציית האימון פועלת בקונטיינר בהתאמה אישית, צריך לציין את הפרטים הבאים:
      • CUSTOM_CONTAINER_IMAGE_URI: ה-URI של קובץ אימג' של קונטיינר ב-Artifact Registry או ב-Docker Hub, שיופעל בכל עותק משוכפל של העובד.
      • CUSTOM_CONTAINER_COMMAND: אופציונלי. הפקודה שתופעל כשהקונטיינר יופעל. הפקודה הזו מבטלת את נקודת הכניסה שמוגדרת כברירת מחדל במאגר.
      • CUSTOM_CONTAINER_ARGS: אופציונלי. הארגומנטים שיועברו כשמפעילים את הקונטיינר.
    • אם אפליקציית האימון היא חבילת Python שפועלת בקונטיינר מוכן מראש, מציינים את הפרטים הבאים:
      • EXECUTOR_IMAGE_URI: ה-URI של קובץ אימג' של קונטיינר שמריץ את הקוד שסופק. אפשר לעיין במאגרי התגים המוכנים מראש שזמינים לאימון.
      • PYTHON_PACKAGE_URIS: רשימה מופרדת בפסיקים של URI של Cloud Storage שמציינים את קובצי חבילת Python שהם תוכנית האימון והחבילות התלויות שלה. המספר המקסימלי של כתובות URI של חבילות הוא 100.
      • PYTHON_MODULE: השם של מודול Python להפעלה אחרי התקנת החבילות.
      • PYTHON_PACKAGE_ARGS: אופציונלי. ארגומנטים בשורת הפקודה שיועברו למודול Python.
    • TIMEOUT: אופציונלי. זמן הריצה המקסימלי של העבודה.
  • מציינים את התוויות LABEL_NAME ו-LABEL_VALUE שרוצים להוסיף למשרה המותאמת אישית.

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

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs

גוף בקשת JSON:

{
  "displayName": "JOB_NAME",
  "jobSpec": {
    "workerPoolSpecs": [
      {
        "machineSpec": {
          "machineType": "MACHINE_TYPE",
          "acceleratorType": "ACCELERATOR_TYPE",
          "acceleratorCount": ACCELERATOR_COUNT,
          "reservationAffinity": {
            "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
            // Use the following key and values only if
            // the reservationAffinityType is SPECIFIC_RESERVATION.
            "key": "compute.googleapis.com/reservation-name",
            "values": [
              "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME"
            ]
          },
        },
        "replicaCount": REPLICA_COUNT,
        "diskSpec": {
          "bootDiskType": DISK_TYPE,
          "bootDiskSizeGb": DISK_SIZE
        },

        // Union field task can be only one of the following:
        "containerSpec": {
          "imageUri": CUSTOM_CONTAINER_IMAGE_URI,
          "command": [
            CUSTOM_CONTAINER_COMMAND
          ],
          "args": [
            CUSTOM_CONTAINER_ARGS
          ]
        },
        "pythonPackageSpec": {
          "executorImageUri": EXECUTOR_IMAGE_URI,
          "packageUris": [
            PYTHON_PACKAGE_URIS
          ],
          "pythonModule": PYTHON_MODULE,
          "args": [
            PYTHON_PACKAGE_ARGS
          ]
        }
        // End of list of possible types for union field task.
      }
      // Specify one workerPoolSpec for single replica training, or multiple workerPoolSpecs
      // for distributed training.
    ],
    "scheduling": {
      "timeout": TIMEOUT
    }
  },
  "labels": {
    LABEL_NAME_1": LABEL_VALUE_1,
    LABEL_NAME_2": LABEL_VALUE_2
  }
}

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

curl

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs"

PowerShell

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/customJobs" | Select-Object -Expand Content

התשובה מכילה מידע על המפרטים וגם על TRAININGPIPELINE_ID.

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