יצירת אשכול

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

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

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

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

אם מדיניות הארגון אוסרת על כתובות IP ציבוריות במכונות וירטואליות של Compute, צריך לפרוס את אשכול האימון עם הפרמטר 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
      }
    },
    {
      "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"
          ]
        }
      },
      "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
      }
    }
  ],
  "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/asia-sREGION/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": {
          "reservation_affinity_type": 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 באמצעות פרמטרים מתקדמים. השתמשו בתבנית הזו אם אתם צריכים שליטה מדויקת בהתנהגות של תזמון משימות, כמו הגדרת משקלים של סדרי עדיפויות מרובים, הגדרת קדימות של משימות והרצת סקריפטים של הקדמה וסיום להגדרה ולניקוי אוטומטיים של משימות.

רשימת הפרמטרים זמינה במאמר הפניות לפרמטרים.

{
  "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",
      "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'"
      ]
      "partitions": [
        {
          "id": "cpu",
          "node_pool_ids": [
            "cpu"
          ]
        }
      ],
      "login_node_pool_id": "login"
    }
  }
}

אחרי שמגדירים את האשכול בקובץ 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) כדי לציין את ההגדרות של אשכול Model Training.

פריסת האשכול

אחרי שיוצרים את קובץ התצורה בפורמט 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-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 של צומת הכניסה.

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

  • ACCELERATOR_TYPE: מאיץ ה-GPU המתאים לצירוף לצמתי העובדים. ערכים נתמכים:
    • NVIDIA_H100_MEGA_80GB
    • NVIDIA_H200_141GB
    • NVIDIA_B200
  • ACCELERATOR_COUNT: מספר המאיצים לצירוף לכל צומת עובד.
  • RESERVATION_AFFINITY_TYPE: שיוך ההזמנה למאגר הצמתים (לדוגמה, SPECIFIC_RESERVATION).
  • RESERVATION_NAME: השם של ההזמנה לשימוש במאגר הצמתים.

הגדרת כלי התזמור והאחסון

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

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

  • FILESTORE (תואם ל-home_directory_storage): שם המשאב המלא של מכונת Filestore שתוטמע בתור הספרייה /home.
  • LUSTRE (תואם ל-lustres בתוך אובייקט node_pools ): רשימה של מופעי Managed Lustre קיימים להרכבה בצמתי האשכול לגישה לקבצים עם ביצועים גבוהים.
  • LOGIN_NODE_POOL_ID (תואם ל-login_node_pool_id): המזהה של מאגר הצמתים שבו צריך להשתמש לצמתים של התחברות.
  • partitions: רשימה של אובייקטים של מחיצות, שכל אחד מהם דורש id ורשימה של node_pool_ids.

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

  • prolog_bash_scripts: רשימה של מחרוזות, שכל אחת מהן מכילה את התוכן המלא של סקריפט Bash שיופעל לפני תחילת העבודה.
  • epilog_bash_scripts: רשימה של מחרוזות, שכל אחת מהן מכילה את התוכן המלא של סקריפט Bash שיופעל אחרי שהעבודה תושלם.
  • ACCOUNTING_STORAGE_ENFORCE: אכיפה של מגבלות חשבון על נפח אחסון נדרש.
  • PRIORITY_TYPE: האלגוריתם שישמש לקביעת סדר העדיפויות של התזמון (לדוגמה, priority/multifactor).
  • priority_weight_*: קבוצה של ערכים שלמים שמקצים משקל לגורמים שונים בחישוב של עדיפות התזמון (לדוגמה, priority_weight_age,‏ priority_weight_fairshare).
  • PREEMPT_TYPE: הפלאגין להפסקה זמנית לשימוש (לדוגמה, preempt/partition_prio).
  • PREEMPT_MODE: המצב של התוסף להפסקה זמנית (לדוגמה, REQUEUE).
  • PREEMPT_EXEMPT_TIME: הזמן שחולף אחרי שהעבודה מתחילה, שבמהלכו אי אפשר להפסיק אותה.

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

משתמשים באשכול פעיל של אימון מתמשך כדי להריץ את עומסי העבודה של למידת המכונה.

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