ב-Gemini Enterprise Agent Platform, אשכולות האימון משתמשים ב-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" ]
}
]
עבודות שנשלחות בלי --partition מורצות במחיצה שמוגדרת כברירת מחדל. כדי לציין את מחיצת ברירת המחדל, מגדירים את default_partition_id ב-slurm_spec ל-id של אחת מהמחיצות. אם לא מגדירים את המדיניות הזו, המחיצה הראשונה ברשימה היא ברירת המחדל.
צומתי התחברות
מאגר צומתי הכניסה מספק צמתים ייעודיים שמשמשים כנקודת הכניסה העיקרית למשתמשים כדי ליצור אינטראקציה עם האשכול. בשדה 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
Gemini Enterprise Agent Platform מאפשרת להגדיר slurm.confפרמטרים ולשנות אותם באשכול פעיל. מיפוי הגדרות של Slurm
חשבונאות, קדימות וסדר עדיפויות
התכונה 'חשבונאות' של Slurm מופעלת בכל אשכול, כך שאפשר לעקוב אחרי השימוש במשאבים בכל עבודה, כמו זמן המעבד והזיכרון. אפשר גם לאכוף מגבלות על חיוב, לתת עדיפות למשימות שקשורות לחיוב ולאפשר קדימות באמצעות config, כמו במפרט האשכול לדוגמה. הסברים על אופן הפעולה של התכונות האלה מופיעים במסמכי התיעוד של Slurm בנושא חשבונאות, תוסף העדיפות הרב-גורמי והפקעה.
סקריפטים של פתיח וסיום
אתם יכולים להגדיר סקריפטים מותאמים אישית של 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", "config": { "AccountingStorageEnforce": "associations,limits,qos", "PriorityType": "priority/multifactor", "PriorityWeightAge": "1000", "PriorityWeightFairshare": "10000", "PreemptType": "preempt/partition_prio", "PreemptMode": "REQUEUE", "PreemptExemptTime": "00:10:00" }, "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.
המאמרים הבאים
המאמר הזה מתמקד בשלבים האחרונים של מחזור החיים של למידת מכונה: ניהול, פריסה ומעקב אחרי המודלים שאומנו.
- פריסת המודל להיקש: פורסים את המודל המאומן לנקודת קצה של Gemini Enterprise Agent Platform כדי להכניס לשימוש בסביבת הייצור בקשות היקש אונליין בהיקף גדול.
- ניהול מחזור החיים של המודל: אפשר להשתמש ב-Gemini Enterprise Agent Platform Model Registry כדי ליצור גרסאות של המודלים, להשוות ביניהם ולנהל אותם. אפשר להגדיר צינור עיבוד נתונים כך שירשום באופן אוטומטי מודל חדש אחרי אימון מוצלח.
- מעקב אחרי הרצות של צינור עיבוד הנתונים וביצועי המודל:
- מעקב אחר צינורות: מעקב אחרי גרף הביצוע, הארטיפקטים והביצועים של הרצות צינורות כדי לנפות באגים ולבצע אופטימיזציה של התיזמור.
- מעקב אחרי המודל: אחרי הפריסה, צריך להגדיר מעקב כדי לזהות סחף ואנומליות בביצועי החיזוי של המודל. כך אפשר לשמור על דיוק המודל לאורך זמן.
- אופטימיזציה של העלויות וניהול מחזור החיים של האשכול: כשמשתמשים בצינורות אוטומטיים, צריך לנהל את מחזור החיים של האשכול על ידי התחשבות בתדירות ההרצה.
- אם מריצים את הצינור לעיתים רחוקות, כדאי להוסיף שלב אחרון לצינור כדי למחוק את האשכול ולחסוך בעלויות. בדרך כלל זה כולל יצירה של רכיב צינור בהתאמה אישית שקורא לפונקציית המחיקה.
- אם מריצים את העבודות לעיתים קרובות, כדאי להשאיר את האשכול פעיל כדי לקצר את זמן ההפעלה של העבודות.