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
- Para usar os exemplos de linha de comando deste guia, siga estas etapas:
- Instale ou atualize a ferramenta de linha de comando gcloud para a versão mais recente.
- Defina uma região e uma zona padrão.
- Para usar os exemplos de API deste guia, configure o acesso à API.
- Leia sobre preços de GPU no Compute Engine para entender o custo do uso de GPUs nas instâncias.
- Leia sobre as restrições para instâncias com GPUs para conhecer as diferenças entre essas e outras instâncias.
- Saiba como as instâncias funcionam quando você as programa para que sejam interrompidas em eventos de manutenção do host. Se você adicionar GPUs às instâncias, precisará defini-las para que sejam interrompidas durante a manutenção do host.
- Na página de cotas, confira se há GPUs disponíveis no projeto. Se você precisar de uma cota extra de GPU, solicite um aumento de cota.
- Escolha uma imagem do sistema operacional:
- 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.
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
- Acesse a página Instâncias da VM.
- Clique em Criar instância.
- Selecione uma zona em que as GPUs estejam disponíveis. Consulte a lista de zonas disponíveis com GPUs.
- 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.
- 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.
- Clique em GPUs para ver a lista de GPUs disponíveis.
- Especifique o tipo e o número de GPUs necessárias.
- 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.
- Para configurar o disco de inicialização, clique em Alterar na seção Disco de inicialização.
- Na guia Imagens públicas, escolha um sistema operacional e uma versão.
- Clique em Salvar para confirmar as opções do disco de inicialização.
- 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.
- 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.
- NVIDIA® Tesla® T4:
--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 projetozone
: 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 especificardefault
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.
Verifique se todos os aplicativos críticos estão parados na instância.
Acesse a página Instâncias de VMs para ver a lista de instâncias.
Clique no nome da instância em que você quer adicionar GPUs. A página Detalhes da instância de VM será aberta.
Conclua as etapas a seguir na página Detalhes da instância de VM.
Na parte superior da página, clique em Parar para interromper a instância.
Com a execução da instância interrompida, clique em Editar para alterar as propriedades da instância.
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.
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.
Clique em Adicionar GPU. Se você já tiver GPUs, elas serão exibidas no lugar da seção Adicionar GPU.
Clique em Tipo de GPU para ver a lista de GPUs disponíveis.
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.
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.
Na parte inferior da página, clique em Salvar para aplicar as alterações.
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.
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:
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 projetozone
: a zona em que você quer listar os tipos de GPU disponíveis.
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.
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 projetozone
: 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.
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. EspecifiqueTERMINATE
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.
Inicie a instância.
POST https://compute.googleapis.com/compute/v1/projects/compute/zones/zone/instances/instance-name/start
Substitua:
Em seguida, instale o driver da GPU na instância para que o sistema possa usar o dispositivo.
A seguir
- Saiba mais sobre GPUs no Compute Engine.
- Adicione SSDs locais a instâncias. Dispositivos SSD locais funcionam bem com GPUs quando os aplicativos exigem armazenamento de alto desempenho.
- Crie grupos de instâncias de GPU usando modelos de instância.
- Consulte Como monitorar o desempenho da GPU para mais informações sobre esse assunto.
- Para otimizar o desempenho da GPU, consulte Como otimizar o desempenho da GPU.
- Para lidar com a manutenção do host da GPU, consulte "Como manipular eventos de manutenção do host da GPU".
- Veja o tutorial Como executar cargas de trabalho de inferência do TensorFlow em escala com a TensorRT5 e a GPU NVIDIA T4.