Crea un MIG con tipi di macchine H4D e avvio flessibile

Questo tutorial mostra come creare un gruppo di istanze gestite (MIG) che utilizza un tipo di macchina H4D. Il MIG utilizza il modello di consumo con avvio flessibile di Dynamic Workload Scheduler per ottenere risorse di calcolo per un massimo di sette giorni.

La creazione di un MIG ti consente di gestire più macchine virtuali (VM) come singola entità. Ogni VM in un MIG si basa su un template di istanza. Gestendo automaticamente le VM nel gruppo, i MIG offrono alta disponibilità e scalabilità. Per scoprire di più sui MIG, consulta Gruppi di istanze gestite.

Per scoprire di più sulle opzioni di creazione di VM HPC e cluster HPC, consulta Panoramica della creazione di cluster HPC.

Questo tutorial è rivolto a ingegneri HPC, amministratori e operatori di piattaforme e a specialisti di dati e MPI interessati a creare un gruppo di istanze HPC interconnesse per carichi di lavoro di breve durata. Le istanze risultanti non utilizzano un orchestratore per la gestione delle istanze o la pianificazione dei job.

(Facoltativo) Richiedere una quota preemptive

Le istanze VM aggiunte al MIG utilizzano la quota regionale. Le quote per istanze VM, gruppi di istanze, CPU e dischi possono essere utilizzate da qualsiasi istanza VM nella regione, indipendentemente dalla zona.

La quota può essere standard o prerilasciabile quando utilizzi Flex-start.

  • Quota standard: se il progetto non ha una quota prerilasciabile e non ne hai mai richiesta una, le risorse dell'istanza consumano la quota standard.
  • Quota prerilasciabile: la richiesta di quote prerilasciabili può aiutarti a migliorare l'ottenimento delle quote fornendo quote separate per le risorse temporanee. Tuttavia, quando Compute Engine concede la quota prerilasciabile in una regione, tutte le risorse applicabili consumano solo la quota prerilasciabile. Se questa quota è esaurita, devi richiedere una quota prerilasciabile aggiuntiva per le risorse VM.

Puoi richiedere una quota preemptive seguendo i passaggi descritti in Richiedere un aggiustamento della quota.

Tipi di quota necessari

Per utilizzare i gruppi di istanze, devi avere una quota disponibile per tutte le risorse che il gruppo utilizza (ad esempio per le CPU) e una quota disponibile per la risorsa "gruppo". Per le istanze H4D, possono essere utilizzati i seguenti tipi di quota, a seconda del tipo di macchina utilizzato dalle istanze:

Risorsa Quota standard Quota preemptible
CPU CPUS_PER_VM_FAMILY Preemptible CPUs
SSD locali Local SSD per machine family (GB) Preemptible Local SSDs (GB)

Per creare le risorse in questo tutorial, potrebbe essere necessaria la seguente quota regionale aggiuntiva:

  • Gruppo di istanze gestite per zona (una sola zona): Instance group managers e Instance groups
  • Google Cloud Hyperdisk:

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

(Facoltativo) Crea reti VPC

A meno che tu non scelga di disattivarla, ogni progetto ha una rete predefinita, che può essere utilizzata per fornire connettività di rete alle tue istanze. Quando crei una VM, puoi specificare una subnet e una rete VPC. Se ometti questa configurazione, vengono utilizzate la rete e la subnet predefinite.

Le istanze H4D possono essere configurate per utilizzare Cloud RDMA. Cloud RDMA consente funzionalità di messaggistica affidabili a bassa latenza utilizzando un driver di rete IRDMA che supporta l'accesso diretto alla memoria remota (RDMA) tra le istanze Compute Engine.

Per questo tutorial:

  • Se vuoi configurare le istanze H4D per utilizzare Cloud RDMA, completa i passaggi descritti in questa sezione.
  • Se non vuoi utilizzare Cloud RDMA, puoi saltare questa sezione e utilizzare la rete predefinita.

Le istanze abilitate a RDMA richiedono un minimo di due interfacce di rete (NIC):

  • Tipo di NIC GVNIC: utilizza il driver gve per il traffico TCP/IP e internet per la normale comunicazione VM-VM e VM-internet.
  • Tipo di NIC IRDMA: utilizza i driver IDPF/iRDMA per il networking Cloud RDMA tra le istanze.

Le istanze che utilizzano Cloud RDMA possono avere una sola interfaccia IRDMA. Puoi aggiungere fino a otto interfacce di rete GVNIC aggiuntive per un totale di 10 NIC per istanza.

Per configurare le reti VPC Falcon da utilizzare con le tue istanze, puoi seguire le istruzioni documentate o utilizzare lo script fornito.

Guide con istruzioni

Per creare le reti, puoi utilizzare le seguenti istruzioni:

Script

Puoi creare fino a nove interfacce di rete GVNIC e una interfaccia di rete IRDMA per istanza. Ogni interfaccia di rete deve essere collegata a una rete separata. Per creare le reti, puoi utilizzare il seguente script, che crea due reti per GVNIC e una rete per IRDMA.

  1. (Facoltativo) Prima di eseguire lo script, elenca i profili di rete RDMA per verificare che ne sia disponibile uno.
      gcloud beta compute network-profiles list
      
  2. Copia il seguente codice ed eseguilo in una finestra della 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
      

    Sostituisci quanto segue:

    • NUMBER_OF_GVNIC: il numero di interfacce GVNIC da creare. Specifica un numero compreso tra 1 e 9.
    • GVNIC_NAME_PREFIX: il prefisso del nome da utilizzare per la rete VPC e la subnet standard che utilizzano un tipo di NIC GVNIC.
    • REGION: la regione in cui vuoi creare le reti. Deve corrispondere alla zona specificata per il flag --network-profile durante la creazione della rete RDMA. Ad esempio, se specifichi la zona come europe-west4-b, la regione è europe-west4.
    • IP_RANGE: l'intervallo di indirizzi IP al di fuori della rete VPC da utilizzare per le regole firewall SSH. Come best practice, specifica gli intervalli di indirizzi IP specifici da cui devi consentire l'accesso, anziché tutte le origini IPv4 o IPv6. Non utilizzare 0.0.0.0/0 o ::/0 come intervallo di origine perché ciò consente il traffico da tutte le origini IPv4 o IPv6, incluse quelle esterne a Google Cloud.
    • RDMA_NAME_PREFIX: il prefisso del nome da utilizzare per la rete VPC e la subnet che utilizzano il tipo di NIC IRDMA.
    • ZONE: la zona in cui vuoi creare le reti e le istanze di computing. Utilizza us-central1-a o europe-west4-b.
  3. (Facoltativo) Per verificare che le risorse di rete VPC siano state create correttamente, controlla le impostazioni di rete nella console Google Cloud :

    1. Nella console Google Cloud , vai alla pagina Reti VPC.

      Vai a Reti VPC

    2. Cerca nell'elenco le reti che hai creato nel passaggio precedente.
    3. Per visualizzare le subnet, le regole firewall e altre impostazioni di rete, fai clic sul nome della rete.

Crea un modello di istanza

Per utilizzare l'opzione di consumo con avvio flessibile, crea un gruppo di istanze gestite vuoto e poi crea una richiesta di ridimensionamento per il gruppo. Quando la capacità richiesta diventa disponibile, Compute Engine esegue il provisioning e crea le istanze nel MIG. Ottieni risorse per un massimo di sette giorni.

Per specificare le proprietà di istanza e consumo per ogni istanza nel MIG, crea un template di istanza utilizzando uno dei seguenti metodi:

gcloud

Per creare un template di istanza regionale, utilizza il comando 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

Sostituisci quanto segue:

  • INSTANCE_TEMPLATE_NAME: il nome del modello di istanza.
  • MACHINE_TYPE: il tipo di macchina H4D da utilizzare per l'istanza.
  • IMAGE_FAMILY: la famiglia di immagini dell'immagine del sistema operativo che vuoi utilizzare. Per un elenco dei sistemi operativi supportati, consulta Sistemi operativi supportati.
  • IMAGE_PROJECT: l'ID progetto dell'immagine del sistema operativo.
  • REGION: la regione in cui vuoi creare il template di istanza. Specifica una regione in cui è disponibile il tipo di macchina che vuoi utilizzare.
  • DISK_SIZE: le dimensioni del disco di avvio in GiB.
  • GVNIC_NAME_PREFIX: il prefisso del nome che hai utilizzato durante la creazione delle reti VPC e delle subnet standard per le interfacce gVNIC.

    Se utilizzi la rete predefinita, includi un solo campo --network-interface con il campo nic-type impostato su GVNIC. Inoltre, ometti le impostazioni network e subnetwork per questa interfaccia di rete.

  • STACK_TYPE: (Facoltativo) il tipo di stack da utilizzare per l'interfaccia gVNIC. Specifica IPV4_ONLY o IPV4_IPV6. Se non specifichi un valore, per impostazione predefinita viene utilizzato IPV4_ONLY.
  • EXTERNAL_IPV4_ADDRESS: (Facoltativo) un indirizzo IPv4 esterno statico da utilizzare con l'interfaccia di rete gVNIC. Devi aver prenotato un indirizzo IPv4 esterno in precedenza. Esegui una di queste operazioni:

    • Specifica un indirizzo IPv4 valido dalla subnet.
    • Utilizza il flag no-address se non vuoi che l'interfaccia di rete abbia un indirizzo IP esterno.
    • Specifica address='' se vuoi che l'interfaccia di rete riceva un indirizzo IP esterno temporaneo.

    Per specificare un indirizzo IPv6 esterno per l'interfaccia di rete GVNIC, utilizza il flag --external-ipv6-address.

  • RDMA_NAME_PREFIX: il prefisso del nome che hai utilizzato durante la creazione della rete VPC e della subnet per l'interfaccia di rete IRDMA.

    Se non utilizzi Cloud RDMA con le tue istanze H4D, ometti il campo --network-interface per l'interfaccia IRDMA.

  • RUN_DURATION: la durata per cui vuoi eseguire le istanze richieste. Devi formattare il valore come numero di giorni, ore, minuti o secondi seguito rispettivamente da d, h, m e s. Ad esempio, specifica 30m per 30 minuti o 1d2h3m4s per un giorno, due ore, tre minuti e quattro secondi. Il valore deve essere compreso tra 10 minuti e sette giorni.

REST

Per creare un template di istanza regionale, effettua una richiesta POST al metodo 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"
      }

  }
}

Sostituisci quanto segue:

  • INSTANCE_TEMPLATE_NAME: il nome del modello di istanza.
  • MACHINE_TYPE: il tipo di macchina da utilizzare per l'istanza. Specifica un tipo di macchina H4D. Per saperne di più, consulta Tipi di macchine H4D.
  • IMAGE_FAMILY: la famiglia di immagini dell'immagine del sistema operativo che vuoi utilizzare. Per un elenco dei sistemi operativi supportati, consulta Sistemi operativi supportati.
  • IMAGE_PROJECT: l'ID progetto dell'immagine del sistema operativo.
  • REGION: la regione in cui vuoi creare il template di istanza. Specifica una regione in cui è disponibile il tipo di macchina che vuoi utilizzare. Per informazioni sulle regioni, vedi Regioni e zone.
  • DISK_SIZE: le dimensioni del disco di avvio in GiB.
  • GVNIC_NAME_PREFIX: il prefisso del nome che hai utilizzato durante la creazione delle reti VPC e delle subnet standard per le interfacce gVNIC.

    Se utilizzi la rete predefinita, includi un solo campo --network-interface con il campo nic-type impostato su GVNIC. Inoltre, ometti le impostazioni network e subnetwork per questa interfaccia di rete.

  • EXTERNAL_IPV4_ADDRESS: (Facoltativo) un indirizzo IPv4 esterno statico da utilizzare con l'interfaccia di rete gVNIC. Devi aver prenotato un indirizzo IPv4 esterno in precedenza.

    Per specificare un indirizzo IPv6 esterno per l'interfaccia di rete GVNIC, utilizza il flag --external-ipv6-address.

  • RDMA_NAME_PREFIX: il prefisso del nome che hai utilizzato durante la creazione della rete VPC e della subnet per l'interfaccia di rete IRDMA.

    Se non utilizzi Cloud RDMA con le tue istanze H4D, ometti il campo --network-interface per l'interfaccia IRDMA.

  • RUN_DURATION: la durata, in secondi, per cui vuoi eseguire le istanze richieste. Il valore deve essere compreso tra 600, ovvero 600 secondi (10 minuti), e 604800, ovvero 604.800 secondi (sette giorni).

Dopo aver creato il modello di istanza, puoi visualizzarlo per vedere il suo ID e rivedere le proprietà dell'istanza.

Crea un MIG con una richiesta di ridimensionamento

Per creare tutte le istanze Flex-start richieste contemporaneamente, crea un gruppo di istanze gestite e poi crea una richiesta di ridimensionamento nel gruppo di istanze gestite come descritto in questa sezione.

Crea il MIG

Per creare il MIG, seleziona una delle seguenti opzioni:

gcloud

Crea un gruppo di istanze gestite a livello di zona o di regione nel seguente modo:

  • Per creare un MIG a livello di zona, utilizza il comando instance-groups managed create come segue.

        gcloud compute instance-groups managed create MIG_NAME \
            --template=INSTANCE_TEMPLATE_URL \
            --size=0 \
            --default-action-on-vm-failure=do-nothing \
            --zone=ZONE
        
  • Per creare un gruppo di istanze gestite a livello di regione, utilizza il comando instance-groups managed create come segue.

        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

Crea un gruppo di istanze gestite a livello di zona o di regione nel seguente modo:

  • Per creare un MIG a livello di zona, invia una richiesta POST al metodo instanceGroupManagers.insert come segue.
          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"
            }
          }
         
  • Per creare un gruppo di istanze gestite a livello di regione, invia una richiesta POST al metodo regionInstanceGroupManagers.insert come segue.
          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"
            }
          }
         

Crea la richiesta di ridimensionamento

Per creare la richiesta di ridimensionamento nel MIG, seleziona una delle seguenti opzioni:

gcloud

Crea una richiesta di ridimensionamento nel seguente modo:

  • Per creare una richiesta di ridimensionamento in un gruppo di istanze gestite a livello di zona, utilizza il comando instance-groups managed resize-requests create come segue:

        gcloud compute instance-groups managed resize-requests create MIG_NAME \
            --resize-request=RESIZE_REQUEST_NAME \
            POPULATION_METHOD \
            --zone=ZONE
        
  • Per creare una richiesta di ridimensionamento in un gruppo di istanze gestite a livello di regione, utilizza il comando beta instance-groups managed resize-requests create come segue:

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

REST

Crea una richiesta di ridimensionamento in un gruppo di istanze gestite a livello di zona o di regione come segue:

  • Per creare una richiesta di ridimensionamento in un gruppo di istanze gestite a livello di zona, invia una richiesta POST al metodo instanceGroupManagerResizeRequests.insert come segue:
          POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME/resizeRequests
          {
            "name": "RESIZE_REQUEST_NAME",
            POPULATION_METHOD
          }
          
  • Per creare una richiesta di ridimensionamento in un gruppo di istanze gestite a livello di regione, invia una richiesta POST al metodo beta.regionInstanceGroupManagerResizeRequests.insert come segue:
          POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME/resizeRequests
          {
            "name": "RESIZE_REQUEST_NAME",
            POPULATION_METHOD
          }