Crie uma instância de VM confidencial com GPU

Para usar GPUs com a VM confidencial, tem de criar uma instância de VM confidencial com o modelo de aprovisionamento spot ou flex-start com base no tipo de máquina a3-highgpu-1g e usar o Intel TDX. Depois de criar a instância de VM, ative o modo de computação confidencial na GPU anexada.

Requisito de quota de GPU

Antes de criar uma instância de VM confidencial com GPU, certifique-se de que tem quota de GPU suficiente alocada ao seu Google Cloudprojeto. Precisa de quota suficiente nos seguintes tipos de quotas para criar com êxito uma instância de VM confidencial com GPU:

  • Quota preemptível para os modelos de GPU que quer criar em cada região.

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

Para pedir um aumento destas quotas de GPU, consulte os artigos Peça uma quota preemptível e Peça uma quota global.

Peça uma quota preemptível

Para pedir um aumento da quota de GPUs NVIDIA H100 regionais preemptíveis, faça o seguinte:

  1. Na Google Cloud consola, aceda à página Quotas.

    Aceder a Quotas

  2. Na caixa Filtrar, introduza PREEMPTIBLE_NVIDIA_H100_GPUS e, de seguida, prima a tecla Enter ou Return.

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

  4. Nessa linha, clique em Mais ações e, de seguida, clique em Editar quota.

  5. No painel Alterações de quota, introduza o número de GPUs que quer na caixa Novo valor.

  6. Clique em Enviar pedido.

Peça uma quota global

Para pedir um aumento da quota global, faça o seguinte:

  1. Na Google Cloud consola, aceda à página Quotas.

    Aceder a Quotas

  2. Na caixa Filtrar, introduza GPUS_ALL_REGIONS e, de seguida, prima a tecla Enter ou Return.

  3. Na linha resultante, clique em Mais ações e, de seguida, clique em Editar quota.

  4. No painel Alterações de quota, introduza o número de GPUs que quer na caixa Novo valor.

  5. Clique em Enviar pedido.

O que acontece após um pedido de quota

Se o seu pedido de quota for bem-sucedido, recebe um email de aprovação. Aguarde 15 minutos após receber o email e, em seguida, atualize a página Quotas para verificar a quota atualizada. Se a quota ainda não tiver sido atualizada após 15 minutos, contacte o apoio ao cliente do Google Cloud.

Se o seu pedido de quota for recusado, pode receber um email a explicar os passos seguintes que pode dar. Para voltar a candidatar-se a mais quota, siga as instruções no email.

Crie uma instância de VM confidencial com GPU

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

Modelo de espaço

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

Indique os seguintes valores:

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

  • IMAGE_PROJECT: O projeto que contém a imagem do sistema operativo suportado. Recomendamos que use o ubuntu-os-cloudimage project para imagens do Ubuntu. Opcionalmente, pode usar o projeto de imagem confidential-vm-images para imagens do SO otimizado para contentores.

  • IMAGE_FAMILY_NAME: a família para a imagem do sistema operativo suportada pela VM confidencial. Quando usar o projeto de imagem ubuntu-os-cloud, recomendamos que use a família de imagens ubuntu-2204-lts. Para imagens do SO otimizado para contentores do projeto confidential-vm-images, use a família de imagens cos-tdx-113-lts.

  • ZONE_NAME: A zona suportada para criar a VM.

REST

Para criar uma instância de VM de Spot, envie o seguinte pedido POST com o conteúdo do corpo adequado.

O método HTTP e o URL:

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

Corpo JSON do pedido:

  {
    "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"
      }
    ]
  }

Indique os seguintes valores:

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

  • IMAGE_PROJECT: O projeto que contém a imagem do sistema operativo suportado. Recomendamos que use o ubuntu-os-cloudimage project para imagens do Ubuntu. Opcionalmente, pode usar o projeto de imagem confidential-vm-images para imagens do SO otimizado para contentores.

  • IMAGE_FAMILY_NAME: a família para a imagem do sistema operativo suportada pela VM confidencial. Quando usar o projeto de imagem ubuntu-os-cloud, recomendamos que use a família de imagens ubuntu-2204-lts. Para imagens do SO otimizado para contentores do projeto confidential-vm-images, use a família de imagens cos-tdx-113-lts.

  • PROJECT_ID: opcional. O ID do projeto no qual criar a VM.

  • ZONE_NAME: A zona suportada para criar a VM.

Modelo de início flexível

Para usar o modelo de início flexível, primeiro, cria um modelo de instância e, de seguida, cria um grupo de instâncias gerido (MIG) com esse modelo. Em seguida, pode adicionar instâncias de VM com GPU ao MIG através de pedidos de redimensionamento.

A utilização de um pedido de redimensionamento de MIG com o modelo de aprovisionamento de início flexível melhora a obtenção de instâncias de VM de GPU. Para mais informações, consulte o artigo Acerca dos pedidos de redimensionamento num MIG.

Antes de começar

Veja os pré-requisitos para criar um MIG e as limitações para criar um pedido de redimensionamento num MIG.

Crie um MIG com instâncias de VM de GPU

Para criar um modelo de instância e, em seguida, usar o modelo para criar um MIG, conclua os seguintes passos.

  1. Crie 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 o Arranque seguro, pode usar opcionalmente a flag --shielded-secure-boot para arranques de instâncias de VM.

    Indique os seguintes valores:

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

    • IMAGE_PROJECT: O projeto que contém a imagem do sistema operativo suportado. Recomendamos que use o ubuntu-os-cloudimage project para imagens do Ubuntu. Opcionalmente, pode usar o projeto de imagem confidential-vm-images para imagens do SO otimizado para contentores.

    • IMAGE_FAMILY_NAME: a família para a imagem do sistema operativo suportada pela VM confidencial. Quando usar o projeto de imagem ubuntu-os-cloud, recomendamos que use a família de imagens ubuntu-2204-lts. Para imagens do SO otimizado para contentores do projeto confidential-vm-images, use a família de imagens cos-tdx-113-lts.

    • RUN_DURATION: A duração durante a qual quer que as instâncias de VM pedidas sejam executadas. Tem de formatar o valor como o número de dias, horas, minutos ou segundos, seguido de d, h, m e s, respetivamente. Por exemplo, especifique 30m para 30 minutos ou 1d2h3m4s para um dia, duas horas, três minutos e quatro segundos. O valor tem de estar compreendido entre 10 minutos e sete dias.

    • PROJECT_ID: opcional. O ID do projeto no qual criar a VM.

    REST

    Para criar um modelo de instância de VM confidencial, envie o seguinte pedido POST com o conteúdo do corpo adequado.

    O método HTTP e o URL:

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

    Corpo JSON do pedido:

    {
      "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 o arranque seguro, pode incluir opcionalmente o seguinte objeto para arrancar instâncias de VM.

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

    Indique os seguintes valores:

    • PROJECT_ID: opcional. O ID do projeto no qual criar a VM.

    • ZONE_NAME: A zona suportada para criar o MIG.

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

    • IMAGE_PROJECT: O projeto que contém a imagem do sistema operativo suportado. Recomendamos que use o ubuntu-os-cloudimage project para imagens do Ubuntu. Opcionalmente, pode usar o projeto de imagem confidential-vm-images para imagens do SO otimizado para contentores.

    • IMAGE_FAMILY_NAME: a família para a imagem do sistema operativo suportada pela VM confidencial. Quando usar o projeto de imagem ubuntu-os-cloud, recomendamos que use a família de imagens ubuntu-2204-lts. Para imagens do SO otimizado para contentores do projeto confidential-vm-images, use a família de imagens cos-tdx-113-lts.

    • RUN_DURATION: a duração, em segundos, durante a qual quer que as instâncias de VM pedidas sejam executadas. O valor tem de estar entre 600 e 604800 segundos, o que corresponde a um intervalo entre 10 minutos e sete dias.

  2. Crie um MIG e um pedido 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
    

    Indique os seguintes valores:

    • INSTANCE_GROUP_NAME: o nome do MIG.

    • ZONE_NAME: a zona suportada para obter uma lista de instâncias de VM.

    • PROJECT_ID: opcional. O ID do projeto a partir do qual quer obter uma lista de instâncias de VM.

    REST

    Para listar todas as instâncias, envie o seguinte pedido 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 o seguinte pedido GET.

    O método HTTP e o URL:

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

    Indique os seguintes valores:

    • ZONE_NAME: a zona suportada para obter uma lista de instâncias de VM.

    • PROJECT_ID: o ID do projeto a partir do qual obter uma lista de instâncias de VM.

Ative o modo de computação confidencial na GPU

  1. Estabeleça ligação a uma instância de VM no MIG através do comando gcloud compute ssh.

    gcloud compute ssh
    
  2. Atualize a lista de pacotes e instale as ferramentas e as 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 controladores de GPU adequados na instância de VM. Para instâncias de VM com o arranque seguro ativado, consulte o artigo Instale controladores de GPU (VMs de arranque seguro). Recomendamos que use a versão nvidia-driver-575-open do controlador.

  4. Para configurar uma comunicação segura entre a GPU e o controlador da GPU, 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 ligação segura do protocolo de segurança e modelo de dados (SPDM) entre a GPU e o controlador da 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 de 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
    

O que se segue?