Crie um MIG com tipos de máquinas H4D e início flexível

Este tutorial mostra como criar um grupo de instâncias geridas (GIG) que usa um tipo de máquina H4D. O MIG usa o modelo de consumo de início flexível do programador de cargas de trabalho dinâmicas para obter recursos de computação durante um máximo de sete dias.

A criação de um GIG permite-lhe gerir várias máquinas virtuais (VMs) como uma única entidade. Cada VM num MIG baseia-se num modelo de instância. Ao gerirem automaticamente as VMs no grupo, os MIGs oferecem elevada disponibilidade e escalabilidade. Para saber mais sobre os MIGs, consulte o artigo Grupos de instâncias geridas.

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

Este tutorial destina-se a engenheiros, administradores e operadores de HPC, bem como a especialistas em dados e MPI interessados em criar um grupo de instâncias de HPC interligadas para cargas de trabalho de curta duração. As instâncias resultantes não usam um orquestrador para a gestão de instâncias nem para o agendamento de tarefas.

Opcional: peça uma quota preemptível

As instâncias de VM adicionadas ao MIG consomem quota regional. As quotas de instâncias de VM, grupos de instâncias, CPUs e discos podem ser consumidas por qualquer instância de VM na região, independentemente da zona.

A quota pode ser uma quota padrão ou uma quota preemptível quando usa o início flexível.

  • Quota padrão: se o seu projeto não tiver quota preemptível e nunca tiver pedido quota preemptível, os recursos de instância consomem quota padrão.
  • Quota preemptível: pedir quotas preemptíveis pode ajudar a melhorar a obtenção de quotas, fornecendo quotas separadas para recursos temporários. No entanto, depois de o Compute Engine lhe conceder uma quota preemptível numa região, todos os recursos aplicáveis consomem apenas a quota preemptível. Se esta quota estiver esgotada, tem de pedir uma quota preemptível adicional para os recursos de VM.

Pode pedir uma quota preemptível seguindo os passos documentados no artigo Peça um ajuste de quota.

Tipos de quota necessários

Para usar grupos de instâncias, tem de ter quota disponível para todos os recursos que o grupo usa (por exemplo, quota de CPU) e quota disponível para o próprio recurso do grupo. Para instâncias H4D, podem ser usados os seguintes tipos de quotas, consoante o tipo de máquina usado pelas instâncias:

Recurso Quota padrão Quota 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, pode ser necessária a seguinte quota regional adicional:

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

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

Opcional: crie redes VPC

A menos que opte por desativá-la, cada projeto tem uma rede predefinida, que pode ser usada para fornecer conetividade de rede às suas instâncias. Quando cria uma VM, pode especificar uma rede de VPC e uma sub-rede. Se omitir esta configuração, são usadas a rede e a sub-rede predefinidas.

As instâncias H4D podem ser configuradas para usar o RDMA na nuvem. O RDMA na nuvem permite capacidades de mensagens fiáveis de baixa latência através de um controlador de rede IRDMA que suporta o acesso direto à memória (RDMA) remoto entre instâncias do Compute Engine.

Para este tutorial:

  • Se quiser configurar as instâncias H4D para usar o RDMA na nuvem, conclua os passos nesta secção.
  • Se não quiser usar o RDMA na nuvem, pode ignorar esta secção e usar a rede predefinida.

As instâncias com RDMA requerem, no mínimo, duas interfaces de rede (NICs):

  • Tipo de NIC GVNIC: usa o controlador gve para TCP/IP e tráfego da Internet para comunicação normal entre VMs e entre VMs e a Internet.
  • Tipo de NIC IRDMA: usa controladores IDPF/iRDMA para rede RDMA na nuvem entre instâncias.

As instâncias que usam o RDMA na nuvem só podem ter uma interface IRDMA. Pode adicionar até oito interfaces de rede GVNIC adicionais para um total de 10 NICs por instância.

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

Guias de instruções

Para criar as redes, pode usar as seguintes instruções:

Script

Pode criar até nove interfaces de rede GVNIC e uma interface de rede IRDMA por instância. Cada interface de rede tem de ser anexada a uma rede separada. Para criar as redes, pode usar o seguinte script, 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 existe um disponível.
      gcloud beta compute network-profiles list
      
  2. Copie o seguinte código e execute-o numa 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 o seguinte:

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

    1. Na Google Cloud consola, aceda à página Redes VPC.

      Aceda a redes de VPC

    2. Pesquise na lista as estações que criou no passo anterior.
    3. Para ver as sub-redes, as regras da firewall e outras definições de rede, clique no nome da rede.

Crie um modelo de instância

Para usar a opção de consumo de início flexível, crie um GIG vazio e, em seguida, crie um pedido de redimensionamento para o GIG. Quando a capacidade pedida fica disponível, o Compute Engine aprovisiona-a e cria as instâncias no GIG. Obtém recursos durante um máximo de sete dias.

Para especificar as propriedades de instância e consumo de cada instância no MIG, crie um modelo de instância através de 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 o seguinte:

  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.
  • MACHINE_TYPE: o tipo de máquina H4D a usar para a instância.
  • IMAGE_FAMILY: a família de imagens da imagem do SO que quer usar. Para ver uma lista dos sistemas operativos suportados, consulte o artigo Sistemas operativos suportados.
  • IMAGE_PROJECT: o ID do projeto da imagem do SO.
  • REGION: a região onde quer criar o modelo de instância. Especifique uma região na qual o tipo de máquina que quer usar está disponível.
  • DISK_SIZE: o tamanho do disco de arranque em GiB.
  • GVNIC_NAME_PREFIX: o prefixo do nome que usou quando criou as redes VPC e as sub-redes padrão para as interfaces gVNIC.

    Se estiver a usar a rede predefinida, inclua apenas um único campo --network-interface com o campo nic-type definido como GVNIC. Além disso, omita as definições network e subnetwork para esta interface de rede.

  • STACK_TYPE: Opcional: o tipo de pilha a usar para a interface gVNIC. Especifique IPV4_ONLY ou IPV4_IPV6. Se não especificar um valor, IPV4_ONLY é usado por predefinição.
  • EXTERNAL_IPV4_ADDRESS: Opcional: um endereço IPv4 externo estático a usar com a interface de rede gVNIC. Tem de ter reservado um endereço IPv4 externo anteriormente. Efetue um dos seguintes passos:

    • 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 efémero.

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

  • RDMA_NAME_PREFIX: o prefixo do nome que usou quando criou a rede VPC e a sub-rede para a interface de rede IRDMA.

    Se não estiver a usar o RDMA na nuvem com as suas instâncias H4D, omita o campo --network-interface para a interface IRDMA.

  • RUN_DURATION: a duração durante a qual quer que as instâncias pedidas sejam executadas. Tem de formatar o valor como o número de dias, horas, minutos ou segundos, seguido de d, h, m e s, respetivamente. Por exemplo, especifique 30m para 30 minutos ou 1d2h3m4s para um dia, duas horas, três minutos e quatro segundos. O valor tem de estar entre 10 minutos e sete dias.

REST

Para criar um modelo de instância regional, faça um pedido POST ao 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 o seguinte:

  • INSTANCE_TEMPLATE_NAME: o nome do modelo de instância.
  • MACHINE_TYPE: o tipo de máquina a usar para a instância. Especifique um tipo de máquina H4D. Para mais informações, consulte os tipos de máquinas H4D.
  • IMAGE_FAMILY: a família de imagens da imagem do SO que quer usar. Para ver uma lista dos sistemas operativos suportados, consulte o artigo Sistemas operativos suportados.
  • IMAGE_PROJECT: o ID do projeto da imagem do SO.
  • REGION: a região onde quer criar o modelo de instância. Especifique uma região na qual o tipo de máquina que quer usar está disponível. Para obter informações sobre regiões, consulte o artigo Regiões e zonas.
  • DISK_SIZE: o tamanho do disco de arranque em GiB.
  • GVNIC_NAME_PREFIX: o prefixo do nome que usou quando criou as redes VPC e as sub-redes padrão para as interfaces gVNIC.

    Se estiver a usar a rede predefinida, inclua apenas um único campo --network-interface com o campo nic-type definido como GVNIC. Além disso, omita as definições network e subnetwork para esta interface de rede.

  • EXTERNAL_IPV4_ADDRESS: Opcional: um endereço IPv4 externo estático a usar com a interface de rede gVNIC. Tem de ter reservado um endereço IPv4 externo anteriormente.

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

  • RDMA_NAME_PREFIX: o prefixo do nome que usou quando criou a rede VPC e a sub-rede para a interface de rede IRDMA.

    Se não estiver a usar o RDMA na nuvem com as suas instâncias H4D, omita o campo --network-interface para a interface IRDMA.

  • RUN_DURATION: a duração, em segundos, durante a qual quer que as instâncias pedidas sejam executadas. O valor tem de estar entre 600, que é 600 segundos (10 minutos), e 604800, que é 604 800 segundos (sete dias).

Depois de criar o modelo de instância, pode ver o modelo para ver o respetivo ID e rever as propriedades da instância.

Crie um MIG com um pedido de redimensionamento

Para criar todas as instâncias de início flexível ao mesmo tempo, crie um MIG e, em seguida, crie um pedido de redimensionamento no MIG, conforme descrito nesta secção.

Crie o MIG

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

gcloud

Crie um GIG zonal ou regional da seguinte forma:

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

        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 forma.

        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 GIG zonal ou regional da seguinte forma:

  • Para criar um MIG zonal, faça um pedido POST ao método instanceGroupManagers.insert da seguinte forma.
          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 um pedido POST ao método regionInstanceGroupManagers.insert da seguinte forma.
          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"
            }
          }
         

Crie o pedido de redimensionamento

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

gcloud

Crie um pedido de redimensionamento da seguinte forma:

REST

Crie um pedido de redimensionamento num GIG zonal ou regional da seguinte forma:

  • Para criar um pedido de redimensionamento num MIG zonal, faça um pedido POST ao método instanceGroupManagerResizeRequests.insert da seguinte forma:
          POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME/resizeRequests
          {
            "name": "RESIZE_REQUEST_NAME",
            POPULATION_METHOD
          }
          
  • Para criar um pedido de redimensionamento numa GIG regional, faça um pedido POST ao método beta.regionInstanceGroupManagerResizeRequests.insert da seguinte forma:
          POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME/resizeRequests
          {
            "name": "RESIZE_REQUEST_NAME",
            POPULATION_METHOD
          }