יצירת אשכול

אם אתם מעוניינים באשכולות אימון של Gemini Enterprise Agent Platform, אתם יכולים לפנות לנציג המכירות שלכם כדי לקבל גישה.

בדף הזה מוסבר על השיטה הישירה, שמבוססת על API, ליצירה ולניהול של אשכול אימון. תלמדו איך להגדיר את התצורה המלאה של האשכול, כולל צמתי התחברות, מחיצות GPU לביצועים גבוהים כמו A4 והגדרות של Slurm orchestrator – בקובץ JSON. בנוסף, מוסבר איך להשתמש ב-curl ובקריאות ל-API בארכיטקטורת REST כדי לפרוס את ההגדרה הזו, ליצור את האשכול ולנהל את מחזור החיים שלו באמצעות פעולות GET,‏ LIST,‏ UPDATE ו-DELETE.

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

יוצרים קובץ JSON כדי להגדיר את התצורה המלאה של אשכול האימון.

אם מדיניות הארגון אוסרת על שימוש בכתובות IP ציבוריות במכונות וירטואליות, צריך לפרוס את אשכול האימון עם הפרמטר enable_public_ips: false ולהשתמש ב-Cloud NAT כדי לאפשר יציאה מהאינטרנט.

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

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

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

‫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"
    }
  }
}

אשכול עם מעבד בלבד

כדי להקצות סביבת אשכול אימון, קודם צריך להגדיר את התצורה המלאה שלו בקובץ 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 entry למאגר צמתים

לכללים לגבי שמות וערכים של פרמטרים, ולגבי הפרמטרים שנדחים, אפשר לעיין במאמר בנושא מיפוי הגדרות של 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: מזהה ייחודי של אשכול האימון, שמשמש גם כקידומת לשמות של משאבים קשורים.

מריצים את פקודת היצירה.

עכשיו מריצים את פקודת 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
    

לסיכום

שליחת הגדרות האשכול באמצעות פקודת ה-POST‏ gcurl מתחילה את הקצאת האשכול, שהיא פעולה אסינכרונית שפועלת לאורך זמן. ה-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/family/IMAGE_FAMILY ). אם משמיטים את המאפיין הזה, מאגר הצמתים משתמש בתמונת ברירת המחדל הנוכחית עבור סוג המכונה שלו, שמשתנה עם הזמן. מגדירים אותו כך שמאגר הצמתים יישאר בתמונה ספציפית. שינוי של תמונת צומת יוצר מחדש את הצמתים שלה.

הגדרות אחסון נוספות

  • ‫FILESTORES (מתאים ל-filestores בתוך אובייקט node_pools): רשימה של מופעי Filestore קיימים להרכבה במאגר הצמתים לצורך גישה משותפת לקבצים.
  • ‫LUSTRES (מתאים ל-lustres בתוך אובייקט node_pools): רשימה של מופעי Lustre קיימים להרכבה על מאגר הצמתים לצורך גישה לקבצים עם ביצועים גבוהים.

הגדרות ספציפיות לעובדים

  • ‫ACCELERATOR_TYPE: מאיץ ה-GPU המתאים לצירוף לצמתי העובדים. הערכים הנתמכים הם:
    • NVIDIA_H100_80GB
    • NVIDIA_H100_MEGA_80GB
    • NVIDIA_H200_141GB
    • NVIDIA_B200
  • ‫ACCELERATOR_COUNT: מספר המאיצים לצירוף לכל צומת עובד.
  • ‫RESERVATION_AFFINITY_TYPE (תואם ל-‎ machine_spec.reservation_affinity.reservationAffinityType): ההעדפה של המקום השמור למאגר הצמתים. הערך של הפרמטר הזה חייב להיות 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 והאחסון

השדות האלה מוגדרים בבלוק orchestrator_spec.slurm_spec של קובץ ה-JSON.

הגדרות ליבה של Slurm ואחסון

  • ‫HOME_DIRECTORY_STORAGE (תואם ל-home_directory_storage): שם המשאב המלא של מופע האחסון הקיים שיוטמע כספרייה /home. יכול להיות מופע של Filestore או Lustre.
  • ‫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".

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

  • השירות מנהל את בדיקת תקינות הצומת ואת העברת העבודות לתור, ולכן אי אפשר להגדיר את 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: כדי להפוך את תהליך שליחת העבודות לאוטומטי, אפשר להשתמש בצינורות של Agent Platform כדי ליצור תהליכי עבודה שניתנים לחזרה ומתאימים לסביבת ייצור.
  • צפייה באשכול: מציגים את רשימת האשכולות הקיימים בפרויקט, בודקים את הסטטוס שלהם ומציגים את פרטי ההגדרה באמצעות מסוף Google Cloud או Agent Platform API.
  • שינוי האשכול: עדכון ההגדרות של אשכול קיים, כמו מספר הצמתים או המחיצות של Slurm.
  • כדי להפסיק את הצבירה של עלויות, צריך למחוק את האשכול: אשכולות אימון הם קבועים וצוברים עלויות בזמן שהם פעילים.