Créer un MIG avec des types de machines H4D et un démarrage flexible

Ce tutoriel vous explique comment créer un groupe d'instances géré (MIG) qui utilise un type de machine H4D. Le MIG utilise le modèle de consommation à démarrage flexible du planificateur de charges de travail dynamique pour obtenir des ressources de calcul pendant sept jours maximum.

La création d'un MIG vous permet de gérer plusieurs machines virtuelles (VM) comme une seule entité. Chaque VM d'un MIG est basée sur un modèle d'instance. En gérant automatiquement les VM du groupe, les MIG offrent une disponibilité et une évolutivité élevées. Pour en savoir plus sur les MIG, consultez Groupes d'instances gérés.

Pour en savoir plus sur les options de création de VM et de clusters HPC, consultez Présentation de la création de clusters HPC.

Ce tutoriel est destiné aux ingénieurs HPC, aux administrateurs et opérateurs de plate-forme, ainsi qu'aux spécialistes des données et de MPI qui souhaitent créer un groupe d'instances HPC interconnectées pour les charges de travail de courte durée. Les instances résultantes n'utilisent pas d'orchestrateur pour la gestion des instances ni la planification des jobs.

Facultatif : Demander un quota préemptif

Les instances de VM ajoutées au MIG consomment le quota régional. Les quotas d'instances de VM, de groupes d'instances, de processeurs et de disques peuvent être consommés par n'importe quelle instance de VM de la région, indépendamment de sa zone.

Lorsque vous utilisez Flex-start, le quota peut être un quota standard ou un quota préemptif.

  • Quota standard : si votre projet ne dispose pas de quota préemptif et que vous n'avez jamais demandé de quota préemptif, les ressources d'instance consomment le quota standard.
  • Quota préemptif : demander des quotas préemptifs peut vous aider à améliorer la disponibilité des quotas en fournissant des quotas distincts pour les ressources temporaires. Toutefois, une fois que Compute Engine vous a accordé un quota préemptif dans une région, toutes les ressources applicables ne consomment que ce quota. Si ce quota est épuisé, vous devez demander un quota préemptif supplémentaire pour les ressources de VM.

Vous pouvez demander un quota de ressources préemptibles en suivant les étapes décrites dans Demander un ajustement de quota.

Types de quotas nécessaires

Pour utiliser des groupes d'instances, vous devez disposer d'un quota pour toutes les ressources utilisées par le groupe (par exemple, le quota de processeurs) et d'un quota pour la ressource du groupe elle-même. Pour les instances H4D, les types de quotas suivants peuvent être utilisés, en fonction du type de machine utilisé par les instances :

Ressource Quota standard Quota préemptif
Processeurs CPUS_PER_VM_FAMILY Preemptible CPUs
Disques SSD locaux Local SSD per machine family (GB) Preemptible Local SSDs (GB)

Pour créer les ressources de ce tutoriel, le quota régional supplémentaire suivant peut être requis :

  • Groupe d'instances géré zonal (zone unique) : Instance group managers et Instance groups
  • Google Cloud Hyperdisk :

    • Hyperdisk Balanced Capacity (GB)
    • Hyperdisk Balanced Throughput (MB/s)
    • Hyperdisk Balanced IOPS

Facultatif : Créez des réseaux VPC

Sauf si vous choisissez de désactiver cette fonction, chaque projet dispose d'un réseau par défaut, qui peut être utilisé pour fournir une connectivité réseau à vos instances. Lorsque vous créez une VM, vous pouvez spécifier un réseau et un sous-réseau VPC. Si vous omettez cette configuration, le réseau et le sous-réseau par défaut sont utilisés.

Les instances H4D peuvent être configurées pour utiliser Cloud RDMA. Cloud RDMA offre des fonctionnalités de messagerie fiables à faible latence en utilisant un pilote réseau IRDMA qui prend en charge l'accès direct à la mémoire à distance (RDMA) entre les instances Compute Engine.

Pour ce tutoriel :

  • Si vous souhaitez configurer les instances H4D pour qu'elles utilisent Cloud RDMA, suivez les étapes de cette section.
  • Si vous ne souhaitez pas utiliser Cloud RDMA, vous pouvez ignorer cette section et utiliser le réseau par défaut.

Les instances compatibles avec RDMA nécessitent au moins deux interfaces réseau (NIC) :

  • Type de carte réseau GVNIC : utilise le pilote gve pour le trafic TCP/IP et Internet pour la communication normale entre VM et entre VM et Internet.
  • Type de carte réseau IRDMA : utilise les pilotes IDPF/iRDMA pour la mise en réseau Cloud RDMA entre les instances.

Les instances qui utilisent Cloud RDMA ne peuvent avoir qu'une seule interface IRDMA. Vous pouvez ajouter jusqu'à huit interfaces réseau GVNIC supplémentaires, pour un total de 10 cartes d'interface réseau par instance.

Pour configurer les réseaux VPC Falcon à utiliser avec vos instances, vous pouvez suivre les instructions de la documentation ou utiliser le script fourni.

Guides d'instructions

Pour créer les réseaux, vous pouvez suivre les instructions suivantes :

Script

Vous pouvez créer jusqu'à neuf interfaces réseau GVNIC et une interface réseau IRDMA par instance. Chaque interface réseau doit être associée à un réseau distinct. Pour créer les réseaux, vous pouvez utiliser le script suivant, qui crée deux réseaux pour GVNIC et un réseau pour IRDMA.

  1. Facultatif : Avant d'exécuter le script, listez les profils réseau RDMA pour vérifier qu'il en existe un.
      gcloud beta compute network-profiles list
      
  2. Copiez le code suivant et exécutez-le dans une fenêtre de shell Linux.

      #!/bin/bash
      # Set the number of GVNIC interfaces to create. You can create up to 9.
      NUM_GVNIC=NUMBER_OF_GVNIC
    
      # Create standard VPC (networks and subnets) for the GVNIC interfaces
        for N in $(seq 0 $(($NUM_GVNIC - 1))); do
          gcloud compute networks create GVNIC_NAME_PREFIX-net-$N \
              --subnet-mode=custom
    
          gcloud compute networks subnets create GVNIC_NAME_PREFIX-sub-$N \
              --network=GVNIC_NAME_PREFIX-net-$N \
              --region=REGION \
              --range=10.$N.0.0/16
    
          gcloud compute firewall-rules create GVNIC_NAME_PREFIX-internal-$N \
              --network=GVNIC_NAME_PREFIX-net-$N \
              --action=ALLOW \
              --rules=tcp:0-65535,udp:0-65535,icmp \
              --source-ranges=10.0.0.0/8
      done
    
      # Create SSH firewall rules
      gcloud compute firewall-rules create GVNIC_NAME_PREFIX-ssh \
          --network=GVNIC_NAME_PREFIX-net-0 \
          --action=ALLOW \
          --rules=tcp:22 \
          --source-ranges=IP_RANGE
    
      # Optional: Create a firewall rule for the external IP address for the
      #  first GVNIC network interface
      gcloud compute firewall-rules create GVNIC_NAME_PREFIX-allow-ping-net-0 \
          --network=GVNIC_NAME_PREFIX-net-0 \
          --action=ALLOW \
          --rules=icmp \
          --source-ranges=IP_RANGE
    
      # Create a network for the RDMA over Falcon network interface
      gcloud beta compute networks create RDMA_NAME_PREFIX-irdma \
          --network-profile=ZONE-vpc-falcon \
          --subnet-mode custom
    
      # Create a subnet for the RDMA network
      gcloud beta compute networks subnets create RDMA_NAME_PREFIX-irdma-sub \
          --network=RDMA_NAME_PREFIX-irdma \
          --region=REGION \
          --range=10.2.0.0/16  # offset to avoid overlap with GVNIC subnet ranges
      

    Remplacez les éléments suivants :

    • NUMBER_OF_GVNIC : nombre d'interfaces gVNIC à créer. Spécifiez un nombre compris entre 1 et 9.
    • GVNIC_NAME_PREFIX : préfixe de nom à utiliser pour le réseau et le sous-réseau VPC standards qui utilisent un type de carte réseau GVNIC.
    • REGION : région dans laquelle vous souhaitez créer les réseaux. Il doit correspondre à la zone spécifiée pour l'indicateur --network-profile lors de la création du réseau RDMA. Par exemple, si vous spécifiez la zone europe-west4-b, votre région est europe-west4.
    • IP_RANGE : plage d'adresses IP en dehors du réseau VPC à utiliser pour les règles de pare-feu SSH. Il est recommandé de spécifier les plages d'adresses IP spécifiques à partir desquelles vous devez autoriser l'accès, plutôt que toutes les sources IPv4 ou IPv6. N'utilisez pas 0.0.0.0/0 ni ::/0 comme plage source, car cela autorise le trafic provenant de toutes les sources IPv4 ou IPv6, y compris celles en dehors de Google Cloud.
    • RDMA_NAME_PREFIX : préfixe de nom à utiliser pour le réseau VPC et le sous-réseau qui utilisent le type de carte réseau IRDMA.
    • ZONE : zone dans laquelle vous souhaitez créer les réseaux et les instances de calcul. Utilisez us-central1-a ou europe-west4-b.
  3. Facultatif : Pour vérifier que les ressources de réseau VPC ont bien été créées, vérifiez les paramètres réseau dans la console Google Cloud  :

    1. Dans la console Google Cloud , accédez à la page Réseaux VPC.

      Accéder aux réseaux VPC

    2. Recherchez dans la liste les réseaux que vous avez créés à l'étape précédente.
    3. Pour afficher les sous-réseaux, les règles de pare-feu et les autres paramètres réseau, cliquez sur le nom du réseau.

Créer un modèle d'instance

Pour utiliser l'option de consommation "Démarrage flexible", vous devez créer un MIG vide, puis créer une demande de redimensionnement pour ce MIG. Lorsque la capacité demandée devient disponible, Compute Engine la provisionne et crée les instances dans le MIG. Vous obtenez des ressources pour une durée maximale de sept jours.

Pour spécifier les propriétés d'instance et de consommation de chaque instance du MIG, créez un modèle d'instance à l'aide de l'une des méthodes suivantes :

gcloud

Pour créer un modèle d'instance régional, utilisez la commande gcloud beta compute instance-templates create.

gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --machine-type=MACHINE_TYPE \
    --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT \
    --instance-template-region=REGION \
    --boot-disk-type=hyperdisk-balanced \
    --boot-disk-size=DISK_SIZE \
    --scopes=cloud-platform \
    
--network-interface=nic-type=GVNIC, \
      network=GVNIC_NAME_PREFIX-net-0, \
      subnet=GVNIC_NAME_PREFIX-sub-0, \
      stack-type=STACK_TYPE, \
      address=EXTERNAL_IPV4_ADDRESS \
--network-interface=nic-type=GVNIC, \
      network=GVNIC_NAME_PREFIX-net-1, \
      subnet=GVNIC_NAME_PREFIX-sub-1,no-address \
--network-interface=nic-type=IRDMA, \
      network=RDMA_NAME_PREFIX-irdma, \
      subnet=RDMA_NAME_PREFIX-irdma-sub, \
      stack-type=IPV4_ONLY,no-address \
    
    --reservation-affinity=none \
    --instance-termination-action=DELETE \
    --max-run-duration=RUN_DURATION \
    --maintenance-policy=TERMINATE \
    --provisioning-model=FLEX_START

Remplacez les éléments suivants :

  • INSTANCE_TEMPLATE_NAME : nom du modèle d'instance.
  • MACHINE_TYPE : type de machine H4D à utiliser pour l'instance.
  • IMAGE_FAMILY : famille d'images de l'image de l'OS que vous souhaitez utiliser. Pour obtenir la liste des systèmes d'exploitation compatibles, consultez Systèmes d'exploitation compatibles.
  • IMAGE_PROJECT : ID du projet de l'image OS.
  • REGION : région dans laquelle vous souhaitez créer le modèle d'instance. Spécifiez une région dans laquelle le type de machine que vous souhaitez utiliser est disponible.
  • DISK_SIZE : taille du disque de démarrage en Gio.
  • GVNIC_NAME_PREFIX : préfixe de nom que vous avez utilisé lors de la création des réseaux et sous-réseaux VPC standards pour les interfaces gVNIC.

    Si vous utilisez le réseau par défaut, n'incluez qu'un seul champ --network-interface avec le champ nic-type défini sur GVNIC. De plus, omettez les paramètres network et subnetwork pour cette interface réseau.

  • STACK_TYPE : (facultatif) type de pile à utiliser pour l'interface gVNIC. Indiquez IPV4_ONLY ou IPV4_IPV6. Si vous ne spécifiez pas de valeur, IPV4_ONLY est utilisé par défaut.
  • EXTERNAL_IPV4_ADDRESS : facultatif : adresse IPv4 externe statique à utiliser avec l'interface réseau gVNIC. Vous devez avoir réservé une adresse IPv4 externe auparavant. Effectuez l'une des opérations suivantes :

    • Spécifiez une adresse IPv4 valide du sous-réseau.
    • Utilisez l'indicateur no-address si vous ne souhaitez pas que l'interface réseau dispose d'une adresse IP externe.
    • Spécifiez address='' si vous souhaitez que l'interface réseau reçoive une adresse IP externe éphémère.

    Pour spécifier une adresse IPv6 externe pour l'interface réseau gVNIC, utilisez plutôt l'indicateur --external-ipv6-address.

  • RDMA_NAME_PREFIX : préfixe de nom que vous avez utilisé lors de la création du réseau VPC et du sous-réseau pour l'interface réseau IRDMA.

    Si vous n'utilisez pas Cloud RDMA avec vos instances H4D, omettez le champ --network-interface pour l'interface IRDMA.

  • RUN_DURATION : durée d'exécution des instances demandées. Vous devez formater la valeur en nombre de jours, d'heures, de minutes ou de secondes, suivis respectivement de d, h, m et s. Par exemple, spécifiez 30m pour 30 minutes ou 1d2h3m4s pour un jour, deux heures, trois minutes et quatre secondes. Cette valeur doit être comprise entre 10 minutes et sept jours.

REST

Pour créer un modèle d'instance régional, envoyez une requête POST à la méthode beta regionInstanceTemplates.insert.

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceTemplates
{
  "name":"INSTANCE_TEMPLATE_NAME",
  "properties":{
    "disks":[
      {
        "boot":true,
        "initializeParams":{
          "diskSizeGb":"DISK_SIZE",
          "diskType":"hyperdisk-balanced",
          "sourceImage":"projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
        },
        "mode":"READ_WRITE",
        "type":"PERSISTENT"
      }
    ],
    "machineType":"MACHINE_TYPE",
    
        "networkInterfaces": [
        {
          "network": "GVNIC_NAME_PREFIX-net-0",
          "subnetwork": "GVNIC_NAME_PREFIX-sub-0",
          "accessConfigs": [
            {
                "type": "ONE_TO_ONE_NAT",
                "name": "External IP",
                "natIP": "EXTERNAL_IPV4_ADDRESS"
            }
          ],
          "stackType": "IPV4_ONLY",
          "nicType": "GVNIC",
      },
      {
          "network": "GVNIC_NAME_PREFIX-net-1",
          "subnetwork": "GVNIC_NAME_PREFIX-sub-1",
          "stackType": "IPV4_ONLY",
          "nicType": "GVNIC",
      },
      {
          "network": "RDMA_NAME_PREFIX-irdma",
          "subnetwork": "RDMA_NAME_PREFIX-irdma-sub",
          "stackType": "IPV4_ONLY",
          "nicType": "IRDMA",
      }
    ],
,
    "reservationAffinity": {
        "consumeReservationType": "NO_RESERVATION"
      },
    "scheduling": {
        "instanceTerminationAction": "DELETE",
        "maxRunDuration": {
          "seconds": RUN_DURATION
        },
        "onHostMaintenance": "TERMINATE",
        "provisioningModel": "FLEX_START"
      }

  }
}

Remplacez les éléments suivants :

  • INSTANCE_TEMPLATE_NAME : nom du modèle d'instance.
  • MACHINE_TYPE : type de machine à utiliser pour l'instance. Spécifiez un type de machine H4D. Pour en savoir plus, consultez Types de machines H4D.
  • IMAGE_FAMILY : famille d'images de l'image de l'OS que vous souhaitez utiliser. Pour obtenir la liste des systèmes d'exploitation compatibles, consultez Systèmes d'exploitation compatibles.
  • IMAGE_PROJECT : ID du projet de l'image OS.
  • REGION : région dans laquelle vous souhaitez créer le modèle d'instance. Spécifiez une région dans laquelle le type de machine que vous souhaitez utiliser est disponible. Pour en savoir plus sur les régions, consultez Régions et zones.
  • DISK_SIZE : taille du disque de démarrage en Gio.
  • GVNIC_NAME_PREFIX : préfixe de nom que vous avez utilisé lors de la création des réseaux et sous-réseaux VPC standards pour les interfaces gVNIC.

    Si vous utilisez le réseau par défaut, n'incluez qu'un seul champ --network-interface avec le champ nic-type défini sur GVNIC. De plus, omettez les paramètres network et subnetwork pour cette interface réseau.

  • EXTERNAL_IPV4_ADDRESS : facultatif : adresse IPv4 externe statique à utiliser avec l'interface réseau gVNIC. Vous devez avoir réservé une adresse IPv4 externe auparavant.

    Pour spécifier une adresse IPv6 externe pour l'interface réseau gVNIC, utilisez plutôt l'indicateur --external-ipv6-address.

  • RDMA_NAME_PREFIX : préfixe de nom que vous avez utilisé lors de la création du réseau VPC et du sous-réseau pour l'interface réseau IRDMA.

    Si vous n'utilisez pas Cloud RDMA avec vos instances H4D, omettez le champ --network-interface pour l'interface IRDMA.

  • RUN_DURATION : durée, en secondes, pendant laquelle vous souhaitez que les instances demandées s'exécutent. La valeur doit être comprise entre 600, soit 600 secondes (10 minutes), et 604800, soit 604 800 secondes (sept jours).

Une fois le modèle d'instance créé, vous pouvez l'afficher pour consulter son ID et ses propriétés d'instance.

Créer un MIG avec une demande de redimensionnement

Pour créer toutes les instances Flex-start demandées en même temps, créez un MIG, puis créez une demande de redimensionnement dans le MIG, comme décrit dans cette section.

Créer le MIG

Pour créer le MIG, sélectionnez l'une des options suivantes :

gcloud

Créez un MIG zonal ou régional comme suit :

  • Pour créer un MIG zonal, utilisez la commande instance-groups managed create comme suit.

        gcloud compute instance-groups managed create MIG_NAME \
            --template=INSTANCE_TEMPLATE_URL \
            --size=0 \
            --default-action-on-vm-failure=do-nothing \
            --zone=ZONE
        
  • Pour créer un MIG régional, utilisez la commande instance-groups managed create comme suit.

        gcloud compute instance-groups managed create MIG_NAME \
            --template=INSTANCE_TEMPLATE_URL \
            --size=0 \
            --default-action-on-vm-failure=do-nothing \
            --zones=ZONE \
            --target-distribution-shape=any-single-zone \
            --instance-redistribution-type=none
        

REST

Créez un MIG zonal ou régional comme suit :

  • Pour créer un MIG zonal, envoyez une requête POST à la méthode instanceGroupManagers.insert comme suit.
          POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers
          {
            "versions": [
            {
              "instanceTemplate": "INSTANCE_TEMPLATE_URL"
            }
            ],
            "name": "MIG_NAME",
            "targetSize": 0,
            "instanceLifecyclePolicy": {
                "defaultActionOnFailure": "DO_NOTHING"
            }
          }
         
  • Pour créer un MIG régional, envoyez une requête POST à la méthode regionInstanceGroupManagers.insert comme suit.
          POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers
          {
            "versions": [
              {
                "instanceTemplate": "INSTANCE_TEMPLATE_URL"
              }
            ],
            "name": "MIG_NAME",
            "targetSize": 0,
            "distributionPolicy": {
              "targetShape": "ANY_SINGLE_ZONE",
              "zones": [
                {
                "zone": "projects/PROJECT_ID/zones/ZONE"
                }
              ]
            },
            "updatePolicy": {
              "instanceRedistributionType": "NONE"
            },
            "instanceLifecyclePolicy": {
              "defaultActionOnFailure": "DO_NOTHING"
            }
          }
         

Créer la demande de redimensionnement

Pour créer la demande de redimensionnement dans le MIG, sélectionnez l'une des options suivantes :

gcloud

Créez une demande de redimensionnement comme suit :

  • Pour créer une demande de redimensionnement dans un MIG zonal, utilisez la commande instance-groups managed resize-requests create comme suit :

        gcloud compute instance-groups managed resize-requests create MIG_NAME \
            --resize-request=RESIZE_REQUEST_NAME \
            POPULATION_METHOD \
            --zone=ZONE
        
  • Pour créer une demande de redimensionnement dans un MIG régional, utilisez la commande bêta instance-groups managed resize-requests create comme suit :

          gcloud beta compute instance-groups managed resize-requests create MIG_NAME \
              --resize-request=RESIZE_REQUEST_NAME \
              POPULATION_METHOD \
              --region=REGION
          

REST

Pour créer une demande de redimensionnement dans un MIG zonal ou régional :

  • Pour créer une demande de redimensionnement dans un MIG zonal, envoyez une requête POST à la méthode instanceGroupManagerResizeRequests.insert comme suit :
          POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME/resizeRequests
          {
            "name": "RESIZE_REQUEST_NAME",
            POPULATION_METHOD
          }
          
  • Pour créer une demande de redimensionnement dans un MIG régional, envoyez une requête POST à la méthode beta.regionInstanceGroupManagerResizeRequests.insert comme suit :
          POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME/resizeRequests
          {
            "name": "RESIZE_REQUEST_NAME",
            POPULATION_METHOD
          }