Adicionando ou removendo GPUs

O Compute Engine fornece unidades de processamento gráfico (GPUs, na sigla em inglês) que podem ser adicionadas às instâncias de máquina virtual. Use essas GPUs para acelerar cargas de trabalho específicas nas instâncias, como aprendizado de máquina e processamento de dados.

Para mais informações sobre o que pode ser feito com as GPUs e que tipos de hardware de GPU estão disponíveis, leia GPUs no Compute Engine.

Antes de começar

Como criar uma instância com uma GPU

Antes de criar uma instância com uma GPU, selecione a imagem de disco de inicialização que você quer usar para a instância e verifique se o driver apropriado da GPU está instalado.

Se você estiver usando GPUs para o machine learning, poderá utilizar uma imagem de VM de aprendizado profundo para sua instância. As imagens de VM de aprendizado profundo têm drivers de GPU pré-instalados e incluem pacotes como o TensorFlow e o PyTorch. Você também pode usar as imagens de VM de aprendizado profundo para cargas de trabalho gerais de GPU. Para mais informações sobre as imagens disponíveis e os pacotes instalados nas imagens, consulte a documentação sobre VMs de aprendizado aprofundado.

Use qualquer imagem pública ou personalizada, mas algumas podem exigir um driver exclusivo ou processo de instalação não abordado neste guia. É preciso identificar quais drivers são apropriados para as imagens.

Consulte Como instalar drivers de GPU para conhecer as etapas de instalação.

Durante a criação de uma instância com uma ou mais GPUs, é necessário configurá-la para que seja encerrada na manutenção do host. Não é possível migrar em tempo real as instâncias com GPUs porque elas estão atribuídas a dispositivos de hardware específicos. Consulte detalhes em Restrições da GPU.

Crie uma instância com uma ou mais GPUs usando o Console do Google Cloud, a ferramenta de linha de comando gcloud ou a API.

Console

  1. Acesse a página "Instâncias de VM".

    Acessar a página de instâncias de VM

  2. Clique em Criar instância.
  3. Selecione uma zona em que as GPUs estejam disponíveis. Consulte a lista de zonas disponíveis com GPUs.
  4. Na seção Configuração da máquina, selecione o tipo de máquina que você quer usar nessa instância. Se preferir, é possível especificar configurações de tipo de máquina personalizado.
  5. Na seção Configuração da máquina, clique em Plataforma de CPU e GPU para ver as opções avançadas de tipo de máquina e as GPUs disponíveis.
  6. Clique em GPUs para ver a lista de GPUs disponíveis.
  7. Especifique o tipo e o número de GPUs necessárias.
  8. Se necessário, ajuste o tipo de máquina para acomodar as configurações de GPU que você quer. Se você deixar essas configurações como estão, a instância usará o tipo de máquina predefinido que você especificou antes de abrir a tela de personalização do tipo de máquina.
  9. Para configurar o disco de inicialização, clique em Alterar na seção Disco de inicialização.
  10. Na guia Imagens do SO, escolha uma imagem.
  11. Clique em Selecionar para confirmar as opções do disco de inicialização.
  12. Defina quaisquer outras configurações de instância necessárias. Por exemplo, altere as configurações de Preempção para definir a instância como preemptiva. Isso reduz o custo da instância e das GPUs anexadas. Leia GPUs em instâncias preemptivas para saber mais.
  13. Na parte inferior da página, clique em Criar para criar a instância.

gcloud

Use o comando regions describe para garantir que você tenha uma cota de GPU suficiente na região em que quer criar instâncias com GPUs. Substitua region pela região que você quer verificar a cota de GPU.

gcloud compute regions describe region

Para criar e iniciar uma instância, use o comando gcloud compute instances create com as sinalizações a seguir:

gcloud compute instances create instance-name \
    --machine-type machine-type --zone zone \
    --accelerator type=accelerator-type,count=accelerator-count \
    --image-family image-family --image-project image-project \
    --maintenance-policy TERMINATE --restart-on-failure \
    [--preemptible]

Substitua:

  • instance-name: o nome da nova instância.
  • machine-type: o tipo de máquina que você selecionou para a instância. Consulte GPUs no Compute Engine para ver quais tipos de máquinas estão disponíveis com base na quantidade de GPUs que você quer;
  • zone: a zona para a instância.
  • image-family: uma família de imagens compatível com GPUs.
  • image-project: o projeto de imagem ao qual a família de imagens pertence.
  • accelerator-count: o número de GPUs que você quer adicionar à instância. Consulte GPUs no Compute Engine para ver uma lista de limites de GPUs com base no tipo de máquina da instância;
  • accelerator-type: o modelo de GPU que você quer usar. Use um dos seguintes valores:

    • NVIDIA® Tesla® T4: nvidia-tesla-t4
    • NVIDIA® Tesla® T4 Virtual Workstation com NVIDIA® GRID®: nvidia-tesla-t4-vws
    • NVIDIA® Tesla® P4: nvidia-tesla-p4
    • NVIDIA® Tesla® P4 Virtual Workstation com NVIDIA® GRID®: nvidia-tesla-p4-vws
    • NVIDIA® Tesla® P100: nvidia-tesla-p100
    • NVIDIA® Tesla® P100 Virtual Workstation com NVIDIA® GRID®: nvidia-tesla-p100-vws
    • NVIDIA® Tesla® V100: nvidia-tesla-v100
    • NVIDIA® Tesla® K80: nvidia-tesla-k80

    Consulte GPUs no Compute Engine para ver uma lista de modelos da GPU disponíveis.

  • --preemptible é uma sinalização opcional que configura a instância como preemptiva. Isso reduz o custo da instância e das GPUs anexadas. Leia GPUs em instâncias preemptivas para saber mais.

Por exemplo, é possível usar o comando gcloud a seguir para iniciar uma instância de Ubuntu 16.04 com uma GPU NVIDIA Tesla K80 e duas vCPUs na zona us-east1-d.

gcloud compute instances create gpu-instance-1 \
    --machine-type n1-standard-2 --zone us-east1-d \
    --accelerator type=nvidia-tesla-k80,count=1 \
    --image-family ubuntu-1604-lts --image-project ubuntu-os-cloud \
    --maintenance-policy TERMINATE --restart-on-failure

Este exemplo de comando inicia a instância, mas o CUDA e o driver precisam já estar instalados na instância.

API

Identifique o tipo de GPU que você quer adicionar à instância. Envie uma solicitação GET para listar os tipos de GPU disponíveis para o projeto em uma zona específica.

GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/acceleratorTypes

Substitua:

  • project-id: o ID do projeto.
  • zone: a zona a partir da qual você quer listar os tipos de GPU disponíveis.

Na API, crie uma solicitação POST para criar uma nova instância. Inclua o parâmetro acceleratorType para especificar o tipo de GPU que quer usar e inclua o parâmetro acceleratorCount para especificar quantas GPUs você quer adicionar. Também defina o parâmetro onHostMaintenance como TERMINATE.

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances?key={YOUR_API_KEY}
{
  "machineType": "https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/machineTypes/machine-type",
  "disks":
  [
    {
      "type": "PERSISTENT",
      "initializeParams":
      {
        "diskSizeGb": "disk-size",
        "sourceImage": "https://compute.googleapis.com/compute/v1/projects/image-project/global/images/family/image-family"
      },
      "boot": true
    }
  ],
  "name": "instance-name",
  "networkInterfaces":
  [
    {
      "network": "https://compute.googleapis.com/compute/v1/projects/project-id/global/networks/network"
    }
  ],
  "guestAccelerators":
  [
    {
      "acceleratorCount": accelerator-count,
      "acceleratorType": "https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/acceleratorTypes/accelerator-type"
    }
  ],
  "scheduling":
  {
    "onHostMaintenance": "terminate",
    "automaticRestart": true,
    ["preemptible": true]
  },
}

Substitua:

  • instance-name: o nome da instância.
  • project-id: o código do projeto.
  • zone: a zona para a instância.
  • machine-type: o tipo de máquina que você selecionou para a instância. Consulte GPUs no Compute Engine para ver quais tipos de máquinas estão disponíveis com base na quantidade de GPUs que você quer;
  • image-family: uma imagem de disco de inicialização para sua instância. Selecione uma família de imagens na lista de imagens públicas disponíveis.
  • image-project: o projeto de imagem ao qual a família de imagens pertence.
  • disk-size: o tamanho do disco de inicialização em GB.
  • network: a rede VPC que você quer usar para a instância. Você pode especificar default para usar sua rede padrão.
  • accelerator-count: o número de GPUs que você quer adicionar à instância. Consulte GPUs no Compute Engine para ver uma lista de limites de GPUs com base no tipo de máquina da instância;
  • accelerator-type: o modelo de GPU que você quer usar. Consulte GPUs no Compute Engine para ver uma lista de modelos da GPU disponíveis.
  • "preemptible": true é um parâmetro opcional que configura a instância como preemptiva. Isso reduz o custo da instância e das GPUs anexadas. Para saber mais, consulte GPUs em instâncias preemptivas.

Instale o driver da GPU na instância para que o sistema possa usar o dispositivo.

Como adicionar ou remover GPUs de instâncias existentes

É possível adicionar ou remover GPUs de instâncias existentes. Mas antes, pare a instância e altere a configuração de manutenção do host para que ela seja encerrada em vez de fazer a migração em tempo real. Não é possível migrar em tempo real as instâncias com GPUs porque elas estão atribuídas a dispositivos de hardware específicos. Consulte detalhes em Restrições da GPU.

É necessário instalar drivers de GPU nessa instância depois de adicionar uma GPU. A imagem do disco de inicialização usada para criar a instância determina os drivers necessários. Identifique os drivers apropriados para o sistema operacional nas imagens do disco de inicialização persistentes da instância. Para saber mais, consulte Como instalar drivers de GPU.

É possível adicionar ou remover GPUs de uma instância usando o Console do Google Cloud ou a API.

Console

Para adicionar ou remover GPUs da instância, basta interrompê-la e editar a configuração dela.

  1. Verifique se todos os aplicativos críticos estão parados na instância. É necessário interromper a instância para adicionar uma GPU.

  2. Acesse a página "Instâncias de VMs" para ver a lista de instâncias.

    Acessar a página "Instâncias de VMs"

  3. Na lista de instâncias, clique no nome da instância à qual quer adicionar GPUs. A página de detalhes da instância será aberta.

  4. Para interromper a instância, clique em Parar na parte superior da página de detalhes da instância.

  5. Com a execução da instância interrompida, clique em Editar para alterar as propriedades da instância.

  6. Se a instância tiver um tipo de máquina com núcleo compartilhado, altere o tipo de máquina para ter uma ou mais vCPUs. Não é possível adicionar aceleradores a instâncias que tenham tipos de máquina com núcleo compartilhado.

  7. Na seção Configuração da máquina, clique em Plataforma de CPU e GPU para ver as opções avançadas de tipo de máquina e as GPUs disponíveis.

  8. Clique em GPUs para ver a lista de GPUs disponíveis.

  9. Selecione o número de GPUs e o modelo que você quer adicionar à instância. Se preferir, defina o número de GPUs como Nenhum para remover GPUs atuais da instância.

  10. Se você adicionar GPUs a uma instância, defina a configuração de manutenção do host como Encerrar. Se remover GPUs da instância, será possível retornar a definição da configuração de manutenção do host para Migrar instância da VM.

  11. Na parte inferior da página de detalhes da instância, clique em Salvar para aplicar as alterações.

  12. Quando as configurações da instância estiverem salvas, clique em Iniciar na parte superior da página de detalhes da instância para iniciá-la novamente.

API

Para adicionar ou remover GPUs da instância, basta interrompê-la e alterar a configuração dela por meio da API.

  1. Verifique se todos os aplicativos importantes estão parados na instância. Depois, crie um comando POST para interrompê-la. Assim, ela pode ser movida para um sistema host em que as GPUs estejam disponíveis.

    POST https://compute.googleapis.com/compute/v1/projects/compute/zones/zone/instances/instance-name/stop
    

    Substitua:

    • instance-name: o nome da instância a ser interrompida. Esta é a instância que você quer anexar às GPUs.
    • zone: a zona para onde a instância está localizada.
  2. Identifique o tipo de GPU que você quer adicionar à instância. Envie uma solicitação GET para listar os tipos de GPU disponíveis para o projeto em uma zona específica.

    GET https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/acceleratorTypes
    

    Substitua:

    • project-id: o código do projeto.
    • zone: a zona em que você quer listar os tipos de GPU disponíveis.
  3. Se a instância tiver um tipo de máquina com núcleo compartilhado, altere o tipo de máquina para ter uma ou mais vCPUs. Não é possível adicionar aceleradores a instâncias com tipos de máquinas com núcleo compartilhado.

  4. Após a parada da instância, crie uma solicitação POST para adicionar ou remover uma ou mais GPUs da instância.

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-name/setMachineResources
    
        {
         "guestAccelerators": [
          {
            "acceleratorCount": accelerator-count,
            "acceleratorType": "https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/acceleratorTypes/accelerator-type"
          }
         ]
        }
    

    Substitua:

    • instance-name: o nome da instância.
    • project-id: o código do projeto.
    • zone: a zona para a instância.
    • accelerator-count: o número de GPUs que você quer anexar à instância. Para obter uma lista de limites da GPU com base no tipo de máquina da instância, consulte GPUs no Compute Engine.
    • accelerator-type: o modelo de GPU que você quer usar. Para obter uma lista dos modelos de GPU disponíveis, consulte GPUs no Compute Engine.
  5. Crie um comando POST para definir as opções de programação da instância. Para adicionar GPUs a uma instância, é necessário especificar "onHostMaintenance": "TERMINATE". Opcionalmente, para remover GPUs de uma instância, especifique "onHostMaintenance": "MIGRATE".

    POST https://compute.googleapis.com/compute/v1/projects/compute/zones/zone/instances/instance-name/setScheduling
    
    {
    "onHostMaintenance": "maintenance-type",
    "automaticRestart": true
    }
    

    Substitua:

    • instance-name: o nome da instância em que você quer adicionar GPUs.
    • zone: a zona em que a instância está localizada.
    • maintenance-type" A ação que você quer que sua instância execute quando a manutenção do host for necessária. Especifique TERMINATE se estiver adicionando GPUs à instância. Como alternativa, especifique "onHostMaintenance": "MIGRATE" se tiver removido todas as GPUs da instância e quiser que a instância retome a migração de eventos de manutenção do host.
  6. Inicie a instância.

    POST https://compute.googleapis.com/compute/v1/projects/compute/zones/zone/instances/instance-name/start
    

    Substitua:

    • instance-name: o nome da instância em que você quer adicionar GPUs.
    • zone: a zona em que a instância está localizada.

Em seguida, instale o driver da GPU na instância para que o sistema possa usar o dispositivo.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine