בדף הזה מוסבר איך ליצור ולנהל אשכול אימון באופן ישיר באמצעות API. תלמדו איך להגדיר את כל האשכול, כולל צומתי התחברות, מחיצות GPU עם ביצועים גבוהים כמו A4 והגדרות של מתזמן Slurm – בקובץ JSON.
בנוסף, נסביר איך משתמשים ב-curl ובקריאות ל-API בארכיטקטורת REST כדי לפרוס את ההגדרות האלה, ליצור את האשכול ולנהל את מחזור החיים שלו באמצעות הפעולות GET, LIST, UPDATE ו-DELETE.
הגדרת האשכול
יוצרים קובץ JSON כדי להגדיר את התצורה המלאה של אשכול האימון.
אם מדיניות הארגון אוסרת על שימוש בכתובות IP ציבוריות במכונות, צריך לפרוס את אשכול האימון עם הפרמטר enable_public_ips: false ולהשתמש ב-Cloud NAT לתעבורת נתונים לאינטרנט.
השלב הראשון בהקצאת אשכול אימון הוא להגדיר את התצורה המלאה שלו בקובץ JSON. הקובץ הזה משמש כתוכנית של האשכול, ומצוין בו הכול – מהשם והגדרות הרשת ועד לחומרה של צומתי ההתחברות והצמתים העובדים.
בקטע הבא מופיעים כמה קובצי תצורה מלאים בפורמט JSON, שמשמשים כתבניות מעשיות למגוון תרחישים נפוצים לדוגמה. ברשימה הבאה תוכלו למצוא את הדוגמה שהכי מתאימה לצרכים שלכם, ולהשתמש בה כנקודת התחלה.
GPU עם Filestore בלבד: הגדרה סטנדרטית לאימון GPU למטרות כלליות.
GPU עם Filestore ו-Managed Lustre: הגדרה מתקדמת למשימות שדורשות הרבה פעולות קלט/פלט.
GPU עם סקריפט לטעינה בזמן ההפעלה: מדגים איך להריץ פקודות בהתאמה אישית בצמתים בזמן ההפעלה.
אשכול של מעבדים בלבד: הגדרה בסיסית שמשתמשת רק במשאבי מעבד.
הגדרה מתקדמת של Slurm: הדגמה של הגדרת הפרמטרים של
slurm.confברמת האשכול, המחיצה או מאגר הצמתים, והרצת סקריפטים של פרולוג ואפילוג.
אחרי כל דוגמה יש תיאור מפורט של הפרמטרים העיקריים שמשמשים בהגדרה הספציפית הזו.
GPU עם Filestore בלבד
זוהי ההגדרה הרגילה. הוא מספק מכונה של Filestore שמשמשת כספריית /home של האשכול, ומתאימה לשימוש כללי ולאחסון נתוני משתמשים.
בדוגמה הבאה מוצג התוכן של gpu-filestore.json. המפרט הזה יוצר אשכול עם מחיצת GPU. אפשר להשתמש בזה כתבנית ולשנות ערכים כמו machineType או nodeCount בהתאם לצרכים שלכם.
רשימת הפרמטרים מופיעה בחומר העזר בנושא פרמטרים.
{ "display_name": "DISPLAY_NAME", "network": { "network": "projects/PROJECT_ID/global/networks/NETWORK", "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK" }, "node_pools": [ { "id": "login", "machine_spec": { "machine_type": "n2-standard-8" }, "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "enable_public_ips": true, "zone": "ZONE", "boot_disk": { "boot_disk_type": "pd-standard", "boot_disk_size_gb": 200 }, "labels": { "example-key": "example-value" } }, { "id": "a4", "machine_spec": { "machine_type": "a4-highgpu-8g", "accelerator_type": "NVIDIA_B200", "accelerator_count": 8, "reservation_affinity": { "reservationAffinityType": "RESERVATION_AFFINITY_TYPE", "key": "compute.googleapis.com/reservation-name", "values": [ "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME" ] } }, "provisioning_model": "RESERVATION", "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "enable_public_ips": true, "zone": "ZONE", "boot_disk": { "boot_disk_type": "hyperdisk-balanced", "boot_disk_size_gb": 200 }, "labels": { "example-key": "example-value" } } ], "orchestrator_spec": { "slurm_spec": { "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE", "partitions": [ { "id": "a4", "node_pool_ids": [ "a4" ] } ], "login_node_pool_id": "login" } } }
GPU עם Filestore ו-Managed Lustre
ההגדרה המתקדמת הזו כוללת את המכונה הרגילה של Filestore בנוסף למערכת קבצים של Lustre עם ביצועים גבוהים. כדאי לבחור באפשרות הזו אם משימות האימון דורשות גישה ברוחב פס גבוה לקבוצות נתונים גדולות.
רשימת הפרמטרים מופיעה בחומר העזר בנושא פרמטרים.
{ "display_name": "DISPLAY_NAME", "network": { "network": "projects/PROJECT_ID/global/networks/NETWORK", "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK" }, "node_pools": [ { "id": "login", "machine_spec": { "machine_type": "n2-standard-8" }, "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "enable_public_ips": true, "zone": "ZONE", "boot_disk": { "boot_disk_type": "pd-standard", "boot_disk_size_gb": 200 }, "lustres": [ "projects/PROJECT_ID/locations/ZONE/instances/LUSTRE" ] }, { "id": "a4", "machine_spec": { "machine_type": "a4-highgpu-8g", "accelerator_type": "NVIDIA_B200", "accelerator_count": 8, "reservation_affinity": { "reservationAffinityType": "RESERVATION_AFFINITY_TYPE", "key": "compute.googleapis.com/reservation-name", "values": [ "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME" ] } }, "provisioning_model": "RESERVATION", "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "enable_public_ips": true, "zone": "ZONE", "boot_disk": { "boot_disk_type": "hyperdisk-balanced", "boot_disk_size_gb": 200 }, "lustres": [ "projects/PROJECT_ID/locations/ZONE/instances/LUSTRE" ] } ], "orchestrator_spec": { "slurm_spec": { "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE", "partitions": [ { "id": "a4", "node_pool_ids": [ "a4" ] } ], "login_node_pool_id": "login" } } }
GPU עם סקריפט לטעינה בזמן ההפעלה
בדוגמה הזו מוסבר איך להוסיף סקריפט בהתאמה אישית למאגר צמתים. הסקריפט הזה מופעל בכל הצמתים במאגר בזמן ההפעלה. כדי להגדיר את זה, מוסיפים את השדות הרלוונטיים להגדרה של מאגר הצמתים, בנוסף להגדרות הכלליות. רשימה של פרמטרים והתיאורים שלהם מופיעה בחומרי העזר בנושא פרמטרים.
{ "display_name": "DISPLAY_NAME", "network": { "network": "projects/PROJECT_ID/global/networks/NETWORK", "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK" }, "node_pools": [ { "id": "login", "machine_spec": { "machine_type": "n2-standard-8" }, "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "enable_public_ips": true, "zone": "ZONE", "boot_disk": { "boot_disk_type": "pd-standard", "boot_disk_size_gb": 200 }, "startup_script" : "#Example script\nsudo mkdir -p /data\necho 'Script Finished'\n" }, { "id": "a4", "machine_spec": { "machine_type": "a4-highgpu-8g", "accelerator_type": "NVIDIA_B200", "accelerator_count": 8, "reservation_affinity": { "reservationAffinityType": "RESERVATION_AFFINITY_TYPE", "key": "compute.googleapis.com/reservation-name", "values": [ "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME" ] } }, "provisioning_model": "PROVISIONING_MODEL", "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "enable_public_ips": true, "zone": "ZONE", "boot_disk": { "boot_disk_type": "hyperdisk-balanced", "boot_disk_size_gb": 200 }, "startup_script" : "#Example script\nsudo mkdir -p /data\necho 'Script Finished'\n" } ], "orchestrator_spec": { "slurm_spec": { "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE", "partitions": [ { "id": "a4", "node_pool_ids": [ "a4" ] } ], "login_node_pool_id": "login" } } }
אשכול עם מעבד (CPU) בלבד
כדי להקצות סביבה של אשכול אימון, קודם צריך להגדיר את התצורה המלאה שלה בקובץ JSON. הקובץ הזה משמש כתוכנית של האשכול, ומצוין בו הכול – מהשם והגדרות הרשת ועד לחומרה של צומתי ההתחברות והצמתים העובדים.
רשימת הפרמטרים מופיעה בחומר העזר בנושא פרמטרים.
{ "display_name": "DISPLAY_NAME", "network": { "network": "projects/PROJECT_ID/global/networks/NETWORK", "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK" }, "node_pools": [ { "id": "cpu", "machine_spec": { "machine_type": "n2-standard-8" }, "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "zone": "ZONE", "enable_public_ips": true, "boot_disk": { "boot_disk_type": "pd-standard", "boot_disk_size_gb": 120 } }, { "id": "login", "machine_spec": { "machine_type": "n2-standard-8" }, "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "zone": "ZONE", "enable_public_ips": true, "boot_disk": { "boot_disk_type": "pd-standard", "boot_disk_size_gb": 120 } } ], "orchestrator_spec": { "slurm_spec": { "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE", "partitions": [ { "id": "cpu", "node_pool_ids": [ "cpu" ] } ], "login_node_pool_id": "login" } } }
הגדרות מתקדמות של Slurm
בדוגמה הזו, כדי לשלוט ב-Slurm בצורה מדויקת, מגדירים פרמטרים של slurm.conf לפי שם ומריצים סקריפטים של prolog ו-epilog להגדרה ולניקוי אוטומטיים של משימות. אפשר להגדיר פרמטרים ברמת האשכול, למחיצה אחת או למאגר צמתים אחד.
יש שלוש מפות תצורה, אחת לכל רשומת slurm.conf:
configבמפרט של Slurm להגדרות ברמת האשכול-
configבמחיצה - רשומה אחת (
node_sets) למאגר צמתים
במאמר מפות תצורה של Slurm מפורטים הכללים לגבי שמות וערכים של פרמטרים, ואילו פרמטרים נדחים.
לא צריך להחליט על כל הפרטים האלה בזמן היצירה. אפשר לשנות את כל שלוש המפות באשכול פעיל, בלי להפעיל מחדש צמתים או לשבש משימות בתור. עדכון הגדרות אישיות ב-Slurm
{ "display_name": "DISPLAY_NAME", "network": { "network": "projects/PROJECT_ID/global/networks/NETWORK", "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK" }, "node_pools": [ { "id": "cpu", "machine_spec": { "machine_type": "n2-standard-8" }, "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "zone": "ZONE", "enable_public_ips": true, "boot_disk": { "boot_disk_type": "pd-standard", "boot_disk_size_gb": 120 } }, { "id": "login", "machine_spec": { "machine_type": "n2-standard-8" }, "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "zone": "ZONE", "enable_public_ips": true, "boot_disk": { "boot_disk_type": "pd-standard", "boot_disk_size_gb": 120 } } ], "orchestrator_spec": { "slurm_spec": { "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE", "config": { "PriorityType": "priority/multifactor", "PriorityWeightAge": "1000", "PriorityWeightFairshare": "10000", "PreemptType": "preempt/partition_prio", "PreemptMode": "SUSPEND,GANG", "SchedulerParameters": "bf_continue,bf_window=1440,bf_resolution=600", "AccountingStorageEnforce": "limits,qos" }, "prolog_bash_scripts": [ "#!/bin/bash\necho 'Prolog script running'" ], "epilog_bash_scripts": [ "#!/bin/bash\necho 'Epilog script running'" ], "partitions": [ { "id": "cpu", "node_pool_ids": [ "cpu" ], "config": { "MaxTime": "4-00:00:00", "DefMemPerCPU": "4096", "PriorityTier": "20" } } ], "node_sets": [ { "node_pool_id": "cpu", "config": { "Weight": "10", "Features": "cpu,spot" } } ], "login_node_pool_id": "login" } } }
המפה ברמת האשכול מגדירה עדיפות מרובת גורמים, הפקעה של עדיפות המחיצה ו-SchedulerParameters, שהמונח bf_continue שלו מציג את הצורה המורכבת: מונח פשוט מפעיל דגל, והמונחים מופרדים בפסיקים. מפת המחיצות מגבילה את זמן הריצה של המשימה ואת זיכרון ברירת המחדל למחיצה cpu בלבד, והרשומה node_sets מתייגת את הצמתים של המאגר הזה כדי שהמשימות יוכלו לבחור אותם באמצעות --constraint.
אחרי שמגדירים את האשכול בקובץ JSON, משתמשים בפקודות הבאות של API בארכיטקטורת REST כדי לפרוס את האשכול ולנהל אותו. בדוגמאות נעשה שימוש בכינוי gcurl, שהוא קיצור דרך נוח ומאומת לאינטראקציה עם נקודות הקצה ל-API. הפקודות האלה מכסות את כל מחזור החיים, מהפריסה הראשונית של האשכול ועד לעדכון אשכול, קבלת הסטטוס שלו, הצגת כל האשכולות ברשימה ובסופו של דבר מחיקת האשכול.
אימות
alias gcurl='curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
יצירת קובץ JSON
יוצרים קובץ JSON (לדוגמה, @cpu-cluster.json) כדי לציין את ההגדרות של אשכול אימון המודל.
פריסת האשכול
אחרי שיוצרים את קובץ התצורה בפורמט JSON, אפשר לפרוס את האשכול באמצעות ה-API בארכיטקטורת REST.
הגדרה של משתני סביבה
לפני שמריצים את הפקודה, צריך להגדיר את משתני הסביבה הבאים. כך פקודת ה-API נקייה יותר וקל יותר לנהל אותה.
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud שבו ייווצר האשכול.
- REGION: האזור ב- Google Cloud של האשכול והמשאבים שלו.
- ZONE: האזור ב- Google Cloud שבו יוקצו משאבי האשכול.
- CLUSTER_ID: מזהה ייחודי של אשכול האימון, שמשמש גם כתחילית לשמות של משאבים קשורים.
מריצים את הפקודה create
עכשיו מריצים את פקודת ה-gcurl הבאה. היא משתמשת בקובץ ה-JSON (בדוגמה הזו, cpu-cluster.json) כגוף הבקשה, ובמשתני הסביבה שהגדרתם כדי ליצור את נקודת הקצה ל-API ואת הפרמטרים של השאילתה.
gcurl -X POST -d @cpu-cluster.json https://REGION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/REGION/modelDevelopmentClusters?model_development_cluster_id=CLUSTER_ID
אחרי שהפריסה תתחיל, ייווצר מזהה פעולה. חשוב להעתיק את המזהה הזה. תצטרכו אותו כדי לאמת את האשכול בשלב הבא.
gcurl -X POST -d @cpu-cluster.json https://us-central1-aiplatform.googleapis.com/v1beta1/projects/managedtraining-project/locations/us-central1/modelDevelopmentClusters?model_development_cluster_id=training { "name": "projects/1059558423163/locations/us-central1/operations/2995239222190800896", "metadata": { "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.CreateModelDevelopmentClusterOperationMetadata", "genericMetadata": { "createTime": "2025-10-24T14:16:59.233332Z", "updateTime": "2025-10-24T14:16:59.233332Z" }, "progressMessage": "Create Model Development Cluster request received, provisioning..." }
אימות פריסת האשכול
כדי לעקוב אחרי התקדמות הפריסה, משתמשים במזהה הפעולה שקיבלתם כשפרסתם את האשכול. לדוגמה, 2995239222190800896 הוא מזהה הפעולה בדוגמה שצוינה קודם.
gcurl https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
לסיכום
כששולחים את הגדרות האשכול באמצעות הפקודה gcurl POST, מתחילה הקצאת האשכול. זו פעולה אסינכרונית שנמשכת זמן רב. ה-API מחזיר מיד תשובה שמכילה Operation ID.
חשוב לשמור את המזהה הזה, כי תשתמשו בו בשלבים הבאים כדי לעקוב אחרי התקדמות הפריסה, לוודא שהאשכול נוצר בהצלחה ולנהל את מחזור החיים שלו.
הסבר על הפרמטרים
הרשימה הבאה מתארת את כל הפרמטרים שמופיעים בדוגמאות להגדרות אישיות. הפרמטרים מאורגנים בקבוצות לוגיות לפי המשאב שהם מגדירים.
הגדרות כלליות והגדרות רשת
- DISPLAY_NAME: שם ייחודי לאשכול האימון. המחרוזת יכולה להכיל רק תווים אלפאנומריים באותיות קטנות, חייבת להתחיל באות ומוגבלת ל-10 תווים.
- PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
- REGION: האזור ב- Google Cloud שבו יהיו האשכול והמשאבים שלו.
- NETWORK: הרשת של הענן הווירטואלי הפרטי (VPC) שבה ישתמשו המשאבים של האשכול.
- ZONE: האזור ב- Google Cloud של האשכול והמשאבים שלו.
- SUBNETWORK: רשת המשנה שבה ישתמשו המשאבים של האשכול.
הגדרת מאגר צמתים
הפרמטרים הבאים משמשים להגדרת מאגרי הצמתים גם לצומתי התחברות וגם לצומתי עובדים.
הגדרות נפוצות של מאגרי צמתים
-
ID: מזהה ייחודי של מאגר הצמתים בתוך האשכול (לדוגמה, "
login", "a4", "cpu"). -
PROVISIONING_MODEL: מודל ההקצאה של צומת העובד (לדוגמה,
ON_DEMAND,SPOT,RESERVATION,FLEX_START). -
MACHINE_TYPE: סוג המכונה של צומת העובד (לדוגמה,
a3-highgpu-8g,a3-megagpu-8g,a3-ultragpu-8g,a4-highgpu-8g). לרשימה המלאה של סוגי המכונות הנתמכים, ראו משאבי מחשוב. -
MIN_NODE_COUNT: הערך של
MIN_NODE_COUNTחייב להיות זהה לערך שלMAX_NODE_COUNT. -
MAX_NODE_COUNT: במאגר צמתים של צומתי ההתחברות, הערך של
MAX_NODE_COUNTצריך להיות זהה לערך שלMIN_NODE_COUNT. -
ENABLE_PUBLIC_IPS: ערך בוליאני (
trueאוfalse) שקובע אם לצומת ההתחברות יש כתובת IP ציבורית. -
BOOT_DISK_TYPE: סוג דיסק האתחול של צומת ההתחברות (לדוגמה,
pd-standard,pd-ssd). - BOOT_DISK_SIZE_GB: גודל דיסק האתחול ב-GB של צומת ההתחברות.
- LABELS: קבוצה של צמדי מפתח/ערך שמשמשים כתוויות למאגר הצמתים.
-
NODE_IMAGE (תואם ל-
node_imageבתוך אובייקטnode_pools): קובץ האימג' של המכונה הווירטואלית שממנו מאתחלים את הצמתים של מאגר הצמתים, כנתיב מלא של משאב קובץ האימג' או משפחת קובצי האימג' (לדוגמה,projects/IMAGE_PROJECT/global/images/IMAGEאוprojects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY). אם משמיטים אותו, מאגר הצמתים משתמש בקובץ האימג' הנוכחי שמוגדר כברירת מחדל לסוג המכונה שלו, שמתקדם עם הזמן. מגדירים אותו כדי לשמור את מאגר הצמתים בתמונה ספציפית. שינוי קובץ האימג' של מאגר הצמתים יוצר מחדש את הצמתים שלו.
הגדרות אחסון נוספות
-
FILESTORES (תואם ל-
filestoresבתוך אובייקטnode_pools): רשימה של מכונות Filestore קיימות שאפשר לטעון במאגר הצמתים כדי לגשת לקבצים משותפים. -
LUSTRES (תואם ל-
lustresבתוך אובייקטnode_pools): רשימה של מכונות Lustre קיימות שאפשר להוסיף למאגר הצמתים כדי לקבל גישה לקבצים עם ביצועים גבוהים.
הגדרות ספציפיות לעובדים
-
ACCELERATOR_TYPE: מאיץ ה-GPU המתאים לחיבור לצומתי העובדים.
הערכים הנתמכים הם:
NVIDIA_H100_80GBNVIDIA_H100_MEGA_80GBNVIDIA_H200_141GBNVIDIA_B200
- ACCELERATOR_COUNT: מספר המאיצים שצריך לצרף לכל צומת עובד.
-
RESERVATION_AFFINITY_TYPE (תואם ל-
machine_spec.reservation_affinity.reservationAffinityType): מאפיין ה-affinity של המקום השמור במאגר הצמתים. הפרמטר הזה חייב להיותSPECIFIC_RESERVATION, שהוא הערך הנתמך היחיד. כשמשתמשים ב-SPECIFIC_RESERVATION, צריך לציין את ההזמנה ב-machine_spec.reservation_affinity.values. -
RESERVATION_NAME: שם ההזמנה שבה רוצים להשתמש למאגר הצמתים. הערך הזה משמש בשם המלא של משאב ההזמנה שמופיע ב-
machine_spec.reservation_affinity.values, לדוגמהprojects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME. צריך להזמין מקום כש-RESERVATION_AFFINITY_TYPE הואSPECIFIC_RESERVATION.
הגדרת התזמור והאחסון
השדות האלה מוגדרים בבלוק orchestrator_spec.slurm_spec של קובץ ה-JSON.
הגדרות הליבה של Slurm ושל האחסון
-
HOME_DIRECTORY_STORAGE (תואם ל-
home_directory_storage): שם המשאב המלא של מכונת Filestore הקיימת שצריך לטעון בתור הספרייה/home. -
LOGIN_NODE_POOL_ID (תואם ל-
login_node_pool_id): המזהה של מאגר הצמתים שצריך להשתמש בו לצומתי התחברות. -
partitions: רשימה של אובייקטים של מחיצות, שבה כל אובייקט דורשidורשימה שלnode_pool_ids. -
default_partition_id(אופציונלי): ה-idשל המחיצה שמשמשת להרצת משימות Slurm כשלא מצוינת מחיצה באופן מפורש (לדוגמה, כשמריצים אתsbatchבלי הדגל--partition). אם המדיניות לא מוגדרת, המחיצה הראשונה ברשימת המחיצות תהפוך לברירת המחדל, ולכן שינוי הסדר של הרשימה ישנה את מחיצת ברירת המחדל.
הגדרות מתקדמות של Slurm
-
prolog_bash_scripts: רשימה של מחרוזות, שכל אחת מהן מכילה את התוכן המלא של סקריפט Bash שצריך להריץ לפני שהמשימה מתחילה. -
epilog_bash_scripts: רשימה של מחרוזות, שכל אחת מהן מכילה את התוכן המלא של סקריפט Bash שיופעל אחרי שהמשימה תסתיים. -
config,partitions[].configו-node_sets: פרמטרים של Slurm שמוגדרים לפי שם. מפות תצורה של Slurm -
schedulingו-accounting: הוחלפו. שני האובייקטים האלה חושפים קבוצה קבועה של פרמטרים של עדיפות, הפקעה וחשבונאות, שכל אחד מהם יכול להיות מוגדר לפי שם במפהconfigברמת האשכול (priority_typeבתור"PriorityType",preempt_modeבתור"PreemptMode"וכן הלאה). הם עדיין פועלים באשכולות שמשתמשים בהם, אבל באשכולות חדשים צריך להשתמש ב-config, שתומך בהרבה יותר פרמטרים שלslurm.confמאשר קבוצת המשנה הזו.
מפות הגדרות אישיות של Slurm
הפרמטרים של Slurm מוגדרים לפי שם, בשלוש מפות, אחת לכל רשומת slurm.conf:
-
config: הגדרות ברמת האשכול, שנכתבות כשורה גלובלית שלKey=Value. -
partitions[].config: הגדרות למחיצה אחת, שנכתבות כצמדים נוספים בשורהPartitionName=של המחיצה הזו. -
node_sets: רשימה של אובייקטים, לכל אחד מהם יש מפה שלnode_pool_idו-config. ההגדרות נכתבות כצמדים נוספים בשורהNodeName=של הצמתים במאגר הצמתים הזה. לכל היותר רשומה אחת לכל מאגר צמתים, והמאגר חייב להיות מאגר מחשוב של האשכול, ולא מאגר ההתחברות.
בשלושתם, המפתחות הם שמות הפרמטרים של Slurm, כמו שמופיע במסמכי התיעוד של SchedMD, בלי התאמה של אותיות רישיות והתעלמות מקווים תחתונים, כך ש-DefMemPerCPU, defmempercpu ו-def_mem_per_cpu מתייחסים לאותו פרמטר. הערכים נכתבים כמו ש-slurm.conf כותב אותם, כולל רשימות מופרדות בפסיקים כמו "PreemptMode": "SUSPEND,GANG" וערכים מורכבים כמו "SchedulerParameters": "bf_window=1440,bf_resolution=600".
כל מפה תומכת בקבוצת משנה של הפרמטרים של slurm.conf שתקפים לרשומה שלה, ולא בכולם. אם אתם צריכים פרמטר שלא נתמך, פנו לאיש הקשר שלכם באשכולות האימון של Gemini Enterprise Agent Platform.
אם תשלחו בקשה עם פרמטר שלא נתמך בהיקף שהגדרתם לו, או עם ערך לא חוקי לפרמטר, הבקשה תידחה ותופיע הודעת שגיאה עם שם הפרמטר. שום דבר לא נמחק בלי הודעה. פרמטרים מסוימים נדחים מסיבה ספציפית:
-
השירות מנהל את בדיקת התקינות של הצמתים ואת הוספת המשימות לתור מחדש, ולכן אי אפשר להגדיר את
HealthCheckProgram,HealthCheckInterval,HealthCheckNodeStateו-RequeueExit. -
במקום זאת,
Prologו-Epilogמוגדרים באמצעותprolog_bash_scriptsו-epilog_bash_scripts. -
אי אפשר להגדיר את הפרמטרים של
slurmdbd.conf, כמוStorageHostו-PurgeJobAfter: מסד הנתונים של ניהול הרישום מנוהל על ידי השירות. -
בהיקף המחיצה,
Defaultנדחה. מחיצת ברירת המחדל היא בחירה ברמת האשכול, שמוגדרת באמצעותdefault_partition_id.
הגדרת סביבת זמן הריצה
השדות האלה מוגדרים בבלוק runtime_spec של קובץ ה-JSON.
-
service_account: חשבון השירות שמוגדר כברירת מחדל, שבו האשכול משתמש כשהוא מריץ עומסי עבודה. אם לא צוין חשבון שירות, המערכת משתמשת בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine. אי אפשר לעדכן את השדה הזה אחרי שיוצרים את האשכול.
המאמרים הבאים
משתמשים באשכול האימון הפעיל והקבוע כדי להריץ את עומסי העבודה של למידת המכונה.
- הרצת משימה באשכול: שולחים
CustomJobכדי להריץ משימת אימון באשכול הקבוע. - תזמון האימון באמצעות Gemini Enterprise Agent Platform Pipelines: כדי ליצור תהליכי עבודה שניתן לחזור עליהם ברמת ייצור, אפשר להפוך את תהליך שליחת המשימות לאוטומטי באמצעות Agent Platform Pipelines.
- הצגת האשכול: הצגת רשימה של האשכולות הקיימים בפרויקט, בדיקת הסטטוס שלהם והצגת פרטי ההגדרות האישיות באמצעות מסוף Google Cloud או Agent Platform API.
- שינוי האשכול: עדכון ההגדרות של אשכול קיים, כמו מספר הצמתים או מחיצות Slurm.
- כדי להפסיק לצבור עלויות, צריך למחוק את האשכול: אשכולות אימון הם קבועים וצוברים עלויות כשהם פעילים.