Criar uma instância de VM confidencial com GPU

Para usar GPUs com VMs confidenciais, crie uma instância de VM confidencial usando o modelo de provisionamento spot ou flexível com base no tipo de máquina a3-highgpu-1g e use o Intel TDX. Depois de criar a instância de VM, ative o modo de computação confidencial na GPU anexada.

Requisito de cota de GPU

Antes de criar uma instância de VM confidencial com GPU, verifique se você tem cota de GPU suficiente alocada para seu projeto do Google Cloud. Você precisa de cota suficiente nos seguintes tipos para criar uma instância de VM confidencial com GPU:

  • Cota preemptiva para os modelos de GPU que você quer criar em cada região.

  • Cota global para o número total de GPUs de todos os tipos em todas as regiões.

Para solicitar um aumento dessas cotas de GPU, consulte Solicitar cota preemptiva e Solicitar cota global.

Solicitar cota preemptiva

Para solicitar um aumento na cota de GPUs NVIDIA H100 preemptivas regionais, faça o seguinte:

  1. No Google Cloud console, acesse a página Cotas.

    Acessar "Cotas"

  2. Na caixa Filtro, digite PREEMPTIBLE_NVIDIA_H100_GPUS e pressione a tecla Enter ou Return.

  3. Na coluna Dimensões da tabela, encontre a linha com a região cuja cota você quer aumentar.

  4. Nessa linha, clique em Mais ações e em Editar cota.

  5. No painel Mudanças de cota, insira o número de GPUs que você quer na caixa Novo valor.

  6. Clique em Enviar solicitação.

Solicitar cota global

Para solicitar um aumento de cota global, faça o seguinte:

  1. No Google Cloud console, acesse a página Cotas.

    Acessar "Cotas"

  2. Na caixa Filtro, digite GPUS_ALL_REGIONS e pressione a tecla Enter ou Return.

  3. Na linha resultante, clique em Mais ações e em Editar cota.

  4. No painel Mudanças de cota, insira o número de GPUs que você quer na caixa Novo valor.

  5. Clique em Enviar solicitação.

O que acontece depois de um pedido de cota

Se a solicitação de cota for aprovada, você vai receber um e-mail de aprovação. Aguarde 15 minutos após receber o e-mail e atualize a página Cotas para verificar a cota atualizada. Se a cota ainda não tiver sido atualizada após 15 minutos, entre em contato com o Cloud Customer Care.

Se o pedido de cota for negado, você poderá receber um e-mail explicando as próximas etapas. Para solicitar mais cota, siga as instruções no e-mail.

Criar uma instância de VM confidencial com GPU

Para criar uma instância de VM usando o modelo spot ou de início flexível, faça o seguinte:

Modelo de spot

gcloud

Para criar uma instância de VM Spot otimizada para aceleradores com a CLI gcloud, use o subcomando instances create com a flag --provisioning-model.

  gcloud compute instances create INSTANCE_NAME \       --provisioning-model=SPOT \       --confidential-compute-type=TDX \       --machine-type=a3-highgpu-1g \       --maintenance-policy=TERMINATE \       --zone=ZONE_NAME \       --image-project=IMAGE_PROJECT \       --image-family=IMAGE_FAMILY_NAME \       --boot-disk-size=30G 

Forneça os valores a seguir:

  • INSTANCE_NAME: o nome da nova instância de VM.

  • IMAGE_PROJECT: o projeto que contém a imagem do sistema operacional compatível. Recomendamos usar o projeto de imagem ubuntu-os-cloud para imagens do Ubuntu. Você também pode usar o projeto de imagem confidential-vm-images para imagens do Container-Optimized OS.

  • IMAGE_FAMILY_NAME: a família da imagem do sistema operacional compatível com VMs confidenciais. Ao usar o projeto de imagem ubuntu-os-cloud, recomendamos usar a família de imagens ubuntu-2204-lts. Para imagens do Container-Optimized OS do projeto confidential-vm-images, use a família de imagens cos-tdx-113-lts.

  • ZONE_NAME: a zona compatível em que a VM será criada.

REST

Para criar uma instância VM spot, envie a seguinte solicitação POST com o conteúdo do corpo apropriado.

O método HTTP e o URL:

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

Solicitar corpo JSON:

  {     "name": "INSTANCE_NAME",     "confidentialInstanceConfig": {       "confidentialInstanceType": "TDX"     },     "machineType": "zones/ZONE_NAME/machineTypes/a3-highgpu-1g",     "scheduling": {       "onHostMaintenance": "TERMINATE",       "provisioningModel": "SPOT"     },     "disks": [       {         "autoDelete": true,         "boot": true,         "index": 0,         "initializeParams": {           "diskSizeGb": "30",           "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY_NAME"         },         "kind": "compute#attachedDisk",         "mode": "READ_WRITE",         "type": "PERSISTENT"       }     ],     "networkInterfaces": [       {         "accessConfigs": [           {             "name": "external-nat",             "type": "ONE_TO_ONE_NAT",             "kind": "compute#accessConfig",             "networkTier": "PREMIUM"           }         ],         "kind": "compute#networkInterface",         "name": "nic0",         "network": "projects/PROJECT_ID/global/networks/default"       }     ]   } 

Forneça os valores a seguir:

  • INSTANCE_NAME: o nome do novo modelo de instância de VM.

  • IMAGE_PROJECT: o projeto que contém a imagem do sistema operacional compatível. Recomendamos usar o projeto de imagem ubuntu-os-cloud para imagens do Ubuntu. Você também pode usar o projeto de imagem confidential-vm-images para imagens do Container-Optimized OS.

  • IMAGE_FAMILY_NAME: a família da imagem do sistema operacional compatível com VMs confidenciais. Ao usar o projeto de imagem ubuntu-os-cloud, recomendamos usar a família de imagens ubuntu-2204-lts. Para imagens do Container-Optimized OS do projeto confidential-vm-images, use a família de imagens cos-tdx-113-lts.

  • PROJECT_ID: opcional. O ID do projeto em que a VM será criada.

  • ZONE_NAME: a zona compatível em que a VM será criada.

Modelo de início flexível

Para usar o modelo de início flexível, primeiro crie um modelo de instância e depois um grupo gerenciado de instâncias (MIG) usando esse modelo. Em seguida, adicione instâncias de VM de GPU ao MIG usando solicitações de redimensionamento.

O uso de uma solicitação de redimensionamento do MIG com o modelo de provisionamento de início flexível melhora a capacidade de acesso de instâncias de VM de GPU. Para mais informações, consulte Sobre solicitações de redimensionamento em um MIG.

Antes de começar

Consulte os pré-requisitos para criar um MIG e as limitações para criar uma solicitação de redimensionamento em um MIG.

Criar um MIG com instâncias de VM de GPU

Para criar um modelo de instância e usá-lo para criar um MIG, siga estas etapas.

  1. Criar um modelo de instância.

    gcloud

    gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \     --provisioning-model=FLEX_START \     --confidential-compute-type=TDX \     --machine-type=a3-highgpu-1g \     --maintenance-policy=TERMINATE \     --image-project=IMAGE_PROJECT \     --image-family=IMAGE_FAMILY_NAME \     --reservation-affinity=none \     --boot-disk-size=30G \     --instance-termination-action=DELETE \     --max-run-duration=RUN_DURATION \     --project=PROJECT_ID 

    Para ativar a Inicialização segura, use a flag --shielded-secure-boot para inicializações de instâncias de VM.

    Forneça os valores a seguir:

    • INSTANCE_TEMPLATE_NAME: o nome do novo modelo de instância de VM.

    • IMAGE_PROJECT: o projeto que contém a imagem do sistema operacional compatível. Recomendamos usar o projeto de imagem ubuntu-os-cloud para imagens do Ubuntu. Você também pode usar o projeto de imagem confidential-vm-images para imagens do Container-Optimized OS.

    • IMAGE_FAMILY_NAME: a família da imagem do sistema operacional compatível com VMs confidenciais. Ao usar o projeto de imagem ubuntu-os-cloud, recomendamos usar a família de imagens ubuntu-2204-lts. Para imagens do Container-Optimized OS do projeto confidential-vm-images, use a família de imagens cos-tdx-113-lts.

    • RUN_DURATION: a duração da execução das instâncias de VM solicitadas. Formate o valor como o número de dias, horas, minutos ou segundos, seguido por d, h, m e s, respectivamente. Por exemplo, especifique 30m para 30 minutos ou 1d2h3m4s para um dia, duas horas, três minutos e quatro segundos. O valor precisa estar entre 10 minutos e sete dias.

    • PROJECT_ID: opcional. O ID do projeto em que a VM será criada.

    REST

    Para criar um modelo de instância de VM confidencial, envie a seguinte solicitação POST com o conteúdo do corpo apropriado.

    O método HTTP e o URL:

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/ZONE_NAME/instanceTemplates 

    Solicitar corpo JSON:

    {   "name": "INSTANCE_TEMPLATE_NAME",   "properties": {     "confidentialInstanceConfig": {       "confidentialInstanceType": "TDX"     },     "machineType": "a3-highgpu-1g",     "scheduling": {       "instanceTerminationAction": "DELETE",       "maxRunDuration": {         "seconds": RUN_DURATION       },       "automaticRestart": true,       "onHostMaintenance": "TERMINATE",       "provisioningModel": "FLEX_START",       "preemptible": false     },     "disks": [       {         "autoDelete": true,         "index": 0,         "boot": true,         "kind": "compute#attachedDisk",         "mode": "READ_WRITE",         "initializeParams": {           "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY_NAME",           "diskSizeGb": "30"         },         "type": "PERSISTENT"       }     ],     "networkInterfaces": [       {         "accessConfigs": [           {             "kind": "compute#accessConfig",             "name": "external-nat",             "networkTier": "PREMIUM",             "type": "ONE_TO_ONE_NAT"           }         ],         "kind": "compute#networkInterface",         "name": "nic0",         "network": "projects/PROJECT_ID/global/networks/default"       }     ],     "reservationAffinity": {       "consumeReservationType": "NO_RESERVATION"     },     "canIpForward": false   } } 

    Para ativar a Inicialização segura, inclua o objeto a seguir para inicializações de instâncias de VM.

    "shieldedInstanceConfig": {   "enableIntegrityMonitoring": true,   "enableSecureBoot": true,   "enableVtpm": true } 

    Forneça os valores a seguir:

    • PROJECT_ID: opcional. O ID do projeto em que a VM será criada.

    • ZONE_NAME: a zona compatível em que o MIG será criado.

    • INSTANCE_TEMPLATE_NAME: o nome do novo modelo de instância de VM.

    • IMAGE_PROJECT: o projeto que contém a imagem do sistema operacional compatível. Recomendamos usar o projeto de imagem ubuntu-os-cloud para imagens do Ubuntu. Você também pode usar o projeto de imagem confidential-vm-images para imagens do Container-Optimized OS.

    • IMAGE_FAMILY_NAME: a família da imagem do sistema operacional compatível com VMs confidenciais. Ao usar o projeto de imagem ubuntu-os-cloud, recomendamos usar a família de imagens ubuntu-2204-lts. Para imagens do Container-Optimized OS do projeto confidential-vm-images, use a família de imagens cos-tdx-113-lts.

    • RUN_DURATION: a duração, em segundos, da execução das instâncias de VM solicitadas. O valor precisa estar entre 600 e 604800 segundos, o que corresponde a um intervalo entre 10 minutos e sete dias.

  2. Crie um MIG e uma solicitação de redimensionamento para adicionar instâncias de VM de GPU de uma só vez.

  3. Liste as instâncias presentes no MIG.

    gcloud

    gcloud compute instance-groups managed list-instances INSTANCE_GROUP_NAME \     --zone=ZONE_NAME \     --project=PROJECT_ID 

    Forneça os valores a seguir:

    • INSTANCE_GROUP_NAME: o nome do MIG;

    • ZONE_NAME: a zona compatível para receber uma lista de instâncias de VM.

    • PROJECT_ID: opcional. O ID do projeto para receber uma lista de instâncias de VM.

    REST

    Para listar todas as instâncias, envie a seguinte solicitação GET.

    O método HTTP e o URL:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates 

    Para restringir a lista de instâncias a uma zona específica, envie a seguinte solicitação GET.

    O método HTTP e o URL:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/ZONE_NAME/instanceTemplates 

    Forneça os valores a seguir:

    • ZONE_NAME: a zona compatível para receber uma lista de instâncias de VM.

    • PROJECT_ID: o ID do projeto para receber uma lista de instâncias de VM.

Ativar o modo de computação confidencial na GPU

  1. Conecte-se a uma instância de VM no MIG usando o comando gcloud compute ssh.

    gcloud compute ssh 
  2. Atualize a lista de pacotes e instale as ferramentas e bibliotecas necessárias.

    sudo apt-get update --yes sudo apt-get install linux-headers-$(uname -r) sudo apt install -y build-essential libxml2 libncurses5-dev pkg-config libvulkan1 gcc-12 
  3. Instale os drivers de GPU adequados na instância de VM. Para instâncias de VM com a inicialização segura ativada, consulte Instalar drivers de GPU (VMs com inicialização segura). Recomendamos usar a versão nvidia-driver-575-open do driver.

  4. Para configurar uma comunicação segura entre a GPU e o driver dela, ative a API Linux Kernel Crypto (LKCA).

    echo "install nvidia /sbin/modprobe ecdsa_generic; /sbin/modprobe ecdh; /sbin/modprobe --ignore-install nvidia" | sudo tee /etc/modprobe.d/nvidia-lkca.conf sudo update-initramfs -u 
  5. Ative o modo de persistência para estabelecer uma conexão segura de protocolo de segurança e modelo de dados (SPDM) entre a GPU e o driver de GPU.

    sudo test -f /usr/lib/systemd/system/nvidia-persistenced.service && sudo sed -i "s/no-persistence-mode/uvm-persistence-mode/g" /usr/lib/systemd/system/nvidia-persistenced.service sudo systemctl daemon-reload 
  6. Reinicie a instância de VM para aplicar as configurações do LKCA e do modo de persistência.

    sudo reboot 
  7. (Opcional) Instale os seguintes exemplos do CUDA.

    wget -O cuda-samples.tar.gz https://github.com/NVIDIA/cuda-samples/archive/refs/tags/v12.5.tar.gz tar xzvf cuda-samples.tar.gz 

A seguir