Criar uma instância que usa o Cloud RDMA


Nesta página, explicamos como criar instâncias de HPC com interfaces de rede compatíveis com RDMA. Para instruções sobre como criar instâncias A4 ou A3 Ultra otimizadas para aceleradores que usam RDMA, consulte Criar uma instância otimizada para IA com A4 ou A3 Ultra.

Para criar uma instância de computação que use acesso direto à memória remota (RDMA), você precisa configurar pelo menos duas interfaces de rede (NICs) ao criar a instância. Uma NIC precisa ser uma NIC IRDMA que se conecta a uma rede VPC com um perfil de rede RDMA, e a outra NIC precisa usar GVNIC.

Use a tabela Comparação de séries de máquinas para determinar quais séries de máquinas são compatíveis com interfaces de rede RDMA.

Antes de começar

  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação verifica sua identidade para acesso a serviços e APIs do Google Cloud . Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine selecionando uma das seguintes opções:

    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

    1. Instale a CLI do Google Cloud. Após a instalação, inicialize a CLI do Google Cloud executando o seguinte comando:

      gcloud init

      Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

    2. Set a default region and zone.

    REST

    Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.

      Instale a CLI do Google Cloud. Após a instalação, inicialize a CLI do Google Cloud executando o seguinte comando:

      gcloud init

      Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

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

Funções exigidas

Para receber as permissões necessárias para criar uma instância que ofereça suporte à comunicação RDMA, peça ao administrador para conceder a você o papel do IAM de Administrador da instância da computação (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 uma instância que ofereça suporte à comunicação RDMA. 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 uma instância que ofereça suporte à comunicação RDMA:

  • compute.instances.create no projeto
  • Usar uma imagem personalizada a fim de 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
  • 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.

Requisitos

Confira as regras a seguir para configurar uma interface de rede para uma instância:

  • Cada interface de rede precisa se conectar a uma rede de nuvem privada virtual diferente.
  • Para configurar uma interface de rede IRDMA, primeiro crie uma rede VPC com o perfil de rede Falcon RDMA na mesma região e zona da instância.
  • Se você não especificar uma rede ou sub-rede, o Compute Engine usará a rede VPC padrão e a sub-rede automática que estiver na mesma região da instância.
  • Se você especificar uma sub-rede, mas não uma rede, o Compute Engine vai inferir a rede pela sub-rede especificada.
  • Se você especificar uma rede, especifique uma sub-rede que pertença à mesma rede. Caso contrário, a criação da instância vai falhar.

Limitações

  • A rede Tier_1 para comunicação de IP interno é compatível apenas com VMs que executam o driver de rede virtual gVNIC.
  • Não é possível usar a migração em tempo real com VMs que usam RDMA. Você precisa configurar a instância para ser encerrada durante eventos de manutenção.
  • Não é possível usar RDMA com grupos gerenciados de instâncias (MIGs) (gerenciados ou não gerenciados).
  • Só é possível usar tipos de pilha de rede IPv4_ONLY com uma instância compatível com RDMA.
  • Só é possível usar a série de máquinas H4D para criar uma instância que usa o Cloud RDMA.

Criar uma instância ativada para Cloud RDMA

As instâncias do Cloud 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 VMs e entre VM e Internet.
  • Tipo de NIC IRDMA: usa drivers IDPF/iRDMA para comunicação baseada em RDMA entre instâncias

Uma instância só pode ter uma interface IRDMA. Cada instância pode ter de uma a 10 interfaces de rede.

Para criar uma instância que usa IRDMA, siga as etapas nas seções a seguir:

  1. Crie uma política de posicionamento, se não houver uma adequada.

  2. Crie uma rede VPC ou use uma rede VPC compatível com RDMA.

  3. Crie uma instância habilitada para RDMA que tenha uma interface de rede IRDMA, pelo menos uma interface de rede GVNIC e use uma política de posicionamento compacto.

Criar uma política de posicionamento para instâncias de RDMA

As instâncias que se comunicam usando RDMA precisam estar localizadas em uma única zona e, mais estritamente, em uma única estrutura de cluster. É possível criar uma política de posicionamento compacto e especificar um valor de distância máxima para definir a compactação mínima em uma zona. Há um limite para o número de instâncias a que você pode atribuir a política de posicionamento compacto ao especificar um valor de distância máxima, e o limite muda dependendo do valor escolhido.

Criar redes de nuvem privada virtual

Para configurar as redes, siga as instruções documentadas ou use o script fornecido.

Guias de instruções

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

Script

Para criar as redes, use o script a seguir.

  1. Opcional: antes de executar o script, liste os perfis de rede RDMA para verificar se eles estão disponíveis.

    gcloud beta compute network-profiles list
    
  2. Copie e execute o código a seguir em uma janela de shell do Linux.

#!/bin/bash

# Create standard VPC (network and subnet) for the GVNIC interface
  gcloud beta compute networks create GVNIC_NAME_PREFIX-net-0 \
    --subnet-mode=custom

  gcloud beta compute networks subnets create GVNIC_NAME_PREFIX-sub-0 \
    --network=GVNIC_NAME_PREFIX-net-0 \
    --region=REGION \
    --range=10.0.0.0/16

  gcloud beta compute firewall-rules create GVNIC_NAME_PREFIX-internal-0 \
    --network=GVNIC_NAME_PREFIX-net-0 \
    --action=ALLOW \
    --rules=tcp:0-65535,udp:0-65535,icmp \
    --source-ranges=10.0.0.0/8

# Create SSH firewall rules
gcloud beta 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 an external IP for only the GVNIC interface
gcloud beta 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 network for RDMA over Falcon transport
gcloud beta compute networks create RDMA_NAME_PREFIX-irdma \
  --network-profile=ZONE-vpc-falcon \
  --subnet-mode custom

# Create subnet for RDMA
gcloud beta compute networks subnets create RDMA_NAME_PREFIX-irdma-sub \
    --network=RDMA_NAME_PREFIX-irdma \
    --region=REGION \
    --range=10.1.0.0/16  # offset to avoid overlap with GVNIC network

Substitua:

  • GVNIC_NAME_PREFIX: o prefixo de nome a ser usado para a rede e a sub-rede padrão da nuvem privada virtual que usam um tipo de NIC GVNIC.
  • RDMA_NAME_PREFIX: o prefixo de nome a ser usado para a rede e sub-rede da nuvem privada virtual 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.
  • REGION: a região em que você quer criar as redes. Ele precisa corresponder à zona especificada. Por exemplo, se a zona for 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 deGoogle Cloud.

Criar uma instância ativada para RDMA

As etapas a seguir mostram como criar uma instância com a primeira interface de rede configurada como uma interface gVNIC e a segunda interface de rede configurada como uma interface de rede IRDMA:

Console

  1. No console do Google Cloud , acesse a página Criar uma instância.

    Acesse "Criar uma instância"

    Se solicitado, selecione o projeto e clique em Continuar.

    A página Criar uma instância aparece e mostra o painel Configuração da máquina.

  2. No painel Configuração da máquina, faça o seguinte:

    1. No campo Nome, especifique um nome para a instância. Para mais informações, consulte Convenção de nomenclatura de recursos.
    2. Opcional: no campo Zona, selecione uma zona para esta instância.

      Escolha a zona que você usou para configurar o perfil de rede RDMA.

    3. Escolha a família de máquinas Otimizada para computação.

    4. Na coluna Série, selecione a série de máquinas H4D.

    5. Na seção Tipo de máquina, selecione o tipo de máquina para sua instância.

  3. No menu de navegação à esquerda, clique em SO e armazenamento. No painel Sistema operacional e armazenamento, faça o seguinte:

    1. Na parte de baixo da seção Sistema operacional e armazenamento, clique em Mudar.
    2. Nas listas Sistema operacional e Versão, selecione um tipo e uma versão de SO que ofereçam suporte a RDMA.
    3. Verifique se o Tipo de disco de inicialização está definido como "Hiperdisco balanceado".
    4. Clique em Selecionar na parte de baixo do painel para salvar as mudanças.
  4. No menu de navegação à esquerda, clique em Rede. No painel Rede exibido, faça o seguinte:

    1. Acesse a seção Interfaces de rede. Já deve haver uma interface de rede, identificada como default.
    2. Clique em Adicionar uma interface de rede. Na seção Nova interface de rede que aparece, faça o seguinte:
      1. Na lista Placa de rede, selecione IRDMA.
      2. No campo Rede, selecione a rede VPC com um perfil de rede RDMA.
      3. Opcional: na lista Sub-rede, selecione a sub-rede que a instância vai usar.
      4. No campo Tipo de pilha de IP, verifique se ele está definido como Somente IPv4.
      5. Na lista Endereço IPv4 externo, selecione Nenhum.
      6. Para confirmar os detalhes da interface de rede, clique em Concluído.
  5. Opcional: especifique outras opções de configuração para a instância. Para mais informações, consulte Opções de configuração durante a criação da instância.

  6. Para criar e iniciar a instância, clique em Criar.

gcloud

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

  2. Use o comando gcloud compute instances create com pelo menos duas flags --network-interface, uma para a interface GVNIC e outra para a IRDMA. Você pode personalizar o restante das opções de comando conforme necessário.

    gcloud compute instances create INSTANCE_NAME \
        --zone=ZONE \
        --machine-type=MACHINE_TYPE \
        --create-disk=boot=yes, \
            image=projects/IMAGE_PROJECT/global/images/IMAGE, \
            size=SIZE \
        --maintenance-policy=TERMINATE \
        --network-interface \
            nic-type=GVNIC, \
            network=NETWORK_NAME,subnet=SUBNET_NAME, \
            stack-type=STACK_TYPE, \
            private-network-ip=INTERNAL_IPV4_ADDRESS, \
            address=EXTERNAL_IPV4_ADDRESS \
        --network-interface \
            nic-type=IRDMA, \
            network=RDMA_NETWORK_NAME,subnet=RDMA_SUBNET_NAME, \
            stack-type=IPV4_ONLY, \
            no-address \
    

    Substitua:

    • INSTANCE_NAME: o nome da instância de computação
    • ZONE: a zona em que a instância é criada, como europe-west1-b. A região da instância é inferida da zona.
    • MACHINE_TYPE: opcional: o tipo de máquina a ser usado na instância.
    • IMAGE_PROJECT (opcional): o projeto de imagem que contém a imagem. Durante o período de prévia, use uma imagem personalizada ou a imagem de VM de HPC.
    • IMAGE: opcional: especifique uma destas opções:
      • Uma versão específica da imagem do SO. Por exemplo: hpc-rocky-linux-8-v20250721
      • Uma família de imagens, que precisa ser formatada como family/IMAGE_FAMILY. Isso cria a instância com a imagem do SO mais recente e não obsoleta. Por exemplo, se você especificar family/hpc-rocky-linux-8, o Compute Engine vai criar uma instância usando a versão mais recente da imagem do SO na família de imagens HPC Rocky Linux 8. Para mais informações sobre o uso de famílias de imagens, consulte Práticas recomendadas para famílias de imagens.
    • SIZE: opcional: o tamanho do novo disco. O valor precisa ser um número inteiro. A unidade de medida padrão é GiB.
    • NETWORK_NAME: opcional: nome da rede
    • SUBNET_NAME: nome da sub-rede a ser usada para a interface de rede. Para ver uma lista de sub-redes na rede, use o comando gcloud compute networks subnets list.

      Para a interface de rede gVNIC, é possível omitir as flags network e subnet e usar a rede default.

    • STACK_TYPE: opcional: o tipo de pilha da interface de rede gVNIC. STACK_TYPE precisa ser um dos seguintes: IPV4_ONLY, IPV4_IPV6 ou IPV6_ONLY. O valor padrão é IPV4_ONLY.

    • INTERNAL_IPV4_ADDRESS (opcional): o endereço IPv4 interno que você quer que a instância de computação use na sub-rede de destino. Omita essa flag se você não precisar de um endereço IP específico.

      Para especificar um endereço IPv6 interno, use a flag --internal-ipv6-address.

    • EXTERNAL_IPV4_ADDRESS: opcional: o endereço IPv4 externo estático a ser usado com a interface de rede. É 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 receba um endereço IP externo temporário.

      Para especificar um endereço IPv6 externo, use a flag --external-ipv6-address.

    • RDMA_NETWORK_NAME: o nome da rede que você criou com um perfil de rede RDMA.

    • RDMA_SUBNET_NAME: o nome de uma sub-rede na rede RDMA.

REST

Para criar uma instância configurada para usar RDMA, faça uma solicitação POST para o método instances.insert. Inclua o objeto networkInterfaces com pelo menos duas configurações de rede, uma para a interface gVNIC e outra para a IRDMA. É possível personalizar o restante das propriedades da instância, conforme necessário.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: ID do projeto em que a instância será criada.
  • ZONE: a zona em que a instância será criada
  • MACHINE_TYPE: o tipo de máquina a ser usado, por exemplo, h4d-highmem-192-lssd.
  • INSTANCE_NAME: um nome para a nova instância.
  • IMAGE_PROJECT (opcional): o projeto de imagem que contém a imagem
  • IMAGE (opcional): especifique uma das seguintes opções:

    • Uma versão específica da imagem do SO. Por exemplo: debian-12-bookworm-v20250415
    • Uma família de imagens, que precisa ser formatada como family/IMAGE_FAMILY. Isso cria a instância com a imagem do SO mais recente e não obsoleta. Por exemplo, se você especificar family/debian-12, o Compute Engine vai criar uma instância usando a versão mais recente da imagem do SO na família de imagens Debian 12. Para mais informações sobre o uso de famílias de imagens, consulte Práticas recomendadas para famílias de imagens.
  • NETWORK_NAME: opcional: nome da rede a ser usada com a interface de rede gVNIC
  • SUBNET_NAME: nome da sub-rede a ser usada com a interface de rede gVNIC

    Para a interface de rede GVNIC, é possível omitir as propriedades network e subnet e usar a rede default.

  • INTERNAL_IPV4_ADDRESS: Opcional: o endereço IPv4 interno que você quer que a instância de computação use na sub-rede de destino. Omita essa flag se você não precisar de um endereço IP específico.
  • EXTERNAL_IPV4_ADDRESS: Opcional: um endereço IPv4 externo estático para usar com a interface de rede. É preciso ter reservado um endereço IPv4 externo.
  • RDMA_NETWORK_NAME: o nome da rede que você criou com um perfil de rede RDMA.
  • RDMA_SUBNET_NAME: o nome de uma sub-rede na rede RDMA

Método HTTP e URL:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

Corpo JSON da solicitação:

{
    "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
    "name": "INSTANCE_NAME",
    "disks": [
      {
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        },
        "boot": true
      }
    ],
    "networkInterfaces": [
      {
        "network": "NETWORK_NAME",
        "subnetwork": "SUBNET_NAME",
        "networkIP": "INTERNAL_IPV4_ADDRESS",
        "accessConfigs": [
          {
            "type": "ONE_TO_ONE_NAT",
            "name": "External IP",
            "natIP": "EXTERNAL_IPV4_ADDRESS"
          }
        ],
        "stackType": "IPV4_ONLY",
        "nicType": "GVNIC",
      },
      {
        "network": "RDMA_NETWORK_NAME",
        "subnetwork": "RDMA_SUBNET_NAME",
        "stackType": "IPV4_ONLY",
        "nicType": "IRDMA",
      }
    ]
}

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

{
  "kind": "compute#operation",
  "id": "9216044482154695709",
  "name": "operation-1739207409646-62dccc7d7bc58-d1350b42-64fdb7f7",
  "zone": "https://www.googleapis.com/compute/v1/projects/`PROJECT_ID`/zones/`ZONE`",
  "operationType": "insert",
  "targetLink": "https://www.googleapis.com/compute/v1/projects/`PROJECT_ID`/zones/`ZONE`/instances/`INSTANCE_NAME`",
  "targetId": "2679381553616227357",
  "status": "RUNNING",
  "user": "USER_ID",
  "progress": 0,
  "insertTime": "2025-02-10T09:10:10.551-08:00",
  "startTime": "2025-02-10T09:10:10.551-08:00",
  "selfLink": "https://www.googleapis.com/compute/v1/projects/`PROJECT_ID`/zones/`ZONE`/operations/operation-1565289606387-58f9f62f5989c-e582f586-6d22f38"
 "kind": "compute#operation"
}

A seguir