Criar instâncias otimizadas para IA em massa com A4X

Neste documento, explicamos como criar instâncias de máquina virtual (VM) em massa que usam tipos de máquina A4X. Para saber mais sobre esse tipo de máquina otimizado para acelerador, consulte A4X.

Para saber mais sobre outras maneiras de criar VMs ou clusters, consulte Visão geral das opções de implantação.

Limitações

Ao criar VMs A4X em massa, as seguintes limitações se aplicam:

Antes de começar

Antes de criar VMs em massa, siga estas etapas, caso ainda não tenha feito isso:

  1. Escolha uma opção de consumo: a opção escolhida determina como você recebe e usa os recursos de GPU.

    Para saber mais, consulte Escolher uma opção de consumo.

  2. Obter capacidade: o processo para obter capacidade varia de acordo com cada opção de consumo.

    Para saber mais sobre o processo de obtenção de capacidade para a opção de consumo escolhida, consulte Visão geral da capacidade.

Select the tab for how you plan to use the samples on this page:

Console

When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

gcloud

In the Google Cloud console, activate Cloud Shell.

Activate Cloud Shell

At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

REST

Para usar os exemplos da API REST nesta página num ambiente de desenvolvimento local, usa as credenciais que fornece à CLI gcloud.

    Install the Google Cloud CLI. After installation, initialize the Google Cloud CLI by running the following command:

    gcloud init

    If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

Para mais informações, consulte o artigo Autenticar para usar REST na Google Cloud documentação de autenticação.

Funções exigidas

Para receber as permissões necessárias para criar VMs em massa, peça ao administrador para conceder a você o papel do IAM de Administrador da instância do Compute (v1) (roles/compute.instanceAdmin.v1) no projeto. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Esse papel predefinido contém as permissões necessárias para criar VMs em massa. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:

Permissões necessárias

As seguintes permissões são necessárias para criar VMs em massa:

  • compute.instances.create no projeto
  • Usar uma imagem personalizada para criar a VM: compute.images.useReadOnly na imagem
  • Usar um snapshot para criar a VM: compute.snapshots.useReadOnly no snapshot
  • Usar um modelo de instância para criar a VM: compute.instanceTemplates.useReadOnly no modelo de instância
  • Especificar uma sub-rede para a VM: compute.subnetworks.use no projeto ou na sub-rede escolhida
  • Especificar um endereço IP estático para a VM: compute.addresses.use no projeto
  • Atribuir um endereço IP externo à VM ao usar uma rede VPC: compute.subnetworks.useExternalIp no projeto ou na sub-rede escolhida
  • Atribuir uma rede legada à VM: compute.networks.use no projeto
  • Atribuir um endereço IP externo à VM usando uma rede legada: compute.networks.useExternalIp no projeto
  • Definir os metadados da instância de VM para a VM: compute.instances.setMetadata no projeto
  • Definir tags para a VM: compute.instances.setTags na VM
  • Definir rótulos para a VM: compute.instances.setLabels na VM
  • Definir uma conta de serviço a ser usada pela VM: compute.instances.setServiceAccount na VM
  • Criar um disco para a VM: compute.disks.create no projeto
  • Anexar um disco atual no modo somente leitura ou de leitura e gravação: compute.disks.use no disco
  • Anexar um disco atual no modo somente leitura: compute.disks.useReadOnly no disco

Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.

Princípios básicos do A4X

Um cluster A4X é organizado em uma hierarquia de blocos e sub-blocos para facilitar o desempenho de rede em grande escala e sem bloqueios. Entender essa topologia é fundamental ao reservar capacidade e implantar cargas de trabalho.

Instância A4X
Uma instância A4X é um único tipo de máquina A4X com quatro GPUs anexadas.
Domínio ou sub-bloco NVLink
Um domínio NVLink, também chamado de subbloco, é a unidade fundamental da capacidade do A4X. Um domínio NVLink consiste em 18 instâncias A4X (72 GPUs) conectadas usando um sistema NVLink de vários nós. Você cria um domínio A4X NVLink ou um subbloco aplicando uma política de posicionamento compacto que especifica uma topologia 1x72.
Bloquear
Um bloco A4X é composto de 25 sub-blocos (domínios NVLink), totalizando até 450 instâncias A4X (1.800 GPUs). Os sub-blocos são alinhados a trilhos para um escalonamento eficiente. Cada sub-bloco requer uma política de posição compacta. Portanto, para um único bloco A4X, é possível criar 25 políticas de posicionamento compacto.

A tabela a seguir mostra as opções de topologia compatíveis para instâncias A4X:

Topologia (gpuTopology) Número de GPUs Número de instâncias
1x72 72 18

Visão geral

A criação de instâncias em massa com o tipo de máquina A4X inclui as seguintes etapas:

  1. Criar redes VPC
  2. Criar uma política de posicionamento compacto
  3. Criar instâncias em massa

Criar redes VPC

Para configurar a rede para o tipo de máquina A4X, crie três redes VPC para as seguintes interfaces de rede:

  • Duas redes VPC regulares para as interfaces de rede (NIC) gVNIC Eles são usados para comunicação entre hosts.
  • 1 rede VPC com o perfil de rede RoCE é necessária para as NICs CX-7 ao criar vários subblocos A4X. A rede VPC RoCE precisa ter quatro sub-redes, uma para cada NIC CX-7. Essas NICs usam RDMA em Ethernet convergente (RoCE), fornecendo a comunicação de alta largura de banda e baixa latência essencial para escalonar para vários subblocos A4X. Para um único subbloco A4X, é possível pular essa rede VPC porque, em um único subbloco, a comunicação direta de GPU para GPU é processada pelo NVLink de vários nós.

Para mais informações sobre o arranjo de NICs, consulte Analisar a largura de banda da rede e o arranjo de NICs.

Crie as redes manualmente seguindo os guias de instruções ou automaticamente usando o script fornecido.

Guias de instruções

Crie as redes, suando as seguintes instruções:

Para essas redes VPC, recomendamos definir a unidade máxima de transmissão (MTU) para um valor maior. Para o tipo de máquina A4X, o MTU recomendado é de 8896 bytes. Para conferir as configurações de MTU recomendadas para outros tipos de máquina de GPU, consulte Configurações de MTU para tipos de máquina de GPU.

Script

Crie as redes, seguindo estas etapas.

Para essas redes VPC, recomendamos definir a unidade máxima de transmissão (MTU) para um valor maior. Para o tipo de máquina A4X, o MTU recomendado é de 8896 bytes. Para conferir as configurações de MTU recomendadas para outros tipos de máquina de GPU, consulte Configurações de MTU para tipos de máquina de GPU.

  1. Use o script a seguir para criar redes VPC regulares para as gVNICs.

      
        #!/bin/bash
    
        # Create regular VPC networks and subnets for the gVNICs
        for N in $(seq 0 1); do
          gcloud compute networks create GVNIC_NAME_PREFIX-net-$N \
            --subnet-mode=custom \
            --mtu=8896
    
          gcloud compute networks subnets create GVNIC_NAME_PREFIX-sub-$N \
            --network=GVNIC_NAME_PREFIX-net-$N \
            --region=REGION \
            --range=192.168.$N.0/24
    
          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=192.168.0.0/16
        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
    
        # Assumes that an external IP is only created for vNIC 0
        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
    
      
  2. Se você precisar de vários subblocos A4X, use o script a seguir para criar a rede VPC RoCE e as sub-redes para as quatro NICs CX-7 em cada instância A4X.

      
        # List and make sure network profiles exist in the machine type's zone
        gcloud compute network-profiles list --filter "location.name=ZONE"
    
        # Create network for CX-7
        gcloud compute networks create RDMA_NAME_PREFIX-mrdma \
          --network-profile=ZONE-vpc-roce \
          --subnet-mode custom \
          --mtu=8896
    
        # Create subnets
        for N in $(seq 0 3); do
          gcloud compute networks subnets create RDMA_NAME_PREFIX-mrdma-sub-$N \
            --network=RDMA_NAME_PREFIX-mrdma \
            --region=REGION \
            --range=192.168.$((N+2)).0/24 & # offset to avoid overlap with gVNICs
        done
    
      

    Substitua:

    • GVNIC_NAME_PREFIX: o prefixo de nome personalizado a ser usado para as redes e sub-redes VPC regulares das gVNICs.
    • RDMA_NAME_PREFIX: o prefixo de nome personalizado a ser usado para a rede VPC e as sub-redes RoCE das NICs CX-7.
    • ZONE: especifique uma zona em que o tipo de máquina que você quer usar esteja disponível, como us-central1-a. Para informações sobre regiões, consulte Disponibilidade de GPUs por regiões e zonas.
    • REGION: a região em que você quer criar as sub-redes. Essa região precisa corresponder à zona especificada. Por exemplo, se a zona for us-central1-a, a região será us-central1.
    • IP_RANGE: o intervalo de IP a ser usado para as regras de firewall SSH.
  3. Opcional: para verificar se os recursos de rede VPC foram criados, confira as configurações de rede no console do 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 uma política de colocação de compactação

Para criar uma política de posicionamento compacto, selecione uma das seguintes opções:

gcloud

Para criar uma política de posicionamento compacto, use o comando gcloud beta compute resource-policies create group-placement:

gcloud beta compute resource-policies create group-placement POLICY_NAME \
    --collocation=collocated \
    --gpu-topology=1x72 \
    --region=REGION

Substitua:

  • POLICY_NAME: o nome da política de posicionamento compacto.
  • REGION: a região em que você quer criar a política de posicionamento compacto. 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 Disponibilidade de GPUs por regiões e zonas.

REST

Para criar uma política de posicionamento compacto, faça uma solicitação POST para o método resourcePolicies.insert beta.

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/resourcePolicies
  {
    "name": "POLICY_NAME",
    "groupPlacementPolicy": {
      "collocation": "COLLOCATED",
      "gpuTopology": "1x72"
    }
  }

Substitua:

  • PROJECT_ID: ID do projeto;
  • POLICY_NAME: o nome da política de posicionamento compacto.
  • REGION: a região em que você quer criar a política de posicionamento compacto. 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 Disponibilidade de GPUs por regiões e zonas.

Criar instâncias A4X em massa

Para conseguir uma topologia de GPU de 1x72, crie 18 instâncias. Ao criar as instâncias, aplique a política de posicionamento compacto que especifica o campo gpuTopology. A aplicação da política garante que o Compute Engine crie todas as 18 instâncias em um sub-bloco para usar um domínio NVLink.

Se um subbloco não tiver capacidade para todas as 18 instâncias, a criação em massa vai falhar e nenhuma instância será criada.

Se a carga de trabalho puder operar com menos de 18 instâncias, defina o campo minCount com o número mínimo de instâncias necessárias para a carga de trabalho. Se você quiser usar qualquer capacidade disponível, defina o campo minCount como 1.

Para criar instâncias A4X em massa, selecione uma das seguintes opções.

Os comandos a seguir também definem o escopo de acesso para suas instâncias. Para simplificar o gerenciamento de permissões, o Google recomenda definir o escopo de acesso de uma instância como cloud-platform e usar papéis do IAM para definir a quais serviços a instância pode acessar. Para mais informações, consulte Práticas recomendadas de escopos.

gcloud

Para criar VMs em massa, use o comando gcloud compute instances bulk create.

gcloud compute instances bulk create \
    --name-pattern=NAME_PATTERN \
    --count=COUNT \
    --machine-type=a4x-highgpu-4g \
    --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT \
    --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 \
    --network-interface=nic-type=GVNIC,network=GVNIC_NAME_PREFIX-net-1,subnet=GVNIC_NAME_PREFIX-sub-1,no-address \
    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-0,no-address \
    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-1,no-address \
    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-2,no-address \
    --network-interface=nic-type=MRDMA,network=RDMA_NAME_PREFIX-mrdma,subnet=RDMA_NAME_PREFIX-mrdma-sub-3,no-address \
    --reservation-affinity=specific \
    --reservation=RESERVATION \
    --provisioning-model=RESERVATION_BOUND \
    --instance-termination-action=TERMINATION_ACTION \
    --maintenance-policy=TERMINATE \
    --restart-on-failure \
    --resource-policies=POLICY_NAME

Substitua:

  • NAME_PATTERN: o padrão de nome das VMs. Por exemplo, usar vm-# para o padrão de nome gera VMs com nomes como vm-1 e vm-2, até o número de VMs especificado por --count.
  • COUNT: o número de VMs a serem criadas.
  • 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: especifique uma região em que o tipo de máquina que você quer usar esteja disponível. Use a mesma região da política de posicionamento compacto. Para informações sobre regiões, consulte Disponibilidade de GPUs por regiões e zonas.
  • DISK_SIZE: o tamanho do disco de inicialização em GB.
  • GVNIC_NAME_PREFIX: o prefixo de nome especificado ao criar as redes e sub-redes VPC padrão que usam NICs gVNIC.
  • RDMA_NAME_PREFIX: o prefixo de nome especificado ao criar as redes e sub-redes da VPC que usam NICs RDMA.
  • RESERVATION: o nome da reserva, um bloco ou um subbloco dentro de uma reserva. Para conferir o nome da reserva ou os blocos disponíveis, consulte Visualizar a capacidade reservada. Com base nos seus requisitos de posicionamento de instâncias, escolha uma das seguintes opções:
    • Para criar as instâncias em qualquer bloco único:
          projects/RESERVATION_OWNER_PROJECT_ID/reservations/RESERVATION_NAME
          
    • Para criar as instâncias em um bloco específico:
          projects/RESERVATION_OWNER_PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME
          
    • Para criar as instâncias em um subbloco específico:
          projects/RESERVATION_OWNER_PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME/reservationSubBlocks/RESERVATION_SUBBLOCK_NAME
          
  • TERMINATION_ACTION: se o Compute Engine interrompe (STOP) ou exclui (DELETE) a VM ao final do período de reserva.

  • POLICY_NAME: o nome da política de posicionamento compacto.

REST

Para criar VMs em massa, faça uma solicitação POST para o método instances.bulkInsert.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/bulkInsert
{
  "namePattern":"NAME_PATTERN",
  "count":"COUNT",
  "instanceProperties":{
    "machineType":"a4x-highgpu-4g",
    "disks":[
      {
        "boot":true,
        "initializeParams":{
          "diskSizeGb":"DISK_SIZE",
          "diskType":"hyperdisk-balanced",
          "sourceImage":"projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
        },
        "mode":"READ_WRITE",
        "type":"PERSISTENT"
      }
    ],
    "serviceAccounts": [
      {
        "email": "default",
        "scopes": [
          "https://www.googleapis.com/auth/cloud-platform"
        ]
      }
    ],
    "networkInterfaces": [
      {
        "accessConfigs": [
          {
            "name": "external-nat",
            "type": "ONE_TO_ONE_NAT"
          }
        ],
        "network": "projects/NETWORK_PROJECT_ID/global/networks/GVNIC_NAME_PREFIX-net-0",
        "nicType": "GVNIC",
        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/GVNIC_NAME_PREFIX-sub-0"
      },
      {
        "network": "projects/NETWORK_PROJECT_ID/global/networks/GVNIC_NAME_PREFIX-net-1",
        "nicType": "GVNIC",
        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/GVNIC_NAME_PREFIX-sub-1"
      },
      {
        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",
        "nicType": "MRDMA",
        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-0"
      },
      {
        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",
        "nicType": "MRDMA",
        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-1"
      },
      {
        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",
        "nicType": "MRDMA",
        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-2"
      },
      {
        "network": "projects/NETWORK_PROJECT_ID/global/networks/RDMA_NAME_PREFIX-mrdma",
        "nicType": "MRDMA",
        "subnetwork": "projects/NETWORK_PROJECT_ID/region/REGION/subnetworks/RDMA_NAME_PREFIX-mrdma-sub-3"
      }
    ],
    "reservationAffinity":{
        "consumeReservationType":"SPECIFIC_RESERVATION",
        "key":"compute.googleapis.com/reservation-name",
        "values":[
          "RESERVATION"
        ]
      },
    "scheduling":{
        "provisioningModel":"RESERVATION_BOUND",
        "instanceTerminationAction":"DELETE",
        "onHostMaintenance": "TERMINATE",
        "automaticRestart":true
      },
    "resourcePolicies": [
      "projects/PROJECT_ID/regions/REGION/resourcePolicies/POLICY_NAME"
    ]
  }
}

Substitua:

  • PROJECT_ID: o ID do projeto em que você quer criar a VM.
  • ZONE: especifique uma zona em que o tipo de máquina que você quer usar esteja disponível. É preciso usar uma zona na mesma região da política de posicionamento compacto. Para informações sobre regiões, consulte Disponibilidade de GPUs por regiões e zonas.
  • NAME_PATTERN: o padrão de nome das VMs. Por exemplo, usar vm-# para o padrão de nome gera VMs com nomes como vm-1 e vm-2, até o número de VMs especificado por --count.
  • COUNT: o número de VMs a serem criadas.
  • VM_NAME: o nome da VM.
  • DISK_SIZE: o tamanho do disco de inicialização em GB.
  • IMAGE_PROJECT: o ID do projeto da imagem do SO.
  • 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.
  • NETWORK_PROJECT_ID: o ID do projeto da rede.
  • GVNIC_NAME_PREFIX: o prefixo de nome especificado ao criar as redes e sub-redes VPC padrão que usam NICs gVNIC.
  • REGION: a região da sub-rede.
  • RDMA_NAME_PREFIX: o prefixo de nome especificado ao criar as redes e sub-redes da VPC que usam NICs RDMA.
  • RESERVATION: o nome da reserva, um bloco ou um subbloco dentro de uma reserva. Para conferir o nome da reserva ou os blocos disponíveis, consulte Visualizar a capacidade reservada. Com base nos seus requisitos de posicionamento de instâncias, escolha uma das seguintes opções:
    • Para criar as instâncias em qualquer bloco único:
          projects/RESERVATION_OWNER_PROJECT_ID/reservations/RESERVATION_NAME
          
    • Para criar as instâncias em um bloco específico:
          projects/RESERVATION_OWNER_PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME
          
    • Para criar as instâncias em um subbloco específico:
          projects/RESERVATION_OWNER_PROJECT_ID/reservations/RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME/reservationSubBlocks/RESERVATION_SUBBLOCK_NAME
          
  • TERMINATION_ACTION: se o Compute Engine interrompe (STOP) ou exclui (DELETE) a VM ao final do período de reserva.

  • PROJECT_ID: o ID do projeto da política de posicionamento compacto.
  • REGION: a região da política de posicionamento compacto.
  • POLICY_NAME: o nome da política de posicionamento compacto.

Para mais informações sobre as opções de configuração ao criar VMs em massa, consulte Criar VMs em massa na documentação do Compute Engine.

A seguir