Criar um MIG com tipos de máquina H4D e início flexível

Neste tutorial, mostramos como criar um grupo gerenciado de instâncias (MIG) que usa um tipo de máquina H4D. O MIG usa o modelo de consumo de início flexível do Dynamic Workload Scheduler para receber recursos de computação por até sete dias.

Ao criar um MIG, é possível gerenciar várias máquinas virtuais (VMs) como uma única entidade. Cada VM em um MIG é baseada em um modelo de instância. Ao gerenciar automaticamente as VMs no grupo, os MIGs oferecem alta disponibilidade e escalonabilidade. Para saber mais sobre MIGs, consulte Grupos gerenciados de instâncias.

Para saber mais sobre as opções de criação de VMs e clusters de HPC, consulte Visão geral da criação de clusters de HPC.

Este tutorial é destinado a engenheiros de HPC, administradores e operadores de plataforma, além de especialistas em dados e MPI interessados em criar um grupo de instâncias de HPC interconectadas para cargas de trabalho de curta duração. As instâncias resultantes não usam um orquestrador para gerenciamento de instâncias ou programação de jobs.

Opcional: solicitar cota preemptiva

As instâncias de VM adicionadas ao MIG consomem cota regional. As cotas de instância de VM, grupo de instâncias, CPU e disco podem ser consumidas por qualquer instância de VM na região, independentemente da zona.

A cota pode ser padrão ou preemptiva ao usar Flex-start.

  • Cota padrão: se o projeto não tiver uma cota preemptiva e você nunca tiver solicitado uma cota preemptiva, os recursos da instância vão consumir a cota padrão.
  • Cota preemptiva: solicitar cotas preemptivas pode ajudar a melhorar a disponibilidade de cotas, fornecendo cotas separadas para recursos temporários. No entanto, depois que o Compute Engine concede a cota preemptiva em uma região, todos os recursos aplicáveis consomem apenas a cota preemptiva. Se essa cota esgotar, solicite mais cota preemptiva para os recursos de VM.

Para solicitar uma cota preemptiva, siga as etapas documentadas em Solicitar um ajuste de cota.

Tipos de cota necessários

Para usar grupos de instâncias, é preciso ter uma cota disponível para todos os recursos que o grupo usa (por exemplo, cota de CPU) e uma cota disponível para o recurso do grupo. Para instâncias H4D, os seguintes tipos de cota podem ser usados, dependendo do tipo de máquina usado pelas instâncias:

Recurso Cota padrão Cota preemptiva
CPUs CPUS_PER_VM_FAMILY Preemptible CPUs
SSDs locais Local SSD per machine family (GB) Preemptible Local SSDs (GB)

Para criar os recursos neste tutorial, talvez seja necessário ter a seguinte cota regional adicional:

  • Grupo por zona de instâncias gerenciadas (única zona): Instance group managers e Instance groups
  • Google Cloud Hyperdisk:

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

Opcional: criar redes VPC

A menos que você desative essa opção, cada projeto tem uma rede padrão, que pode ser usada para fornecer conectividade de rede às suas instâncias. Ao criar uma VM, é possível especificar uma rede e uma sub-rede VPC. Se você omitir essa configuração, a rede e a sub-rede padrão serão usadas.

As instâncias H4D podem ser configuradas para usar o Cloud RDMA. O Cloud RDMA oferece recursos de mensagens confiáveis de baixa latência usando um driver de rede IRDMA que oferece suporte ao acesso direto à memória remota (RDMA) entre instâncias do Compute Engine.

Neste tutorial:

  • Se você quiser configurar as instâncias H4D para usar o Cloud RDMA, siga as etapas desta seção.
  • Se você não quiser usar o Cloud RDMA, pule esta seção e use a rede padrão.

As instâncias compatíveis com RDMA exigem no mínimo duas interfaces de rede (NICs):

  • Tipo de NIC GVNIC: usa o driver gve para tráfego TCP/IP e da Internet para comunicação normal entre VM-VM e VM-Internet.
  • Tipo de NIC IRDMA: usa drivers IDPF/iRDMA para rede RDMA do Cloud entre instâncias.

As instâncias que usam o Cloud RDMA só podem ter uma interface IRDMA. É possível adicionar até oito interfaces de rede GVNIC extras, totalizando 10 NICs por instância.

Para configurar as redes VPC do Falcon para usar com suas instâncias, siga as instruções documentadas ou use o script fornecido.

Guias de instruções

Para criar as redes, use as seguintes instruções:

Script

É possível criar até nove interfaces de rede GVNIC e uma interface de rede IRDMA por instância. Cada interface de rede precisa ser anexada a uma rede separada. Para criar as redes, use o script a seguir, que cria duas redes para GVNIC e uma rede para IRDMA.

  1. Opcional: antes de executar o script, liste os perfis de rede RDMA para verificar se há um disponível.
      gcloud beta compute network-profiles list
      
  2. Copie e execute o código a seguir em uma janela de shell do 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
      

    Substitua:

    • NUMBER_OF_GVNIC: o número de interfaces gVNIC a serem criadas. Especifique um número de 1 a 9.
    • GVNIC_NAME_PREFIX: o prefixo de nome a ser usado para a rede VPC padrão e a sub-rede que usa um tipo de NIC GVNIC.
    • REGION: a região em que você quer criar as redes. Isso precisa corresponder à zona especificada para a flag --network-profile ao criar a rede RDMA. Por exemplo, se você especificar a zona como europe-west4-b, a região será europe-west4.
    • IP_RANGE: o intervalo de endereços IP fora da rede VPC a ser usado para as regras de firewall SSH. Como prática recomendada, especifique os intervalos de endereços IP específicos dos quais é preciso permitir o acesso, em vez de todas as origens IPv4 ou IPv6. Não use 0.0.0.0/0 ou ::/0 como um intervalo de origem, porque isso permite o tráfego de todas as origens IPv4 ou IPv6, incluindo origens fora de Google Cloud.
    • RDMA_NAME_PREFIX: o prefixo de nome a ser usado para a rede VPC e a sub-rede que usam o tipo de NIC IRDMA.
    • ZONE: a zona em que você quer criar as redes e instâncias de computação. Use us-central1-a ou europe-west4-b.
  3. Opcional: para verificar se os recursos de rede VPC foram criados, confira as configurações de rede no console Google Cloud :

    1. No console do Google Cloud , acesse a página Redes VPC.

      Acessar redes VPC

    2. Pesquise na lista as redes que você criou na etapa anterior.
    3. Para conferir as sub-redes, regras de firewall e outras configurações de rede, clique no nome da rede.

Criar um modelo de instância

Para usar a opção de consumo de início flexível, crie um MIG vazio e, em seguida, crie uma solicitação de redimensionamento para o MIG. Quando a capacidade solicitada fica disponível, o Compute Engine a provisiona e cria as instâncias no MIG. Você recebe recursos por até sete dias.

Para especificar as propriedades de instância e consumo de cada instância no MIG, crie um modelo de instância usando um dos seguintes métodos:

gcloud

Para criar um modelo de instância regional, use o 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

Substitua:

  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.
  • MACHINE_TYPE: o tipo de máquina H4D a ser usado para a instância.
  • IMAGE_FAMILY: a família de imagens da imagem do SO que você quer usar. Para uma lista de sistemas operacionais compatíveis, consulte Sistemas operacionais compatíveis.
  • IMAGE_PROJECT: o ID do projeto da imagem do SO.
  • REGION: a região em que você quer criar o modelo de instância. Especifique uma região em que o tipo de máquina que você quer usar esteja disponível.
  • DISK_SIZE: o tamanho do disco de inicialização em GiB.
  • GVNIC_NAME_PREFIX: o prefixo de nome usado ao criar as redes e sub-redes VPC padrão para as interfaces gVNIC.

    Se você estiver usando a rede padrão, inclua apenas um campo --network-interface com o campo nic-type definido como GVNIC. Além disso, omita as configurações network e subnetwork para essa interface de rede.

  • STACK_TYPE: opcional: o tipo de pilha a ser usado para a interface gVNIC. Especifique IPV4_ONLY ou IPV4_IPV6. Se você não especificar um valor, IPV4_ONLY será usado por padrão.
  • EXTERNAL_IPV4_ADDRESS (opcional): um endereço IPv4 externo estático para usar com a interface de rede gVNIC. É preciso ter reservado um endereço IPv4 externo. Escolha uma destas opções:

    • Especifique um endereço IPv4 válido da sub-rede.
    • Use a flag no-address se não quiser que a interface de rede tenha um endereço IP externo.
    • Especifique address='' se quiser que a interface de rede receba um endereço IP externo temporário.

    Para especificar um endereço IPv6 externo para a interface de rede gVNIC, use a flag --external-ipv6-address.

  • RDMA_NAME_PREFIX: o prefixo de nome usado ao criar a rede VPC e a sub-rede para a interface de rede IRDMA.

    Se você não estiver usando o Cloud RDMA com as instâncias H4D, omita o campo --network-interface para a interface IRDMA.

  • RUN_DURATION: a duração da execução das instâncias solicitadas. Formate o valor como o número de dias, horas, minutos ou segundos, seguido por d, h, m e s, respectivamente. Por exemplo, especifique 30m para 30 minutos ou 1d2h3m4s para um dia, duas horas, três minutos e quatro segundos. O valor precisa estar entre 10 minutos e sete dias.

REST

Para criar um modelo de instância regional, faça uma solicitação POST para o método 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"
      }

  }
}

Substitua:

  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.
  • MACHINE_TYPE: o tipo de máquina a ser usado para a instância. Especifique um tipo de máquina H4D. Para mais informações, consulte Tipos de máquina H4D.
  • IMAGE_FAMILY: a família de imagens da imagem do SO que você quer usar. Para uma lista de sistemas operacionais compatíveis, consulte Sistemas operacionais compatíveis.
  • IMAGE_PROJECT: o ID do projeto da imagem do SO.
  • REGION: a região em que você quer criar o modelo de instância. Especifique uma região em que o tipo de máquina que você quer usar esteja disponível. Para informações sobre regiões, consulte Regiões e zonas.
  • DISK_SIZE: o tamanho do disco de inicialização em GiB.
  • GVNIC_NAME_PREFIX: o prefixo de nome usado ao criar as redes e sub-redes VPC padrão para as interfaces gVNIC.

    Se você estiver usando a rede padrão, inclua apenas um campo --network-interface com o campo nic-type definido como GVNIC. Além disso, omita as configurações network e subnetwork para essa interface de rede.

  • EXTERNAL_IPV4_ADDRESS (opcional): um endereço IPv4 externo estático para usar com a interface de rede gVNIC. É preciso ter reservado um endereço IPv4 externo.

    Para especificar um endereço IPv6 externo para a interface de rede gVNIC, use a flag --external-ipv6-address.

  • RDMA_NAME_PREFIX: o prefixo de nome usado ao criar a rede VPC e a sub-rede para a interface de rede IRDMA.

    Se você não estiver usando o Cloud RDMA com as instâncias H4D, omita o campo --network-interface para a interface IRDMA.

  • RUN_DURATION: a duração, em segundos, em que você quer que as instâncias solicitadas sejam executadas. O valor precisa estar entre 600, que representa 600 segundos (10 minutos), e 604800, que é 604.800 segundos (sete dias).

Depois de criar o modelo de instância, você pode visualizar o modelo para conferir o ID e as propriedades da instância.

Criar um MIG com uma solicitação de redimensionamento

Para criar todas as instâncias flexíveis solicitadas ao mesmo tempo, crie um MIG e uma solicitação de redimensionamento nele, conforme descrito nesta seção.

Criar o MIG

Para criar o MIG, selecione uma das seguintes opções:

gcloud

Crie um MIG zonal ou regional da seguinte maneira:

  • Para criar um MIG zonal, use o comando instance-groups managed create da seguinte maneira.

        gcloud compute instance-groups managed create MIG_NAME \
            --template=INSTANCE_TEMPLATE_URL \
            --size=0 \
            --default-action-on-vm-failure=do-nothing \
            --zone=ZONE
        
  • Para criar um MIG regional, use o comando instance-groups managed create da seguinte maneira.

        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

Crie um MIG zonal ou regional da seguinte maneira:

  • Para criar um MIG zonal, faça uma solicitação POST para o método instanceGroupManagers.insert da seguinte maneira.
          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"
            }
          }
         
  • Para criar um MIG regional, faça uma solicitação POST para o método regionInstanceGroupManagers.insert da seguinte maneira.
          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"
            }
          }
         

Criar a solicitação de redimensionamento

Para criar a solicitação de redimensionamento no MIG, selecione uma das seguintes opções:

gcloud

Crie uma solicitação de redimensionamento da seguinte maneira:

  • Para criar uma solicitação de redimensionamento em um MIG zonal, use o comando instance-groups managed resize-requests create da seguinte maneira:

        gcloud compute instance-groups managed resize-requests create MIG_NAME \
            --resize-request=RESIZE_REQUEST_NAME \
            POPULATION_METHOD \
            --zone=ZONE
        
  • Para criar uma solicitação de redimensionamento em um MIG regional, use o comando instance-groups managed resize-requests create Beta da seguinte maneira:

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

REST

Crie uma solicitação de redimensionamento em um MIG zonal ou regional da seguinte maneira:

  • Para criar uma solicitação de redimensionamento em um MIG zonal, faça uma solicitação POST para o método instanceGroupManagerResizeRequests.insert da seguinte maneira:
          POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME/resizeRequests
          {
            "name": "RESIZE_REQUEST_NAME",
            POPULATION_METHOD
          }
          
  • Para criar uma solicitação de redimensionamento em um MIG regional, faça uma solicitação POST para o método beta.regionInstanceGroupManagerResizeRequests.insert da seguinte maneira:
          POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME/resizeRequests
          {
            "name": "RESIZE_REQUEST_NAME",
            POPULATION_METHOD
          }