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

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

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

צריך לוודא שמתקיימות הדרישות הבאות:

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

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

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

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

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

יצירת תבנית של הגדרות מכונה עבור 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 הווירטואלית. אם רוצים להתקין גרסה ספציפית של מערכת ההפעלה, משתמשים בדגל --image. מידע נוסף על תמונות של מערכת ההפעלה זמין במאמר תמונות של מערכת ההפעלה.
  • ‫IMAGE_PROJECT: הפרויקט שמכיל את תמונת מערכת ההפעלה. בתמונות TPU, הערך הוא ubuntu-os-accelerator-images.

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

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

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

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

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

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

  • קודם צריך לוודא שאין מכונות וירטואליות ב-MIG. אם ב-MIG יש מכונות וירטואליות, צריך לשנות את הגודל של ה-MIG לגודל היעד 0 או ליצור עוד MIG עם גודל היעד 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 שצוינה.

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