תזמור

אם אתם רוצים לקבל גישה לאשכולות אימון ב-Vertex AI, אתם יכולים לפנות לנציג המכירות שלכם.

ב-Vertex AI, אשכולות האימון משתמשים ב-Simple Linux Utility for Resource Management‏ (Slurm) ככלי לתזמור, לניהול ולתזמון של משימות באשכול.

‫Slurm היא מערכת בקוד פתוח לניהול אשכולות ולתזמון משימות, שנמצאת בשימוש נרחב וידועה ביכולת ההתאמה שלה ובסבילות שלה לתקלות.

יכולות מרכזיות של Slurm

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

הגדרה בסיסית של אשכול

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

מחיצות

מחיצות מקבצות צמתים לקבוצות לוגיות, שיכולות להיות שימושיות לניהול סוגים שונים של מכונות או רמות גישה. הם מוגדרים כרשימה בשדה partitions של slurm_spec.

כל אובייקט של מחיצה מכיל את שדות החובה הבאים:

  • id: מזהה ייחודי של המחיצה.
  • node_pool_ids: רשימה שמכילה את המזהים של מאגר אחד או יותר של צמתים ששייכים למחיצה הזו.

לדוגמה:

"partitions": [
  {
    "id": "a4",
    "node_pool_ids": [ "a4" ]
  }
]

צומתי כניסה

מאגר הצמתים להתחברות מספק צמתים ייעודיים שמשמשים כנקודת הכניסה העיקרית למשתמשים כדי לקיים אינטראקציה עם האשכול. בשדה login_node_pool_id מציינים את המזהה הייחודי של המאגר.

לדוגמה:

"login_node_pool_id": "login"

אחסון בספריית הבית

בשדה home_directory_storage מציינים את מופע Filestore שיוטמע כספרייה /home בכל הצמתים באשכול. כך נוצרת לכל המשתמשים ספריית בית משותפת ומתמשכת.

צריך לציין את השם המלא של המשאב של מופע Filestore בשביל הערך הזה.

לדוגמה:

"home_directory_storage": "projects/PROJECT_ID/locations/REGION-ZONE/instances/FILESTORE_INSTANCE_NAME"

הגדרה מתקדמת של Slurm

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

ראיית חשבון

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

פרמטר ערך דוגמה
AccountingStorageEnforce מחרוזות מופרדות בפסיקים associations,limits,qos

הפסקה זמנית ועדיפות

כדי לנהל את התזמון והתעדוף של משימות, אפשר להגדיר את האפשרות להפסקה זמנית של משימות ב-Slurm באשכולות אימון של Vertex AI. התכונה 'קדימה' פועלת עם התוסף multifactor priority כדי לקבוע אם צריך להשהות משימות שפועלות כדי לפנות מקום למשימות בעדיפות גבוהה יותר.

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

פרמטרים של הפסקה זמנית

פרמטר ערך דוגמה
PREEMPT_TYPE String preempt/partition_prio
PREEMPT_MODE מחרוזות מופרדות בפסיקים SUSPEND,GANG
PREEMPT_EXEMPT_TIME String 00:00:00

פרמטרים של עדיפות

פרמטר ערך דוגמה
PRIORITY_TYPE String priority/multifactor
PRIORITY_WEIGHT_AGE מספר שלם 0
PRIORITY_WEIGHT_ASSOC מספר שלם 0
PRIORITY_WEIGHT_FAIRSHARE מספר שלם 0
PRIORITY_WEIGHT_JOB_SIZE מספר שלם 0
PRIORITY_WEIGHT_PARTITION מספר שלם 0
PRIORITY_WEIGHT_QOS מספר שלם 0
PRIORITY_WEIGHT_TRES מחרוזות מופרדות בפסיקים cpu=100,mem=150

סקריפטים של פתיחה וסיום

אתם יכולים להגדיר סקריפטים מותאמים אישית של Bash שיפעלו אוטומטית בתחילת כל עבודה (פרוֹלוֹג) ובסופה (אֶפִילוֹג) באמצעות השדות הבאים:

  • prolog_bash_scripts: רשימה של מחרוזות, שכל אחת מהן מכילה את התוכן המלא של סקריפט Bash שיופעל לפני שהעבודה מתחילה.
  • epilog_bash_scripts: רשימה של מחרוזות, שכל אחת מהן מכילה את התוכן המלא של סקריפט Bash שיופעל אחרי שהעבודה תסתיים.

האפשרות הזו שימושית להגדרת סביבת עבודה ייחודית או לביצוע משימות ניקוי אוטומטיות.

מפרט אשכול לדוגמה

בדוגמה הבאה מוצגת הגדרת JSON מלאה ליצירת אשכול אימון. אתם יכולים להתאים את המפרט הזה לצרכים שלכם.

{
  // ... other cluster configurations ...
  "orchestratorSpec": {
    "slurmSpec": {
      "partitions": [
        {
          "id": "a4",
          "node_pool_ids": ["a4"]
        }
      ],
      "login_node_pool_id": "login",
      "home_directory_storage": "projects/PROJECT_ID/locations/REGION-ZONE/instances/FILESTORE_INSTANCE_ID",
      "accounting": {
        "accounting_storage_enforce": "ACCOUNTING_STORAGE_ENFORCE"
      },
      "scheduling": {
        "priority_type": "PRIORITY_TYPE",
        "priority_weight_age": PRIORITY_WEIGHT_AGE,
        "priority_weight_assoc": PRIORITY_WEIGHT_ASSOC,
        "priority_weight_fairshare": PRIORITY_WEIGHT_FAIRSHARE,
        "priority_weight_job_size": PRIORITY_WEIGHT_JOB_SIZE,
        "priority_weight_partition": PRIORITY_WEIGHT_PARTITION,
        "priority_weight_qos": PRIORITY_WEIGHT_QOS,
        "priority_weight_tres": "PRIORITY_WEIGHT_TRES",
        "preempt_type": "PREEMPT_TYPE",
        "preempt_mode": "PREEMPT_MODE",
        "preempt_exempt_time": "PREEMPT_EXEMPT_TIME"
      },
      "prolog_bash_scripts": [
        "#!/bin/bash\necho 'First prolog script running'",
        "#!/bin/bash\necho 'Second prolog script running'"
      ],
      "epilog_bash_scripts": [
        "#!/bin/bash\necho 'Epilog script running'"
      ]
      // ... other Slurm settings ...
    }
  }
}

ניהול ותפעול של אשכולות

ניהול אשכול פעיל

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

ניהול החשבון באמצעות sacctmgr

הפקודה sacctmgr היא הכלי העיקרי לניהול מידע על משתמשים וחשבונות במסד הנתונים של Slurm. לדוגמה, כדי להוסיף משתמש חדש לחשבון ולתת לו גישה למחיצה, מריצים את הפקודה הבאה:

sudo sacctmgr add User Accounts=<account> Partition=<partition> <user>

רשימה מקיפה של כל האפשרויות של sacctmgr זמינה במסמכי התיעוד הרשמיים של Slurm Accounting.

בדיקת העדיפות של המשימה

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

פרטים נוספים על השימוש מופיעים במסמכי העזרה של sprioכלי השירות.

דוגמאות להפסקה זמנית

במסמכי התיעוד הרשמיים של Slurm יש כמה דוגמאות שימושיות לשיטות שונות של הפסקה זמנית. אפשר למצוא אותם בדף Slurm Preemption.

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

המאמר הזה מתמקד בשלבים האחרונים של מחזור החיים של למידת מכונה: ניהול, פריסה ומעקב אחרי המודלים המאומנים.

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