יצירת קבוצת MIG עם פרוסת Cloud TPU בכמה מארחים

במאמרי עזרה הזה מוסבר איך ליצור קבוצת מופעי מכונה מנוהלים (MIG) עם פרוסת TPU בכמה מארחים.

דרישות מוקדמות

מבצעים את הפעולות הבאות:

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

יצירת MIG עם פרוסות TPU בכמה מארחים

  1. יוצרים תבנית של הגדרות מכונה.
  2. יוצרים מדיניות של עומס עבודה.
  3. יוצרים את ה-MIG.

יצירת תבנית של הגדרות מכונה

הפקודה ליצירת תבנית של הגדרות מכונה תלויה באפשרות הצריכה שבה אתם משתמשים: על פי דרישה, Spot, התחייבות להזמנה או התחלה גמישה (Flex-start). למידע נוסף על אפשרויות הצריכה, קראו את המאמר תכנון משאבי TPU.

יצירת תבנית של הגדרות מכונה ל-TPU VM על פי דרישה

הפקודה הבאה יוצרת תבנית של הגדרות מכונה באמצעות אפשרות הצריכה על פי דרישה:

gcloud

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
  --machine-type=MACHINE_TYPE \
  --maintenance-policy=TERMINATE \
  --image-family=IMAGE_FAMILY \
  --image-project=IMAGE_PROJECT

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "INSTANCE_TEMPLATE_NAME",
    "properties": {
      "machineType": "MACHINE_TYPE",
      "scheduling": {
        "onHostMaintenance": "TERMINATE"
      },
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
          }
        }
      ],
      "networkInterfaces": [
        {
          "network": "global/networks/default"
        }
      ]
    }
  }' \
  "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates"

מחליפים את ה-placeholders הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • ‫INSTANCE_TEMPLATE_NAME: השם של התבנית של הגדרות המכונה.
  • ‫MACHINE_TYPE: סוג המכונה של ה-TPU VM, לדוגמה ct6e-standard-8t.
  • ‫IMAGE_FAMILY: משפחת קובצי האימג' של מערכת ההפעלה של ה-TPU VM. אם רוצים להתקין גרסה ספציפית של מערכת ההפעלה, משתמשים בדגל --image. מידע נוסף על קובצי אימג' של מערכת ההפעלה זמין במאמר קובצי אימג' של מערכת ההפעלה.
  • ‫IMAGE_PROJECT: הפרויקט שמכיל את קובץ האימג' של מערכת ההפעלה. בתמונות TPU, הערך הוא ubuntu-os-accelerator-images.

יצירת תבנית של הגדרות מכונה ל-TPU VM במודל Spot

הפקודה הבאה יוצרת תבנית של הגדרות מכונה באמצעות אפשרות הצריכה של Spot:

gcloud

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
  --machine-type=MACHINE_TYPE \
  --maintenance-policy=TERMINATE \
  --instance-termination-action=STOP \
  --provisioning-model=SPOT \
  --image-family=IMAGE_FAMILY \
  --image-project=IMAGE_PROJECT

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "INSTANCE_TEMPLATE_NAME",
    "properties": {
      "machineType": "MACHINE_TYPE",
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
          }
        }
      ],
      "scheduling": {
        "onHostMaintenance": "TERMINATE",
        "provisioningModel": "SPOT",
        "instanceTerminationAction": "STOP"
      },
      "networkInterfaces": [
        {
          "network": "global/networks/default"
        }
      ]
    }
  }' \
  "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates"

מחליפים את ה-placeholders הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • ‫INSTANCE_TEMPLATE_NAME: השם של התבנית של הגדרות המכונה.
  • ‫MACHINE_TYPE: סוג המכונה של ה-TPU VM, לדוגמה ct6e-standard-8t.
  • ‫IMAGE_FAMILY: משפחת קובצי האימג' של מערכת ההפעלה של ה-TPU VM. אם רוצים להתקין גרסה ספציפית של מערכת ההפעלה, משתמשים בדגל --image. מידע נוסף על קובצי אימג' של מערכת ההפעלה זמין במאמר קובצי אימג' של מערכת ההפעלה.
  • ‫IMAGE_PROJECT: הפרויקט שמכיל את קובץ האימג' של מערכת ההפעלה. בתמונות TPU, הערך הוא ubuntu-os-accelerator-images.

יצירת תבנית של הגדרות מכונה וירטואלית עם TPU שקשורה להזמנה

הפקודה הבאה יוצרת תבנית של הגדרות מכונה באמצעות אפשרות הצריכה שמוגבלת להזמנה:

gcloud

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
  --machine-type=MACHINE_TYPE \
  --maintenance-policy=TERMINATE \
  --instance-termination-action=DELETE \
  --reservation-affinity=specific \
  --provisioning-model=reservation-bound \
  --reservation=RESERVATION_NAME \
  --image-family=IMAGE_FAMILY \
  --image-project=IMAGE_PROJECT

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "INSTANCE_TEMPLATE_NAME",
    "properties": {
      "machineType": "MACHINE_TYPE",
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
          }
        }
      ],
      "scheduling": {
        "onHostMaintenance": "TERMINATE",
        "provisioningModel": "RESERVATION_BOUND",
        "instanceTerminationAction": "DELETE"
      },
      "reservationAffinity": {
        "consumeReservationType": "SPECIFIC_RESERVATION",
        "key": "compute.googleapis.com/reservation-name",
        "values": [
          "RESERVATION_NAME"
        ]
      },
      "networkInterfaces": [
        {
          "network": "global/networks/default"
        }
      ]
    }
  }' \
  "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates"

מחליפים את ה-placeholders הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • ‫INSTANCE_TEMPLATE_NAME: השם של התבנית של הגדרות המכונה.
  • ‫MACHINE_TYPE: סוג המכונה של ה-TPU VM, לדוגמה ct6e-standard-8t.
  • ‫RESERVATION_NAME: השם של ההזמנה הספציפית שרוצים להשתמש בה. בכל ההזמנות במצב 'כל הקיבולת', אפשר לטרגט בלוק או תת-בלוק על ידי ציון כתובת ה-URL להזמנת מקום באופן הבא:

    • מציינים בלוק:

      RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME
      
    • מציינים בלוק משנה:

      RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME/reservationSubBlocks/RESERVATION_SUBBLOCK_NAME
      
  • ‫IMAGE_FAMILY: משפחת קובצי האימג' של מערכת ההפעלה של ה-TPU VM. אם רוצים להתקין גרסה ספציפית של מערכת ההפעלה, משתמשים בדגל --image. מידע נוסף על קובצי אימג' של מערכת ההפעלה זמין במאמר קובצי אימג' של מערכת ההפעלה.

  • ‫IMAGE_PROJECT: הפרויקט שמכיל את קובץ האימג' של מערכת ההפעלה. בתמונות TPU, הערך הוא ubuntu-os-accelerator-images.

יצירת תבנית של הגדרות מכונה ל-TPU Flex-start VM

הפקודה הבאה יוצרת תבנית של הגדרות מכונה באמצעות אפשרות הצריכה "התחלה גמישה":

gcloud

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE \
    --instance-termination-action=DELETE \
    --provisioning-model=FLEX_START \
    --max-run-duration=DURATION \
    --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "INSTANCE_TEMPLATE_NAME",
    "properties": {
      "machineType": "MACHINE_TYPE",
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
          }
        }
      ],
      "scheduling": {
        "onHostMaintenance": "TERMINATE",
        "provisioningModel": "FLEX_START",
        "instanceTerminationAction": "DELETE",
        "maxRunDuration": {
          "seconds": "DURATION"
        }
      },
      "networkInterfaces": [
        {
          "network": "global/networks/default"
        }
      ]
    }
  }' \
  "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates"

מחליפים את ה-placeholders הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • ‫INSTANCE_TEMPLATE_NAME: השם של התבנית של הגדרות המכונה.
  • ‫MACHINE_TYPE: סוג המכונה של ה-TPU VM, לדוגמה ct6e-standard-8t.
  • ‫DURATION: משך הזמן המקסימלי שבו ה-TPU VM יכול לפעול. ב-REST, מציינים את זה כמספר שניות (לדוגמה, 3600 לשעה אחת או 604800 ל-7 ימים).
  • ‫IMAGE_FAMILY: משפחת קובצי האימג' של מערכת ההפעלה של ה-TPU VM. אם רוצים להתקין גרסה ספציפית של מערכת ההפעלה, משתמשים בדגל --image. מידע נוסף על קובצי אימג' של מערכת ההפעלה זמין במאמר קובצי אימג' של מערכת ההפעלה.
  • ‫IMAGE_PROJECT: הפרויקט שמכיל את קובץ האימג' של מערכת ההפעלה. בתמונות TPU, הערך הוא ubuntu-os-accelerator-images.

יצירת מדיניות עומס עבודה

צריך ליצור מדיניות עומס עבודה עם הפרמטר accelerator-topology (לדוגמה, 4x4,‏ 8x8 או 4x4x4). טופולוגיית המאיץ מגדירה את ה-MIG כך שיתייחס למכונות כפרוסה אחת מחוברת.

הפקודה הבאה יוצרת מדיניות עומסי עבודה לטופולוגיה ספציפית:

gcloud

gcloud compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \
  --type=high-throughput \
  --accelerator-topology=TOPOLOGY \
  --region=REGION

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "WORKLOAD_POLICY_NAME",
    "workloadPolicy": {
      "type": "HIGH_THROUGHPUT",
      "acceleratorTopology": "TOPOLOGY"
    }
  }' \
  "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies"

מחליפים את ה-placeholders הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • ‫WORKLOAD_POLICY_NAME: השם של מדיניות עומסי העבודה.
  • ‫TOPOLOGY: הטופולוגיה של מכונות ה-TPU הווירטואליות, לדוגמה 4x4x8. למידע נוסף על טופולוגיה לכל גרסה של TPU, ראו ארכיטקטורת מערכת.
  • ‫REGION: האזור של מדיניות עומסי העבודה.

יצירת MIG

כדי ליצור קבוצת MIG אזורית שמכילה פרוסת TPU עם כמה מארחים, משתמשים בפקודה הבאה:

gcloud

gcloud compute instance-groups managed create MIG_NAME \
   --size=MIG_SIZE \
   --target-size-policy-mode=bulk \
   --template=INSTANCE_TEMPLATE_URL \
   --zone=ZONE \
   --default-action-on-vm-failure=do-nothing \
   --workload-policy=WORKLOAD_POLICY_URL

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "MIG_NAME",
    "targetSize": MIG_SIZE,
    "targetSizePolicy": {
      "mode": "BULK"
    },
    "instanceTemplate": "INSTANCE_TEMPLATE_URL",
    "instanceLifecyclePolicy": {
      "defaultActionOnFailure": "DO_NOTHING"
    },
    "resourcePolicies": {
      "workloadPolicy": "WORKLOAD_POLICY_URL"
    }
  }' \
  "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers"

מחליפים את ה-placeholders הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • ‫MIG_NAME: השם של קבוצת ה-MIG.
  • ‫MIG_SIZE: הגודל של ה-MIG.
  • ‫INSTANCE_TEMPLATE_URL: כתובת ה-URL של תבנית של הגדרות מכונה שבה רוצים להשתמש כדי ליצור מכונות ב-MIG. כתובת ה-URL יכולה להכיל את המזהה או את השם של תבנית של הגדרות מכונה. מציינים אחד מהערכים הבאים:
    • לתבנית של הגדרות מכונה אזורית: projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • לתבנית גלובלית של הגדרות מכונה: INSTANCE_TEMPLATE_ID
  • ‫ZONE: האזור של ה-MIG.
  • ‫WORKLOAD_POLICY_URL: כתובת ה-URL של מדיניות עומסי העבודה שבה רוצים להשתמש כדי ליצור מכונות ב-MIG. לדוגמה: projects/PROJECT_ID/regions/WORKLOAD_POLICY_REGION/resourcePolicies/WORKLOAD_POLICY_NAME.

כדי ליצור קבוצת MIG אזורית שמכילה פרוסת TPU עם כמה מארחים, משתמשים בפקודה הבאה:

gcloud

gcloud compute instance-groups managed create MIG_NAME \
   --size=MIG_SIZE \
   --target-size-policy-mode=bulk \
   --template=INSTANCE_TEMPLATE_URL \
   --region=REGION \
   --default-action-on-vm-failure=do-nothing \
   --workload-policy=WORKLOAD_POLICY_URL \
   --target-distribution-shape=any-single-zone \
   --instance-redistribution-type=none

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "MIG_NAME",
    "targetSize": MIG_SIZE,
    "targetSizePolicy": {
      "mode": "BULK"
    },
    "instanceTemplate": "INSTANCE_TEMPLATE_URL",
    "instanceLifecyclePolicy": {
      "defaultActionOnFailure": "DO_NOTHING"
    },
    "resourcePolicies": {
      "workloadPolicy": "WORKLOAD_POLICY_URL"
    },
    "distributionPolicy": {
      "targetShape": "ANY_SINGLE_ZONE"
    },
    "updatePolicy": {
      "instanceRedistributionType": "NONE"
    }
  }' \
  "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers"

מחליפים את ה-placeholders הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
  • ‫MIG_NAME: השם של קבוצת ה-MIG.
  • ‫MIG_SIZE: מספר המכונות הווירטואליות ב-MIG.
  • ‫INSTANCE_TEMPLATE_URL: כתובת ה-URL של תבנית של הגדרות מכונה שבה רוצים להשתמש כדי ליצור מכונות ב-MIG. כתובת ה-URL יכולה להכיל את המזהה או את השם של תבנית של הגדרות מכונה. מציינים אחד מהערכים הבאים:
    • לתבנית של הגדרות מכונה אזורית: projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • לתבנית גלובלית של הגדרות מכונה: INSTANCE_TEMPLATE_ID
  • ‫ZONE: האזור של ה-MIG.
  • ‫REGION: האזור של קבוצת ה-MIG.
  • ‫WORKLOAD_POLICY_URL: כתובת ה-URL של מדיניות עומסי העבודה שבה רוצים להשתמש כדי ליצור מכונות ב-MIG. לדוגמה: projects/PROJECT_ID/regions/WORKLOAD_POLICY_REGION/resourcePolicies/WORKLOAD_POLICY_NAME.

יצירת מכונות וירטואליות עם שמות בהתאמה אישית ב-MIG

אפשר ליצור מכונות וירטואליות ב-MIG על ידי ציון שמות בהתאמה אישית לכל מכונה וירטואלית. האפשרות הזו שימושית לניפוי באגים ולוודא שהמכונות נוצרות בסדר מסוים.

קבוצות MIG שמכילות פרוסת TPU עם כמה מארחים משתמשות במדיניות של מצב Bulk של גודל היעד. כשיוצרים מכונות וירטואליות עם שמות בהתאמה אישית בקבוצת MIG כזו, חלים הכללים הבאים:

  • קודם צריך לוודא שאין מכונות וירטואליות בקבוצת המכונות המנוהלת. אם לקבוצת ה-VM יש מכונות וירטואליות, צריך לשנות את הגודל של קבוצת ה-VM לגודל היעד 0 או ליצור קבוצת VM אחרת בגודל היעד 0.

  • אפשר להשתמש רק ב-API בארכיטקטורת REST כדי ליצור מכונות וירטואליות עם שמות בהתאמה אישית.

כדי ליצור מכונות וירטואליות עם שמות בהתאמה אישית, משתמשים באחת מהשיטות הבאות של API בארכיטקטורת REST:

  • לקבוצת MIG אזורית, משתמשים ב-instanceGroupManagers.createInstances.

     POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME/createInstances
     {
       "instances": [
         {
           "name": "INSTANCE_NAME_1"
         },
         {
           "name": "INSTANCE_NAME_2"
         },
         ...
       ]
     }
     

  • לקבוצת MIG אזורית, משתמשים ב-regionInstanceGroupManagers.createInstances.

     POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME/createInstances
     {
       "instances": [
         {
           "name": "INSTANCE_NAME_1"
         },
         {
           "name": "INSTANCE_NAME_2"
         },
         ...
       ]
     }
     

מחליפים את ה-placeholders הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט שבו נמצאת קבוצת ה-MIG.
  • ‫ZONE: האזור של ה-MIG.
  • ‫REGION: האזור של ה-MIG.
  • ‫INSTANCE_NAME_1,2,..: השמות של המכונות הווירטואליות שרוצים להוסיף לקבוצת ה-MIG שצוינה.

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