Crie VMs GPU em massa


Você pode criar um grupo de máquinas virtuais (VMs) que possuem unidades de processamento gráfico (GPUs) anexadas usando o processo de criação em massa. Com o processo de criação em massa, você obtém validação inicial onde a solicitação falha rapidamente se não for viável. Além disso, se você usar o sinalizador de região, a API de criação em massa escolherá automaticamente a zona que tem capacidade para atender à solicitação.

Para saber mais sobre a criação em massa, consulte Sobre a criação em massa de VMs . Para saber mais sobre como criar VMs com GPUs anexadas, consulte Visão geral da criação de uma instância com GPUs anexadas .

Antes de começar

  • Para revisar as limitações e etapas adicionais de pré-requisitos para a criação de instâncias com GPUs anexadas, como selecionar uma imagem do sistema operacional e verificar a cota de GPU, consulte Visão geral da criação de uma instância com GPUs anexadas .
  • Para revisar as limitações da criação em massa, consulte Sobre a criação em massa de VMs .
  • Se ainda não o fez, configure a autenticação. Autenticação é o processo pelo qual sua identidade é verificada para acesso a Google Cloud serviços e APIs. Para executar códigos ou amostras em um ambiente de desenvolvimento local, você pode se autenticar no Compute Engine selecionando uma das seguintes opções:

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

    gcloud

    1. After installing the Google Cloud CLI, initialize it 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.

    2. Set a default region and zone.
    3. REST

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

        After installing the Google Cloud CLI, initialize it 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 Autenticar para usar REST na documentação de autenticação do Google Cloud.

Funções obrigatórias

Para obter as permissões necessárias para criar VMs, peça ao administrador para conceder a você a função do IAM Compute Instance Admin (v1) ( roles/compute.instanceAdmin.v1 ) no projeto. Para obter mais informações sobre a concessão de funções, consulte Gerenciar acesso a projetos, pastas e organizações .

Esta função predefinida contém as permissões necessárias para criar VMs. Para ver 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:

  • compute.instances.create no projeto
  • Para usar uma imagem personalizada para criar a VM: compute.images.useReadOnly na imagem
  • Para usar um instantâneo para criar a VM: compute.snapshots.useReadOnly no instantâneo
  • Para usar um modelo de instância para criar a VM: compute.instanceTemplates.useReadOnly no modelo de instância
  • Para atribuir uma rede legada à VM: compute.networks.use no projeto
  • Para especificar um endereço IP estático para a VM: compute.addresses.use no projeto
  • Para atribuir um endereço IP externo à VM ao usar uma rede legada: compute.networks.useExternalIp no projeto
  • Para especificar uma sub-rede para sua VM: compute.subnetworks.use no projeto ou na sub-rede escolhida
  • Para atribuir um endereço IP externo à VM ao usar uma rede VPC: compute.subnetworks.useExternalIp no projeto ou na sub-rede escolhida
  • Para definir metadados de instância de VM para a VM: compute.instances.setMetadata no projeto
  • Para definir tags para a VM: compute.instances.setTags na VM
  • Para definir rótulos para a VM: compute.instances.setLabels na VM
  • Para definir uma conta de serviço para a VM usar: compute.instances.setServiceAccount na VM
  • Para criar um novo disco para a VM: compute.disks.create no projeto
  • Para anexar um disco existente no modo somente leitura ou leitura-gravação: compute.disks.use no disco
  • Para anexar um disco existente no modo somente leitura: compute.disks.useReadOnly no disco

Você também poderá obter essas permissões com funções personalizadas ou outras funções predefinidas .

Visão geral

Ao criar VMs com GPUs anexadas usando o método de criação em massa, você pode optar por criar VMs em uma região (como us-central1 ) ou em uma zona específica como ( us-central1-a ).

Se você optar por especificar uma região, o Compute Engine colocará as VMs em qualquer zona da região que ofereça suporte a GPUs.

Tipos de máquinas

A família de máquinas otimizadas para acelerador contém vários tipos de máquinas.

Cada tipo de máquina otimizada para acelerador possui um modelo específico de GPUs NVIDIA conectado.

Criar grupos de VMs A3, A2 e G2

Esta seção explica que você pode criar instâncias em massa para as séries de máquinas A3 High, A3 Mega, A3 Edge, A2 e G2 usando Google Cloud CLI ou REST .

gcloud

Para criar um grupo de VMs, use o comando gcloud compute instances bulk create . Para obter mais informações sobre os parâmetros e como usar esse comando, consulte Criar VMs em massa .

Os seguintes sinalizadores opcionais são mostrados no comando de exemplo:

  • O --provisioning-model=SPOT é um sinalizador opcional que configura suas VMs como Spot VMs. Se sua carga de trabalho for tolerante a falhas e puder suportar uma possível preempção de VM, considere usar VMs spot para reduzir o custo de suas VMs e das GPUs anexadas. Para obter mais informações, consulte GPUs em VMs Spot . Para VMs Spot, os sinalizadores de opções de reinicialização automática e manutenção do host estão desabilitados.

  • O sinalizador --accelerator para especificar uma estação de trabalho virtual. As estações de trabalho virtuais NVIDIA RTX (vWS) são suportadas apenas para VMs G2.

Exemplo

Este exemplo cria duas VMs que possuem GPUs anexadas usando as seguintes especificações:

gcloud compute instances bulk create \
    --name-pattern="my-test-vm-#" \
    --region=REGION \
    --count=2 \
    --machine-type=MACHINE_TYPE \
    --boot-disk-size=200 \
    --image=IMAGE \
    --image-project=IMAGE_PROJECT \
    --on-host-maintenance=TERMINATE \
    [--provisioning-model=SPOT] \
    [--accelerator=type=nvidia-l4-vws,count=VWS_ACCELERATOR_COUNT]

Substitua o seguinte:

  • REGION : a região das VMs. Esta região deve suportar o modelo de GPU selecionado .
  • MACHINE_TYPE : o tipo de máquina que você selecionou. Escolha um dos seguintes:

    • Uma máquina tipo A3 .
    • Um tipo de máquina A2 .
    • Um tipo de máquina G2 . Os tipos de máquinas G2 também suportam memória personalizada. A memória deve ser um múltiplo de 1.024 MB e estar dentro do intervalo de memória suportado. Por exemplo, para criar uma VM com 4 vCPUs e 19 GB de memória, especifique --machine-type=g2-custom-4-19456 .
  • IMAGE : uma imagem do sistema operacional que suporta GPUs .

    Se você quiser usar a imagem mais recente em uma família de imagens , substitua o sinalizador --image pelo sinalizador --image-family e defina seu valor para uma família de imagens que suporte GPUs. Por exemplo: --image-family=rocky-linux-8-optimized-gcp .

    Você também pode especificar uma imagem personalizada ou Deep Learning VM Images .

  • IMAGE_PROJECT : o projeto de imagem do Compute Engine ao qual a imagem do SO pertence. Se estiver usando uma imagem personalizada ou imagens de VM de aprendizado profundo, especifique o projeto ao qual essas imagens pertencem.

  • VWS_ACCELERATOR_COUNT : o número de GPUs virtuais necessárias.

Se for bem-sucedido, a saída será semelhante a esta:

NAME          ZONE
my-test-vm-1  us-central1-b
my-test-vm-2  us-central1-b
Bulk create request finished with status message: [VM instances created: 2, failed: 0.]

DESCANSAR

Use o método instances.bulkInsert com os parâmetros necessários para criar diversas VMs em uma zona. Para obter mais informações sobre os parâmetros e como usar esse comando, consulte Criar VMs em massa .

Exemplo

Este exemplo cria duas VMs que possuem GPUs anexadas usando as seguintes especificações:

  • Nomes de VM: my-test-vm-1 , my-test-vm-2
  • Cada VM tem duas GPUs anexadas, especificadas usando o tipo de máquina apropriada otimizada para acelerador

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instances/bulkInsert
    {
    "namePattern":"my-test-vm-#",
    "count":"2",
    "instanceProperties": {
      "machineType":MACHINE_TYPE,
      "disks":[
        {
          "type":"PERSISTENT",
          "initializeParams":{
            "diskSizeGb":"200",
            "sourceImage":SOURCE_IMAGE_URI
          },
          "boot":true
        }
      ],
      "name": "default",
      "networkInterfaces":
      [
        {
          "network": "projects/PROJECT_ID/global/networks/default"
        }
      ],
      "scheduling":{
        "onHostMaintenance":"TERMINATE",
        ["automaticRestart":true]
      }
    }
    }
    

Substitua o seguinte:

  • PROJECT_ID : o ID do seu projeto
  • REGION : a região das VMs. Esta região deve suportar o modelo de GPU selecionado .
  • MACHINE_TYPE : o tipo de máquina que você selecionou. Escolha um dos seguintes:

    • Um tipo de máquina A2 .
    • Um tipo de máquina G2 . Os tipos de máquinas G2 também suportam memória personalizada. A memória deve ser um múltiplo de 1.024 MB e estar dentro do intervalo de memória suportado. Por exemplo, para criar uma VM com 4 vCPUs e 19 GB de memória, especifique --machine-type=g2-custom-4-19456 .
  • SOURCE_IMAGE_URI : o URI da imagem ou família de imagens específica que você deseja usar.

    Por exemplo:

    • Imagem específica: "sourceImage": "projects/rocky-linux-cloud/global/images/rocky-linux-8-optimized-gcp-v20220719"
    • Família de imagens: "sourceImage": "projects/rocky-linux-cloud/global/images/family/rocky-linux-8-optimized-gcp" .

    Quando você especifica uma família de imagens, o Compute Engine cria uma VM a partir da imagem de sistema operacional mais recente e não obsoleta dessa família. Para obter mais informações sobre quando usar famílias de imagens, consulte Práticas recomendadas para famílias de imagens .

Configurações adicionais:

  • Se sua carga de trabalho for tolerante a falhas e puder suportar uma possível preempção de VM, considere usar VMs spot para reduzir o custo de suas VMs e das GPUs anexadas. Para obter mais informações, consulte GPUs em VMs Spot . Para usar uma VM Spot, adicione a opção "provisioningModel": "SPOT à sua solicitação. Para VMs Spot, os sinalizadores de opções de reinicialização automática e manutenção do host estão desabilitados.

    "scheduling":
      {
        "provisioningModel": "SPOT"
      }
    
  • Para VMs G2, há suporte para estações de trabalho virtuais NVIDIA RTX (vWS). Para especificar uma estação de trabalho virtual, adicione a opção guestAccelerators à sua solicitação. Substitua VWS_ACCELERATOR_COUNT pelo número de GPUs virtuais necessárias.

    "guestAccelerators":
     [
       {
         "acceleratorCount": VWS_ACCELERATOR_COUNT,
         "acceleratorType": "projects/PROJECT_ID/zones/ZONEacceleratorTypes/nvidia-l4-vws"
       }
     ]
    

Criar grupos de VMs de uso geral N1

Você cria um grupo de VMs com GPUs anexadas usando a Google Cloud CLI ou REST .

Esta seção descreve como criar várias VMs usando os seguintes tipos de GPU:

GPUs NVIDIA:

  • NVIDIA T4: nvidia-tesla-t4
  • NVIDIA P4: nvidia-tesla-p4
  • NVIDIA P100: nvidia-tesla-p100
  • NVIDIA V100: nvidia-tesla-v100

Estação de trabalho virtual NVIDIA RTX (vWS) (anteriormente conhecida como NVIDIA GRID):

  • Estação de trabalho virtual NVIDIA T4: nvidia-tesla-t4-vws
  • Estação de trabalho virtual NVIDIA P4: nvidia-tesla-p4-vws
  • Estação de trabalho virtual NVIDIA P100: nvidia-tesla-p100-vws

    Para essas estações de trabalho virtuais, uma licença de estação de trabalho virtual NVIDIA RTX (vWS) é automaticamente adicionada à sua VM.

gcloud

Para criar um grupo de VMs, use o comando gcloud compute instances bulk create . Para obter mais informações sobre os parâmetros e como usar esse comando, consulte Criar VMs em massa .

Exemplo

O exemplo a seguir cria duas VMs com GPUs anexadas usando as seguintes especificações:

  • Nomes de VM: my-test-vm-1 , my-test-vm-2
  • VMs criadas em qualquer zona em us-central1 que suporte GPUs
  • Cada VM tem duas GPUs T4 anexadas, especificadas usando o tipo de acelerador e sinalizadores de contagem de acelerador
  • Cada VM tem drivers de GPU instalados
  • Cada VM usa a imagem de VM de Deep Learning pytorch-latest-gpu-v20211028-debian-10
gcloud compute instances bulk create \
    --name-pattern="my-test-vm-#" \
    --count=2 \
    --region=us-central1 \
    --machine-type=n1-standard-2 \
    --accelerator type=nvidia-tesla-t4,count=2 \
    --boot-disk-size=200 \
    --metadata="install-nvidia-driver=True" \
    --scopes="https://www.googleapis.com/auth/cloud-platform" \
    --image=pytorch-latest-gpu-v20211028-debian-10 \
    --image-project=deeplearning-platform-release \
    --on-host-maintenance=TERMINATE --restart-on-failure

Se for bem-sucedido, a saída será semelhante a esta:

NAME          ZONE
my-test-vm-1  us-central1-b
my-test-vm-2  us-central1-b
Bulk create request finished with status message: [VM instances created: 2, failed: 0.]

DESCANSAR

Use o método instances.bulkInsert com os parâmetros necessários para criar diversas VMs em uma zona. Para obter mais informações sobre os parâmetros e como usar esse comando, consulte Criar VMs em massa .

Exemplo

O exemplo a seguir cria duas VMs com GPUs anexadas usando as seguintes especificações:

  • Nomes de VM: my-test-vm-1 , my-test-vm-2
  • VMs criadas em qualquer zona em us-central1 que suporte GPUs
  • Cada VM tem duas GPUs T4 anexadas, especificadas usando o tipo de acelerador e sinalizadores de contagem de acelerador
  • Cada VM tem drivers de GPU instalados
  • Cada VM usa a imagem de VM de Deep Learning pytorch-latest-gpu-v20211028-debian-10

Substitua PROJECT_ID pelo ID do seu projeto.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/region/us-central1/instances/bulkInsert

{
    "namePattern":"my-test-vm-#",
    "count":"2",
    "instanceProperties": {
      "machineType":"n1-standard-2",
      "disks":[
        {
          "type":"PERSISTENT",
          "initializeParams":{
            "diskSizeGb":"200",
            "sourceImage":"projects/deeplearning-platform-release/global/images/pytorch-latest-gpu-v20211028-debian-10"
          },
          "boot":true
        }
      ],
      "name": "default",
      "networkInterfaces":
      [
        {
          "network": "projects/PROJECT_ID/global/networks/default"
        }
      ],
      "guestAccelerators":
      [
        {
          "acceleratorCount": 2,
          "acceleratorType": "nvidia-tesla-t4"
        }
      ],
      "scheduling":{
        "onHostMaintenance":"TERMINATE",
        "automaticRestart":true
      },
      "metadata":{
        "items":[
          {
            "key":"install-nvidia-driver",
            "value":"True"
          }
        ]
      }
  }
 }

O que vem a seguir?