Créer un MIG avec une tranche Cloud TPU multihôte

Ce document explique comment créer un groupe d'instances géré (MIG) avec une tranche de TPU multi-hôte.

Prérequis

Remplissez les conditions préalables suivantes :

  1. Créez un projet pour vos TPU comme décrit dans Configurer un projet pour les TPU.
  2. Déterminez vos besoins en TPU comme décrit dans Planifier vos ressources.

Créer un MIG avec des tranches TPU multi-hôtes

  1. Créer un modèle d'instance.
  2. Créez une règle de charge de travail.
  3. Créez le MIG.

Créer un modèle d'instance

La commande permettant de créer un modèle d'instance dépend de l'option de consommation que vous utilisez : à la demande, Spot, liée à une réservation ou démarrage flexible. Pour en savoir plus sur les options de consommation, consultez Planifier vos ressources TPU.

Créer un modèle d'instance pour une VM TPU à la demande

La commande suivante crée un modèle d'instance à l'aide de l'option de consommation à la demande :

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"

Remplacez les espaces réservés suivants :

  • PROJECT_ID : ID de votre projet Google Cloud .
  • INSTANCE_TEMPLATE_NAME : nom de votre modèle d'instance.
  • MACHINE_TYPE : type de machine de la VM TPU, par exemple ct6e-standard-8t.
  • IMAGE_FAMILY : famille d'images d'OS pour la VM TPU. Si vous souhaitez installer une version d'OS spécifique, utilisez l'option --image. Pour en savoir plus sur les images d'OS, consultez Images d'OS.
  • IMAGE_PROJECT : projet contenant l'image de l'OS. Pour les images TPU, il s'agit de ubuntu-os-accelerator-images.

Créer un modèle d'instance pour une VM Spot TPU

La commande suivante crée un modèle d'instance à l'aide de l'option de consommation 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"

Remplacez les espaces réservés suivants :

  • PROJECT_ID : ID de votre projet Google Cloud .
  • INSTANCE_TEMPLATE_NAME : nom de votre modèle d'instance.
  • MACHINE_TYPE : type de machine de la VM TPU, par exemple ct6e-standard-8t.
  • IMAGE_FAMILY : famille d'images d'OS pour la VM TPU. Si vous souhaitez installer une version d'OS spécifique, utilisez l'option --image. Pour en savoir plus sur les images d'OS, consultez Images d'OS.
  • IMAGE_PROJECT : projet contenant l'image de l'OS. Pour les images TPU, il s'agit de ubuntu-os-accelerator-images.

Créer un modèle d'instance pour une VM TPU liée à une réservation

La commande suivante crée un modèle d'instance à l'aide de l'option de consommation liée à la réservation :

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"

Remplacez les espaces réservés suivants :

  • PROJECT_ID : ID de votre projet Google Cloud .
  • INSTANCE_TEMPLATE_NAME : nom de votre modèle d'instance.
  • MACHINE_TYPE : type de machine de la VM TPU, par exemple ct6e-standard-8t.
  • RESERVATION_NAME : nom de la réservation spécifique à consommer. Pour toutes les réservations en mode Capacité, vous pouvez cibler un bloc ou un sous-bloc en spécifiant l'URL de réservation comme suit :

    • Spécifiez un bloc :

      RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME
      
    • Spécifiez un sous-bloc :

      RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME/reservationSubBlocks/RESERVATION_SUBBLOCK_NAME
      
  • IMAGE_FAMILY : famille d'images de l'OS pour la VM TPU. Si vous souhaitez installer une version d'OS spécifique, utilisez l'option --image. Pour en savoir plus sur les images de l'OS, consultez Images de l'OS.

  • IMAGE_PROJECT : projet contenant l'image d'OS. Pour les images TPU, il s'agit de ubuntu-os-accelerator-images.

Créer un modèle d'instance pour une VM TPU à démarrage flexible

La commande suivante crée un modèle d'instance à l'aide de l'option de consommation à démarrage 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"

Remplacez les espaces réservés suivants :

  • PROJECT_ID : ID de votre projet Google Cloud .
  • INSTANCE_TEMPLATE_NAME : nom de votre modèle d'instance.
  • MACHINE_TYPE : type de machine de la VM TPU, par exemple ct6e-standard-8t.
  • DURATION : durée maximale d'exécution de la VM TPU. Pour REST, spécifiez cette valeur en secondes (par exemple, 3600 pour une heure ou 604800 pour sept jours).
  • IMAGE_FAMILY : famille d'images de l'OS pour la VM TPU. Si vous souhaitez installer une version d'OS spécifique, utilisez l'option --image. Pour en savoir plus sur les images d'OS, consultez Images d'OS.
  • IMAGE_PROJECT : projet contenant l'image de l'OS. Pour les images TPU, il s'agit de ubuntu-os-accelerator-images.

Créer une règle de charge de travail

Vous devez créer une règle de charge de travail avec le paramètre accelerator-topology (par exemple, 4x4, 8x8 ou 4x4x4). La topologie de l'accélérateur configure le MIG pour qu'il traite les instances comme une seule tranche interconnectée.

La commande suivante crée une règle de charge de travail pour une topologie spécifique :

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"

Remplacez les espaces réservés suivants :

  • PROJECT_ID : ID de votre projet Google Cloud .
  • WORKLOAD_POLICY_NAME : nom de votre règle de charge de travail.
  • TOPOLOGY : topologie des VM TPU, par exemple 4x4x8. Pour en savoir plus sur la topologie de chaque version de TPU, consultez Architecture du système.
  • REGION : région de votre règle de charge de travail.

Créer un MIG

Pour créer un MIG zonal contenant une tranche de TPU multi-hôte, utilisez la commande suivante :

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"

Remplacez les espaces réservés suivants :

  • PROJECT_ID : ID de votre projet Google Cloud .
  • MIG_NAME : nom de votre MIG.
  • MIG_SIZE : taille du MIG.
  • INSTANCE_TEMPLATE_URL : URL du modèle d'instance que vous souhaitez utiliser pour créer des instances dans le MIG. L'URL peut contenir l'ID ou le nom du modèle d'instance. Spécifiez une des valeurs suivantes :
    • Pour un modèle d'instance régional : projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • Pour un modèle d'instance global : INSTANCE_TEMPLATE_ID
  • ZONE : zone de votre MIG.
  • WORKLOAD_POLICY_URL : URL de la règle de charge de travail que vous souhaitez utiliser pour créer des instances dans le MIG. Exemple : projects/PROJECT_ID/regions/WORKLOAD_POLICY_REGION/resourcePolicies/WORKLOAD_POLICY_NAME.

Pour créer un MIG régional contenant une tranche de TPU multi-hôte, utilisez la commande suivante :

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"

Remplacez les espaces réservés suivants :

  • PROJECT_ID : ID de votre projet Google Cloud .
  • MIG_NAME : nom de votre MIG.
  • MIG_SIZE : nombre de VM du MIG.
  • INSTANCE_TEMPLATE_URL : URL du modèle d'instance que vous souhaitez utiliser pour créer des instances dans le MIG. L'URL peut contenir l'ID ou le nom du modèle d'instance. Spécifiez une des valeurs suivantes :
    • Pour un modèle d'instance régional : projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • Pour un modèle d'instance global : INSTANCE_TEMPLATE_ID
  • ZONE : zone de votre MIG.
  • REGION : région de votre MIG.
  • WORKLOAD_POLICY_URL : URL de la règle de charge de travail que vous souhaitez utiliser pour créer des instances dans le MIG. Exemple : projects/PROJECT_ID/regions/WORKLOAD_POLICY_REGION/resourcePolicies/WORKLOAD_POLICY_NAME.

Créer des VM avec des noms personnalisés dans un MIG

Vous pouvez créer des VM dans un MIG en spécifiant des noms personnalisés pour chaque VM. Cela est utile pour le débogage et pour s'assurer que les instances sont créées dans un ordre spécifique.

Les MIG contenant une tranche de TPU multi-hôte utilisent le mode groupé de la règle de taille cible. Lorsque vous créez des VM avec des noms personnalisés dans un tel MIG, les règles suivantes s'appliquent :

  • Vous devez d'abord vérifier que le MIG ne contient pas de VM. Si le MIG comporte des VM, vous devez soit redimensionner le MIG pour cibler la taille 0, soit créer un autre MIG avec la taille cible 0.

  • Vous ne pouvez utiliser l'API REST que pour créer des VM avec des noms personnalisés.

Créez des VM avec des noms personnalisés à l'aide de l'une des méthodes de l'API REST suivantes :

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

  • Pour un MIG régional, utilisez 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"
         },
         ...
       ]
     }
     

Remplacez les espaces réservés suivants :

  • PROJECT_ID : ID du projet dans lequel se trouve le MIG.
  • ZONE : zone du MIG.
  • REGION : région du MIG.
  • INSTANCE_NAME_1,2,.. : noms des VM à ajouter au MIG spécifié.

Étapes suivantes