使用单主机 Cloud TPU 切片创建 MIG

本文档介绍如何使用多个独立的单主机 TPU 切片创建代管式实例组 (MIG)。

前提条件

满足以下前提条件:

  1. 按照为 TPU 设置项目中的说明,为 TPU 创建项目。
  2. 按照规划资源中的说明,确定您的 TPU 要求。

使用多个单主机 TPU 切片创建 MIG

如需在 MIG 中创建多个独立的 TPU 虚拟机,请执行以下操作:

  1. 创建一个实例模板。
  2. 创建 MIG。

创建实例模板

实例模板配置因您使用的使用选项而异:按需、竞价型、预留或灵活启动。如需详细了解 使用选项,请参阅 规划 TPU 资源

为按需 TPU 虚拟机创建实例模板

以下命令会创建一个使用按需使用选项的实例模板:

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",
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
          }
        }
      ],
      "scheduling": {
        "onHostMaintenance": "TERMINATE"
      },
      "networkInterfaces": [
        {
          "network": "global/networks/default"
        }
      ]
    }
  }' \
  "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates"

替换以下占位符:

  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • INSTANCE_TEMPLATE_NAME:实例模板的名称。
  • MACHINE_TYPE:TPU 虚拟机的机器类型(例如 ct6e-standard-8t)。
  • IMAGE_FAMILY:TPU 虚拟机的 操作系统映像系列 。如需安装特定操作系统版本,请使用 --image 标志。如需详细了解操作系统映像,请参阅操作系统映像
  • IMAGE_PROJECT:包含操作系统映像的项目。 对于 TPU 映像,此值为 ubuntu-os-accelerator-images

为 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"

替换以下占位符:

  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • INSTANCE_TEMPLATE_NAME:实例模板的名称。
  • MACHINE_TYPE:TPU 虚拟机的机器类型(例如 ct6e-standard-8t)。
  • IMAGE_FAMILY:TPU 虚拟机的 操作系统映像系列 。如需安装特定操作系统版本,请使用 --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"

替换以下占位符:

  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • INSTANCE_TEMPLATE_NAME:实例模板的名称。
  • MACHINE_TYPE:TPU 虚拟机的机器类型 (例如 ct6e-standard-8t)。
  • RESERVATION_NAME:您要使用的特定预留的名称。
  • IMAGE_FAMILY:TPU 虚拟机的 操作系统映像系列 。如需安装特定操作系统版本,请使用 --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 \
    --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"

替换以下占位符:

  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • INSTANCE_TEMPLATE_NAME:实例模板的名称。
  • MACHINE_TYPE:TPU 虚拟机的机器类型 (例如 ct6e-standard-8t)。
  • DURATION:TPU 虚拟机的最长运行时间。 对于 REST,请将其指定为包含秒数 后跟“s”的字符串(例如,1 小时为 3600s,7 天为 604800s)。
  • IMAGE_FAMILY:TPU 虚拟机的 操作系统映像系列 。如需安装特定操作系统版本,请使用 --image 标志。如需详细了解操作系统映像,请参阅操作系统映像
  • IMAGE_PROJECT:包含操作系统映像的项目。 对于 TPU 映像,此值为 ubuntu-os-accelerator-images

创建 MIG

如需创建包含单主机 TPU 切片的可用区级 MIG,请使用以下命令:

gcloud

gcloud compute instance-groups managed create MIG_NAME \
    --size=MIG_SIZE \
    --template=INSTANCE_TEMPLATE_URL \
    --zone=ZONE

REST

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

替换以下占位符:

  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • MIG_NAME:MIG 的名称。
  • MIG_SIZE:MIG 的大小。
  • INSTANCE_TEMPLATE_URL:您要用于在 MIG 中创建实例的实例模板的网址。网址可以包含实例模板的 ID 或名称。请指定以下某个值:
    • 对于区域级实例模板:projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • 对于全球实例模板:INSTANCE_TEMPLATE_ID
  • ZONE:您的 MIG 的可用区

如需创建包含单主机 TPU 切片的区域级 MIG,请使用以下命令:

gcloud

gcloud compute instance-groups managed create MIG_NAME \
    --size=MIG_SIZE \
    --template=INSTANCE_TEMPLATE_URL \
    --region=REGION \
    --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,
    "instanceTemplate": "INSTANCE_TEMPLATE_URL",
    "distributionPolicy": {
      "targetShape": "ANY_SINGLE_ZONE"
    },
    "updatePolicy": {
      "instanceRedistributionType": "NONE"
    }
  }' \
  "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers"

替换以下占位符:

  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • MIG_NAME:MIG 的名称。
  • MIG_SIZE:MIG 中的虚拟机数量。
  • INSTANCE_TEMPLATE_URL:您要用于在 MIG 中创建实例的实例模板的网址。网址可以包含实例模板的 ID 或名称。请指定以下某个值:
    • 对于区域级实例模板:projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • 对于全球实例模板:INSTANCE_TEMPLATE_ID
  • ZONE:您希望预配 MIG 的可用区
  • REGION:您希望预配 MIG 的区域

在 MIG 中创建具有自定义名称的虚拟机

您可以在 MIG 中创建虚拟机,并为每个虚拟机指定自定义名称。这对于调试和确保实例按特定顺序创建非常有用。

gcloud

使用 create-instance命令 创建具有自定义名称的虚拟机,并指定 --instance 标志。如需创建多个虚拟机,请为每个虚拟机重复该命令。否则,请使用 REST API 方法在单个请求中指定多个虚拟机。

  • 对于可用区级 MIG,请使用以下命令:

    gcloud compute instance-groups managed create-instance MIG_NAME \
        --zone=ZONE \
        --instance=INSTANCE_NAME
    
  • 对于区域级 MIG,请使用以下命令:

    gcloud compute instance-groups managed create-instance MIG_NAME \
        --region=REGION \
        --instance=INSTANCE_NAME
    

替换以下占位符:

  • MIG_NAME:MIG 的名称。
  • ZONE:MIG 的可用区
  • REGION:MIG 的 区域
  • INSTANCE_NAME:要添加到指定 MIG 的虚拟机的名称。

REST

使用以下 REST API 方法之一创建具有自定义名称的虚拟机:

  • 对于可用区级 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"
         },
         ...
       ]
     }
     

替换以下占位符:

  • PROJECT_ID:MIG 所在项目的 ID。
  • ZONE:MIG 的可用区
  • REGION:MIG 的 区域
  • INSTANCE_NAME_1,2,..:要添加到指定 MIG 的虚拟机的名称 。

后续步骤