Criar uma instância de VM confidencial com GPU

Para usar GPUs com a VM confidencial, é necessário criar uma instância de VM confidencial usando o modelo de provisionamento do 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 da VM, ative o modo de computação confidencial na GPU anexada.

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

Criar um MIG

Antes de começar

  • Para garantir que haja cota de GPU suficiente para os recursos solicitados, verifique sua cota de GPU. Para uma instância de VM confidencial com uma GPU, solicite a cota de GPU preemptiva para usar os recursos. Quando você solicita uma cota de GPU, precisa pedir uma cota para os modelos de GPU que você quer criar em cada região e outra cota global (GPUs (all regions)) para o número total de GPUs de todos os tipos em todas as regiões.
  • Para entender o consumo de cota, confira VMs de GPU e cotas de alocação preemptivas.
  • Consulte os pré-requisitos para criar um MIG e as limitações para criar uma solicitação de redimensionamento em um MIG.

Para criar um MIG que contém instâncias de VM de GPU, siga estas etapas:

  1. Crie um modelo de instância, que é necessário para criar um MIG.

    gcloud

    gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
        --machine-type=a3-highgpu-1g \
        --image-project=IMAGE_PROJECT \
        --image-family=IMAGE_FAMILY_NAME \
        --maintenance-policy=TERMINATE \
        --reservation-affinity=none \
        --boot-disk-size=30G \
        --confidential-compute-type=TDX \
        --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 com suporte. Recomendamos o uso do projeto de imagem ubuntu-os-cloud para imagens do Ubuntu. Você 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 a VM confidencial. 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.

    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/v1/projects/PROJECT_ID/regions/ZONE_NAME/instanceTemplates
    

    Solicitar corpo JSON:

    {
      "name": "INSTANCE_TEMPLATE_NAME",
      "properties": {
        "confidentialInstanceConfig": {
          "confidentialInstanceType": "TDX"
        },
        "scheduling": {
          "onHostMaintenance": "TERMINATE",
          "provisioningModel": "STANDARD",
          "automaticRestart": true,
          "preemptible": false
        },
        "disks": [
          {
            "type": "PERSISTENT",
            "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"
            }
          }
        ],
        "networkInterfaces": [
          {
            "name": "nic0",
            "network": "projects/PROJECT_ID/global/networks/default",
            "accessConfigs": [
              {
                "name": "external-nat",
                "type": "ONE_TO_ONE_NAT",
                "kind": "compute#accessConfig",
                "networkTier": "PREMIUM"
              }
            ],
            "kind": "compute#networkInterface"
          }
        ],
        "reservationAffinity": {
          "consumeReservationType": "NO_RESERVATION"
        },
        "canIpForward": false,
        "machineType": "a3-highgpu-1g",
        "metadata": {
          "fingerprint": "3y_uc6s9Qvs=",
          "kind": "compute#metadata"
        }
      }
    }
    

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

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

    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 com suporte. Recomendamos o uso do projeto de imagem ubuntu-os-cloud para imagens do Ubuntu. Você 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 a VM confidencial. 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: a zona com suporte para criar a MIG.

  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 \
        --project=PROJECT_ID
    

    Forneça os valores a seguir:

    • INSTANCE_GROUP_NAME: o nome do MIG;

    • ZONE: a zona com suporte 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/instanceTemplates
    

    Forneça os valores a seguir:

    • ZONE: a zona com suporte para receber uma lista de instâncias de VM.

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

Criar uma instância de VM do Spot

gcloud

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

Forneça os valores a seguir:

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

  • IMAGE_PROJECT: o projeto que contém a imagem do sistema operacional com suporte. Recomendamos o uso do projeto de imagem ubuntu-os-cloud para imagens do Ubuntu. Você 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 a VM confidencial. 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.

REST

Para criar uma instância de VM do 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": "VM_NAME",
    "confidentialInstanceConfig": {
      "confidentialInstanceType": "TDX"
    },
    "scheduling": {
      "onHostMaintenance": "TERMINATE",
      "provisioningModel": "SPOT",
    },
    "disks": [
      {
        "type": "PERSISTENT",
        "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"
        }
      }
    ],
    "networkInterfaces": [
      {
        "name": "nic0",
        "network": "projects/PROJECT_ID/global/networks/default",
        "accessConfigs": [
          {
            "name": "external-nat",
            "type": "ONE_TO_ONE_NAT",
            "kind": "compute#accessConfig",
            "networkTier": "PREMIUM"
          }
        ],
        "kind": "compute#networkInterface"
      }
    ],
    "machineType": "zones/ZONE/machineTypes/a3-highgpu-1g",
  }

Forneça os valores a seguir:

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

  • IMAGE_PROJECT: o projeto que contém a imagem do sistema operacional com suporte. Recomendamos o uso do projeto de imagem ubuntu-os-cloud para imagens do Ubuntu. Você 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 a VM confidencial. 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: a zona com suporte em que a VM será criada.

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
    
  3. Instale os drivers de GPU apropriados na instância da VM.

  4. Ative a API Linux Kernel Crypto (LKCA) para configurar uma comunicação segura entre a GPU e o driver da GPU.

    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 garantir uma conexão segura de protocolo de segurança e modelo de dados (SPDM, na sigla em inglês) entre a GPU e o driver 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 modo de persistência e do LKCA.

    sudo reboot
    
  7. (Opcional) Instale amostras do CUDA para ativar o modo de computação confidencial.

    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