שימוש במכונות וירטואליות מסוג Flex Start עם אשכול Slurm

במדריך הזה מוסבר איך להגדיר מכונות וירטואליות עם Flex Start ולהשתמש בהן עם Slurm ב-Gemini Enterprise Agent Platform. השילוב הזה מאפשר לכם להשתמש במודלים גמישים להקצאת מכונות וירטואליות לעומסי העבודה של האימון.

הגדרה ויצירת אשכול

לפני שמגדירים את האשכול, צריך לבצע את השלב הבא של דרישות מוקדמות חד-פעמיות כדי לוודא שחשבונות השירות הנדרשים מורשים לנהל משאבי Flex Start.

אימות ההרשאות של סוכן שירות של Google APIs

  • הקשר: Slurm בפלטפורמת Gemini Enterprise Agent משתמש בקבוצות של מכונות וירטואליות מנוהלות כדי להקצות באופן דינמי מכונות וירטואליות מסוג Flex Start ולנהל את מחזור החיים שלהן. סוכן השירות של Google APIs יוצר ומנהל את משאבי Compute Engine הבסיסיים עבור קבוצת המכונות הווירטואליות המנוהלת. כמו שמפורט במסמכי התיעוד בנושא קבוצות של מכונות וירטואליות מנוהלות ו-IAM, חשבון השירות הזה דורש הרשאות ליצירה, למחיקה ולרישום של מכונות וירטואליות, וגם הרשאה לצירוף זהות של חשבון שירות למכונות הווירטואליות.
  • פעולה: בודקים אם לסוכן השירות של Google APIs‏ (PROJECT_NUMBER@cloudservices.gserviceaccount.com) כבר יש את תפקיד העריכה (roles/editor).
    • אם התשובה היא 'כן': כנראה שלא צריך לבצע פעולות נוספות. תפקיד העריכה כולל בדרך כלל את כל ההרשאות הנדרשות.
    • אם התשובה היא 'לא': אם תפקיד העריכה שמוגדר כברירת מחדל לא הוענק, צריך להעניק במפורש את התפקידים הבאים כדי לוודא ש-MIG יכול לפעול:
      • מנהל מכונות של Compute (גרסה 1) (roles/compute.instanceAdmin.v1) – נדרש ליצירה, לרישום ולמחיקה של מכונות וירטואליות.
      • משתמש בחשבון שירות (roles/iam.serviceAccountUser) – נדרש לצירוף חשבון שירות למכונות הווירטואליות החדשות.

יצירת אשכול Slurm עם מודל הקצאת משאבים של Flex Start

כדי ליצור אשכול Slurm שמשתמש במודל ההקצאה Flex Start, צריך לציין את provisioning_model בהגדרת מאגר הצמתים של מפרט האשכול כששולחים את בקשת יצירת האשכול באמצעות ה-API.

קטע הגדרה לדוגמה: שומרים את הגדרת ה-JSON הבאה בקובץ בשם cluster_config.json. בדוגמה הזו נעשה שימוש מפורש ב-slurm_spec. מחליפים את הפלייסהולדרים (לדוגמה, <project-id>, <region>, <zone>) בערכים בפועל.

{
  "display_name": "flexvm",
  "name": "projects/<project-id>/locations/<region>/modelDevelopmentClusters/",
  "network": {
    "network": "projects/<project-id>/global/networks/default",
    "subnetwork": "projects/<project-id>/regions/<region>/subnetworks/default"
  },
  "node_pools": [
    {
      "id": "login",
      "machine_spec": { "machine_type": "n2-standard-8" },
      "scaling_spec": { "min_node_count": 1, "max_node_count": 1 },
      "enable_public_ips": "true",
      "zone": "<zone>",
      "boot_disk": { "boot_disk_type": "pd-standard", "boot_disk_size_gb": 120 }
    },
    {
      "id": "a3u",
      "machine_spec": {
        "machine_type": "a3-ultragpu-8g",
        "accelerator_type": "NVIDIA_H200_141GB",
        "accelerator_count": 8
      },
      "provisioning_model": "FLEX_START",
      "flex_start_max_duration": "604800s",
      "scaling_spec": { "min_node_count": 0, "max_node_count": 2 },
      "zone": "<zone>",
      "enable_public_ips": "true",
      "boot_disk": { "boot_disk_type": "hyperdisk-balanced", "boot_disk_size_gb": 400 }
    }
  ],
  "orchestrator_spec": {
    "slurm_spec": {
      "home_directory_storage": "projects/<project-id>/locations/<zone>/instances/<filestore-id>",
      "partitions": [ { "id": "a3u", "node_pool_ids": [ "a3u" ] } ],
      "login_node_pool_id": "login"
    }
  }
}

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

משך ההפעלה המקסימלי של Flex Start: אפשר להגדיר את משך ההפעלה המקסימלי של מופעי Flex Start. משתמשים בשדה flex_start_max_duration בהגדרת מאגר הצמתים, ומציינים את הערך כמחרוזת בשניות, עם התוספת s (לדוגמה, ‎172800s ליומיים). אם לא מציינים ערך, ברירת המחדל של המערכת היא 7 ימים.

מחזור חיים תפעולי ועמידות

כדי לתכנן את העבודות שלכם, חשוב להבין את מחזור החיים של צמתי Flex Start בסביבת פלטפורמת סוכנים של Slurm ב-Gemini Enterprise.

מגבלות של Flex Start

לכל מכונות ה-VM של Flex Start יש משך הפעלה מקסימלי קבוע, שמוגדר בהגדרה flex_start_max_duration.

  • מגבלת משך: כברירת מחדל, flex_start_max_duration מוגדר ל-7 ימים. אפשר לשנות את המגבלה הזו על ידי הגדרת ערך מותאם אישית של flex_start_max_durationבין 30 שניות ל-7 ימים (604,800 שניות) לכל היותר בהגדרות של מאגר הצמתים, כדי להתאים טוב יותר לזמני הריצה הצפויים של העבודות.
  • סגירה: כשמגיעים למגבלה הזו, Compute Engine סוגר את המכונה באופן מוחלט.

אופן הפעולה של שינוי הגודל של הצומת

בקטעים הבאים מתוארות שתי אסטרטגיות ההתאמה הזמינות: סטטית ודינמית.

צומת סטטי

צמתים סטטיים מאפשרים לכם לשמור על מאגר קבוע של משאבים שתמיד זמינים (לדוגמה, min_node_count > 0).

  • הקצאת משאבים: הצמתים מוקצים מיד עם יצירת האשכול או שינוי הגודל שלו, כדי לעמוד במספר הצמתים המינימלי.
  • תפוגה ושחזור: כשצומת סטטי של Flex Start מגיע ל-flex_start_max_duration ומסתיים על ידי Compute Engine, המערכת מנסה ליצור מחדש את הצומת באופן אוטומטי כדי לשחזר את קיבולת האשכול שהוגדרה. המחזור הזה מבטיח שהמאגר הסטטי יישאר מלא, בלי קשר לשאלה אם משימת Slurm ממתינה בצמתים.

צומת דינמי

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

  • הקצאת משאבים: כשמשימה מתווספת לתור (נכנסת למצב PENDING), מתזמן Slurm שולח בקשה למשאבים על ידי יצירת קבוצת מופעי מכונה מנוהלים ושליחת בקשה לשינוי גודל.
  • תפוגה ושחזור: כשהתוקף של הצומת פג, המערכת מקצה צומת חדש של Flex Start רק אם יש עבודת Slurm בהמתנה בצמתים.

חוסן האשכול ותיקון אוטומטי

‫Slurm בפלטפורמת הסוכנים של Gemini Enterprise עוקב אחרי תקינות הצומת בשלבים מרכזיים במחזור החיים של העבודה. בדיקות התקינות מופעלות לפני תחילת העבודה (הפרולוג) ואחרי שהיא מסתיימת (האפילוג), כדי לשמור על יציבות העבודה.

  • טיפול בשגיאות חומרה: אם השירות מזהה בעיות קריטיות בחומרה (כמו שגיאות ב-GPU), הוא מתוכנן לתקן באופן אוטומטי את המכונה הווירטואלית הלא תקינה.
  • החלפה אוטומטית: אם העבודה עדיין במצב PENDING (בהמתנה) (או שהיא הועברה מחדש למצב PENDING בגלל כשל בצומת), המערכת מקצה באופן אוטומטי מכונת Flex Start חדשה כדי להחליף את המכונה הווירטואלית הלא תקינה. כך עומס העבודה יכול להתבצע בחומרה תקינה ללא התערבות ידנית.