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

Criar uma instância com uma GPU

Durante a criação de uma instância com uma ou mais GPUs, é necessário configurá-la para que seja interrompida na manutenção do host. Instâncias com GPUs não podem migrar em tempo real porque 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 Compute Engine.

Console

  1. Acesse a página Instâncias da VM.

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

  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 públicas, escolha um sistema operacional e uma versão.
  11. Clique em Salvar 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://www.googleapis.com/compute/v1/projects/project-id/zones/zone/machineTypes/machine-type",
  "disks":
  [
    {
      "type": "PERSISTENT",
      "initializeParams":
      {
        "diskSizeGb": "disk-size",
        "sourceImage": "https://www.googleapis.com/compute/v1/projects/image-project/global/images/family/image-family"
      },
      "boot": true
    }
  ],
  "name": "instance-name",
  "networkInterfaces":
  [
    {
      "network": "https://www.googleapis.com/compute/v1/projects/project-id/global/networks/network"
    }
  ],
  "guestAccelerators":
  [
    {
      "acceleratorCount": accelerator-count,
      "acceleratorType": "https://www.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 ID 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 interrompida em vez de fazer a migração em tempo real. Instâncias com GPUs não podem migrar em tempo real porque 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

É possível adicionar ou remover GPUs da instância ao interromper e editar a configuração dela.

  1. Verifique se todos os aplicativos críticos estão parados na instância.

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

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

  3. Clique no nome da instância em que você quer adicionar GPUs. A página Detalhes da instância de VM será aberta.

  4. Conclua as etapas a seguir na página Detalhes da instância de VM.

    1. Na parte superior da página, clique em Parar para interromper a instância.

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

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

    5. Clique em Adicionar GPU. Se você já tiver GPUs, elas serão exibidas no lugar da seção Adicionar GPU.

    6. Clique em Tipo de GPU para ver a lista de GPUs disponíveis.

    7. Selecione o número de GPUs e o modelo que você quer adicionar à instância. Se preferir, remova uma GPU clicando no X ao lado dela.

    8. Veja a seção Na manutenção do host.

      • Se você adicionar GPUs a uma instância, a configuração de manutenção do host será definida automaticamente como Encerrar instância de VM. Consulte Como lidar com eventos de manutenção do host da GPU.
      • Se você remover GPUs da instância, poderá retornar a definição da configuração de manutenção do host para Migrar instância da VM.
    9. Na parte inferior da página, clique em Salvar para aplicar as alterações.

    10. Depois de salvar as configurações da instância, clique em Iniciar na parte superior da página para iniciar a instância 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 ID 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://www.googleapis.com/compute/v1/projects/project-id/zones/zone/acceleratorTypes/accelerator-type"
          }
         ]
        }
    

    Substitua:

    • instance-name: o nome da instância;
    • project-id: o ID 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: 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