Crea un MIG con una porción de Cloud TPU de varios hosts

En este documento, se describe cómo crear un grupo de instancias administrado (MIG) con un segmento de TPU de varios hosts.

Requisitos previos

Completa los siguientes requisitos previos:

  1. Crea un proyecto para tus TPU como se describe en Configura un proyecto para las TPU.
  2. Determina tus requisitos de TPU como se describe en Planifica tus recursos.

Crea un MIG con porciones de TPU de varios hosts

  1. Crea una plantilla de instancias.
  2. Crea una política de cargas de trabajo.
  3. Crea el MIG.

Crea una plantilla de instancias

El comando para crear una plantilla de instancias depende de la opción de consumo que uses: a pedido, Spot, vinculada a la reserva o de inicio flexible. Para obtener más información sobre las opciones de consumo, consulta Planifica tus recursos de TPU.

Crea una plantilla de instancias para una VM de TPU bajo demanda

El siguiente comando crea una plantilla de instancias con la opción de consumo a pedido:

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"

Reemplaza los marcadores de posición que se indican más abajo:

  • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
  • INSTANCE_TEMPLATE_NAME: El nombre de la plantilla de instancias
  • MACHINE_TYPE: Es el tipo de máquina de la VM de TPU, por ejemplo, ct6e-standard-8t.
  • IMAGE_FAMILY: Es la familia de imágenes del SO para la VM de TPU. Si deseas instalar una versión específica del SO, usa la marca --image. Para obtener más información sobre las imágenes de SO, consulta Imágenes de SO.
  • IMAGE_PROJECT: Es el proyecto que contiene la imagen de SO. En el caso de las imágenes de TPU, es ubuntu-os-accelerator-images.

Crea una plantilla de instancias para una VM Spot de TPU

El siguiente comando crea una plantilla de instancias con la opción de consumo de instancias 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"

Reemplaza los marcadores de posición que se indican más abajo:

  • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
  • INSTANCE_TEMPLATE_NAME: El nombre de la plantilla de instancias
  • MACHINE_TYPE: Es el tipo de máquina de la VM de TPU, por ejemplo, ct6e-standard-8t.
  • IMAGE_FAMILY: Es la familia de imágenes del SO para la VM de TPU. Si deseas instalar una versión específica del SO, usa la marca --image. Para obtener más información sobre las imágenes de SO, consulta Imágenes de SO.
  • IMAGE_PROJECT: Es el proyecto que contiene la imagen de SO. En el caso de las imágenes de TPU, es ubuntu-os-accelerator-images.

Crea una plantilla de instancias para una VM vinculada a una reserva de TPU

El siguiente comando crea una plantilla de instancias con la opción de consumo vinculada a la reserva:

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"

Reemplaza los marcadores de posición que se indican más abajo:

  • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
  • INSTANCE_TEMPLATE_NAME: El nombre de la plantilla de instancias
  • MACHINE_TYPE: Es el tipo de máquina de la VM de TPU, por ejemplo, ct6e-standard-8t.
  • RESERVATION_NAME: Es el nombre de la reserva específica que se consumirá. En el caso de las reservas en el modo All Capacity, puedes segmentar un bloque o subbloque especificando la URL de la reserva de la siguiente manera:

    • Especifica un bloque:

      RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME
      
    • Especifica un subbloque:

      RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME/reservationSubBlocks/RESERVATION_SUBBLOCK_NAME
      
  • IMAGE_FAMILY: Es la familia de imágenes del SO para la VM de TPU. Si quieres instalar una versión específica del SO, usa la marca --image. Para obtener más información sobre las imágenes del SO, consulta Imágenes del SO.

  • IMAGE_PROJECT: Es el proyecto que contiene la imagen del SO. En el caso de las imágenes de TPU, es ubuntu-os-accelerator-images.

Crea una plantilla de instancias para una VM de TPU con inicio flexible

El siguiente comando crea una plantilla de instancias con la opción de consumo de inicio flexible:

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"

Reemplaza los marcadores de posición que se indican más abajo:

  • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
  • INSTANCE_TEMPLATE_NAME: El nombre de la plantilla de instancias
  • MACHINE_TYPE: Es el tipo de máquina de la VM de TPU, por ejemplo, ct6e-standard-8t.
  • DURATION: Es la duración máxima durante la cual se puede ejecutar la VM de TPU. En el caso de REST, especifica este valor como una cantidad de segundos (por ejemplo, 3600 para 1 hora o 604800 para 7 días).
  • IMAGE_FAMILY: Es la familia de imágenes del SO para la VM de TPU. Si deseas instalar una versión específica del SO, usa la marca --image. Para obtener más información sobre las imágenes de SO, consulta Imágenes de SO.
  • IMAGE_PROJECT: Es el proyecto que contiene la imagen de SO. En el caso de las imágenes de TPU, es ubuntu-os-accelerator-images.

Crear una política de cargas de trabajo

Debes crear una política de carga de trabajo con el parámetro accelerator-topology (por ejemplo, 4x4, 8x8 o 4x4x4). La topología del acelerador configura el MIG para que trate las instancias como una sola porción interconectada.

El siguiente comando crea una política de cargas de trabajo para una topología específica:

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"

Reemplaza los marcadores de posición que se indican más abajo:

  • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
  • WORKLOAD_POLICY_NAME: Es el nombre de tu política de carga de trabajo.
  • TOPOLOGY: Es la topología de las VMs de TPU, por ejemplo, 4x4x8. Para obtener más información sobre la topología de cada versión de TPU, consulta Arquitectura del sistema.
  • REGION: Es la región de tu política de carga de trabajo.

Crear un MIG

Para crear un MIG zonal que contenga una porción de TPU de varios hosts, usa el siguiente comando:

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"

Reemplaza los marcadores de posición que se indican más abajo:

  • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
  • MIG_NAME: Es el nombre de tu MIG.
  • MIG_SIZE: Es el tamaño del MIG.
  • INSTANCE_TEMPLATE_URL: Es la URL de la plantilla de instancias que deseas usar para crear instancias en el MIG. La URL puede contener el ID o el nombre de la plantilla de instancias. Especifica uno de los siguientes valores:
    • Para una plantilla de instancias regional: projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • Para una plantilla de instancias global: INSTANCE_TEMPLATE_ID
  • ZONE: Es la zona de tu MIG.
  • WORKLOAD_POLICY_URL: URL de la política de cargas de trabajo que deseas usar para crear instancias en el MIG. Por ejemplo: projects/PROJECT_ID/regions/WORKLOAD_POLICY_REGION/resourcePolicies/WORKLOAD_POLICY_NAME

Para crear un MIG regional que contenga una porción de TPU de varios hosts, usa el siguiente comando:

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"

Reemplaza los marcadores de posición que se indican más abajo:

  • PROJECT_ID: Es el ID de tu proyecto de Google Cloud .
  • MIG_NAME: Es el nombre de tu MIG.
  • MIG_SIZE: Es la cantidad de VMs en el MIG.
  • INSTANCE_TEMPLATE_URL: Es la URL de la plantilla de instancias que deseas usar para crear instancias en el MIG. La URL puede contener el ID o el nombre de la plantilla de instancias. Especifica uno de los siguientes valores:
    • Para una plantilla de instancias regional: projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • Para una plantilla de instancias global: INSTANCE_TEMPLATE_ID
  • ZONE: Es la zona de tu MIG.
  • REGION: Es la región de tu MIG.
  • WORKLOAD_POLICY_URL: URL de la política de cargas de trabajo que deseas usar para crear instancias en el MIG. Por ejemplo: projects/PROJECT_ID/regions/WORKLOAD_POLICY_REGION/resourcePolicies/WORKLOAD_POLICY_NAME

Crea VMs con nombres personalizados en un MIG

Puedes crear VMs en un MIG especificando nombres personalizados para cada VM. Esto es útil para depurar y garantizar que las instancias se creen en un orden específico.

Los MIG que contienen una porción de TPU de varios hosts usan el modo masivo de la política de tamaño objetivo. Cuando crees VMs con nombres personalizados en un MIG de este tipo, se aplicará lo siguiente:

  • Primero, debes verificar que el MIG no tenga VMs. Si el MIG tiene VMs, debes cambiar el tamaño del MIG al tamaño objetivo 0 o crear otro MIG con el tamaño objetivo 0.

  • Solo puedes usar la API de REST para crear VMs con nombres personalizados.

Crea VMs con nombres personalizados usando uno de los siguientes métodos de la API de REST:

  • Para un MIG zonal, usa 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"
         },
         ...
       ]
     }
     

  • Para un MIG regional, usa 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"
         },
         ...
       ]
     }
     

Reemplaza los marcadores de posición que se indican más abajo:

  • PROJECT_ID: Es el ID del proyecto en el que existe el MIG.
  • ZONE: Es la zona del MIG.
  • REGION: Es la región del MIG.
  • INSTANCE_NAME_1,2,..: Nombres de las VMs que se agregarán al MIG especificado.

¿Qué sigue?