אשכולות האימון של Gemini Enterprise Agent Platform משתמשים ב-Simple Linux Utility for Resource Management (או Slurm) בתור כלי התזמור לניהול ולתזמון של משימות באשכול.
Slurm היא מערכת פופולרית בקוד פתוח לניהול אשכולות ולתזמון משימות, שידועה ביכולת ההתאמה שלה לעומס (scalability) ובעמידות שלה לתקלות.
היכולות העיקריות של 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: accounting, multifactor priority plugin ו-preemption.
סקריפטים של פרולוג ואפילוג
אתם יכולים להגדיר סקריפטים מותאמים אישית של Bash כך שיפעלו באופן אוטומטי בתחילת (prolog) ובסוף (epilog) כל משימה, באמצעות השדות הבאים:
-
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 בנושא חשבונאות.
בדיקת העדיפות של המשימה
כדי לבדוק את רכיבי העדיפות של כל משימה בתור, משתמשים בכלי השירות sprio. המידע הזה עוזר להבין למה משימות מסוימות מתוזמנות להרצה לפני משימות אחרות.
למידע מפורט על השימוש, אפשר לעיין במסמכי התיעוד של כלי העזר sprio.
preferenceדוגמאות להפקעה
במסמכי התיעוד הרשמיים של Slurm יש כמה דוגמאות לאסטרטגיות שונות של הפקעה. אפשר למצוא אותם בדף Slurm Preemption.
המאמרים הבאים
השלבים הבאים מתמקדים בשלבים האחרונים של מחזור החיים של למידת המכונה: ניהול, פריסה ומעקב אחרי המודלים שאומנו.
- פריסת המודל להסקת מסקנות: פורסים את המודל המאומן בנקודת קצה של Gemini Enterprise Agent Platform כדי להציג בקשות להסקת מסקנות אונליין בקנה מידה נרחב.
- ניהול מחזור החיים של המודל: אתם יכולים להשתמש ב-מרשם המודלים ב-Gemini Enterprise Agent Platform כדי לנהל את הגרסאות של המודלים, להשוות ביניהם ולנהל אותם. אפשר להגדיר צינור עיבוד נתונים כך שירשום באופן אוטומטי מודל חדש אחרי אימון מוצלח.
- מעקב אחרי הרצות של צינורות עיבוד נתונים וביצועי מודלים:
- מעקב אחרי צינורות עיבוד נתונים: מעקב אחרי תרשים הביצוע, פריטי המידע שנוצרו בתהליך והביצועים של הרצות צינורות עיבוד הנתונים, כדי לנפות באגים בבעיות ולבצע אופטימיזציה של התזמור.
- מעקב אחרי מודלים ב-Gemini Enterprise Agent Platform: אחרי הפריסה, מגדירים מעקב כדי לזהות חריגות ושינויים בביצועי החיזוי של המודל, וכך לשמור על הדיוק של המודל לאורך זמן.
- אופטימיזציה של עלויות וניהול מחזור החיים של האשכול: כשמשתמשים בצינורות עיבוד נתונים אוטומטיים, צריך לנהל את מחזור החיים של האשכול בהתאם לתדירות ההרצה.
- אם אתם מריצים את הצינור לעיתים רחוקות, הוסיפו שלב אחרון בצינור כדי למחוק את האשכול ולחסוך בעלויות. בדרך כלל זה כולל יצירת רכיב צינור עיבוד נתונים בהתאמה אישית שקורא לפונקציית המחיקה.
- אם אתם מריצים משימות לעיתים קרובות, כדאי להשאיר את האשכול פעיל כדי לקצר את זמן ההפעלה של המשימות.