Crea una instancia de Confidential VM con GPU

Para usar GPUs con Confidential VM, debes crear una instancia de Confidential VM con el modelo de aprovisionamiento de inicio flexible o de instancia Spot basado en el tipo de máquina a3-highgpu-1g y usar Intel TDX. Después de crear la instancia de VM, debes habilitar el modo de Confidential Computing en la GPU conectada.

Para crear una instancia de VM con el modelo Spot o de inicio flexible, haz lo siguiente:

Modelo de Spot

gcloud

Para crear una instancia de VM Spot optimizada para aceleradores con gcloud CLI, usa el subcomando instances create con la marca --provisioning-model.

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

Ingresa los siguientes valores:

  • VM_NAME: Es el nombre de la instancia de VM nueva.

  • IMAGE_PROJECT: Es el proyecto que contiene la imagen del sistema operativo compatible. Recomendamos usar el proyecto de imágenes ubuntu-os-cloud para las imágenes de Ubuntu. De manera opcional, puedes usar el proyecto de imágenes confidential-vm-images para las imágenes de Container-Optimized OS.

  • IMAGE_FAMILY_NAME: Es la familia de la imagen del sistema operativo compatible con Confidential VMs. Cuando uses el proyecto de imagen ubuntu-os-cloud, te recomendamos que uses la familia de imágenes ubuntu-2204-lts. Para las imágenes de Container-Optimized OS del proyecto confidential-vm-images, usa la familia de imágenes cos-tdx-113-lts.

  • ZONE: Es la zona admitida en la que se creará la VM.

REST

Para crear una instancia de VM Spot, envía la siguiente solicitud POST con el contenido del cuerpo adecuado.

El método HTTP y la URL:

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

Cuerpo JSON de la solicitud:

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

Ingresa los siguientes valores:

  • VM_NAME: Es el nombre de la nueva plantilla de instancias de VM.

  • IMAGE_PROJECT: Es el proyecto que contiene la imagen del sistema operativo compatible. Recomendamos usar el proyecto de imágenes ubuntu-os-cloud para las imágenes de Ubuntu. De manera opcional, puedes usar el proyecto de imágenes confidential-vm-images para las imágenes de Container-Optimized OS.

  • IMAGE_FAMILY_NAME: Es la familia de la imagen del sistema operativo compatible con Confidential VMs. Cuando uses el proyecto de imagen ubuntu-os-cloud, te recomendamos que uses la familia de imágenes ubuntu-2204-lts. Para las imágenes de Container-Optimized OS del proyecto confidential-vm-images, usa la familia de imágenes cos-tdx-113-lts.

  • PROJECT_ID: Opcional ID del proyecto en el que se creará la VM.

  • ZONE: Es la zona admitida en la que se creará la VM.

Modelo de inicio flexible

Para usar el modelo de inicio flexible, crea una plantilla de instancias y, luego, crea un MIG con esa plantilla. Luego, puedes agregar instancias de VM con GPU al MIG con solicitudes de cambio de tamaño.

Usar una solicitud de cambio de tamaño del MIG con el modelo de aprovisionamiento de inicio flexible mejora la disponibilidad de las instancias de VM con GPU. Para obtener más información, consulta Información sobre las solicitudes de cambio de tamaño en un MIG.

Antes de comenzar

  • A fin de asegurarte de que tienes suficiente cuota de GPU para los recursos que solicitas, verifica tu cuota de GPU. En el caso de una instancia de VM confidencial con una GPU, solicita una cuota de GPU interrumpible para usar los recursos. Cuando solicitas una cuota de GPU, debes especificar una cuota de los modelos de GPU que quieres crear en cada región, así como indicar la cuota global (GPUs (all regions)) con la cantidad total de GPU de todos los tipos en todas las regiones.
  • Para comprender el consumo de cuotas, consulta VMs de GPU y cuotas de asignación interrumpibles.
  • Consulta los requisitos previos para crear un MIG y las limitaciones para crear una solicitud de cambio de tamaño en un MIG.

Crea un MIG con instancias de VM de GPU

Para crear una plantilla de instancias y, luego, usarla para crear un MIG, completa los siguientes pasos.

  1. Crea una plantilla de instancias.

    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 habilitar el inicio seguro, puedes usar de forma opcional la marca --shielded-secure-boot para los inicios de instancias de VM.

    Ingresa los siguientes valores:

    • INSTANCE_TEMPLATE_NAME: Es el nombre de la nueva plantilla de instancias de VM.

    • IMAGE_PROJECT: Es el proyecto que contiene la imagen del sistema operativo compatible. Recomendamos usar el proyecto de imágenes ubuntu-os-cloud para las imágenes de Ubuntu. De manera opcional, puedes usar el proyecto de imágenes confidential-vm-images para las imágenes de Container-Optimized OS.

    • IMAGE_FAMILY_NAME: Es la familia de la imagen del sistema operativo compatible con Confidential VMs. Cuando uses el proyecto de imagen ubuntu-os-cloud, te recomendamos que uses la familia de imágenes ubuntu-2204-lts. Para las imágenes de Container-Optimized OS del proyecto confidential-vm-images, usa la familia de imágenes cos-tdx-113-lts.

    • PROJECT_ID: Opcional ID del proyecto en el que se creará la VM.

    REST

    Para crear una plantilla de instancias de Confidential VM, envía la siguiente solicitud POST con el contenido del cuerpo adecuado.

    El método HTTP y la URL:

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

    Cuerpo JSON de la solicitud:

    {
      "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 habilitar el inicio seguro, puedes incluir de forma opcional el siguiente objeto para los inicios de instancias de VM.

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

    Ingresa los siguientes valores:

    • INSTANCE_TEMPLATE_NAME: Es el nombre de la nueva plantilla de instancias de VM.

    • IMAGE_PROJECT: Es el proyecto que contiene la imagen del sistema operativo compatible. Recomendamos usar el proyecto de imágenes ubuntu-os-cloud para las imágenes de Ubuntu. De manera opcional, puedes usar el proyecto de imágenes confidential-vm-images para las imágenes de Container-Optimized OS.

    • IMAGE_FAMILY_NAME: Es la familia de la imagen del sistema operativo compatible con Confidential VMs. Cuando uses el proyecto de imagen ubuntu-os-cloud, te recomendamos que uses la familia de imágenes ubuntu-2204-lts. Para las imágenes de Container-Optimized OS del proyecto confidential-vm-images, usa la familia de imágenes cos-tdx-113-lts.

    • PROJECT_ID: Opcional ID del proyecto en el que se creará la VM.

    • ZONE: Es la zona admitida en la que se creará el MIG.

  2. Crea un MIG y una solicitud de cambio de tamaño para agregar instancias de VM con GPU de una sola vez.

  3. Enumera las instancias presentes en el MIG.

    gcloud

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

    Ingresa los siguientes valores:

    • INSTANCE_GROUP_NAME: el nombre del MIG

    • ZONE: Es la zona admitida desde la que se obtendrá una lista de instancias de VM.

    • PROJECT_ID: Opcional Es el ID del proyecto del que se obtendrá una lista de instancias de VM.

    REST

    Para enumerar todas las instancias, envía la siguiente solicitud GET.

    El método HTTP y la URL:

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

    Para limitar la lista de instancias a una zona específica, envía la siguiente solicitud GET.

    El método HTTP y la URL:

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

    Ingresa los siguientes valores:

    • ZONE: Es la zona admitida desde la que se obtendrá una lista de instancias de VM.

    • PROJECT_ID: Es el ID del proyecto del que se obtendrá una lista de instancias de VM.

Habilita el modo de Confidential Computing en la GPU

  1. Conéctate a una instancia de VM en el MIG con el comando gcloud compute ssh.

    gcloud compute ssh
    
  2. Actualiza la lista de paquetes y, luego, instala las herramientas y bibliotecas necesarias.

    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. Instala los controladores de GPU adecuados en la instancia de VM. Para las instancias de VM con el inicio seguro habilitado, consulta Instala controladores de GPU (VMs con inicio seguro). Recomendamos usar la versión del controlador nvidia-550-server-open.

  4. Para configurar una comunicación segura entre la GPU y el controlador de GPU, habilita la API de 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. Para garantizar una conexión segura del Protocolo de seguridad y el Modelo de datos (SPDM) entre la GPU y el controlador de la GPU, habilita el modo de persistencia.

    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. Reinicia la instancia de VM para aplicar la LKCA y la configuración del modo de persistencia.

    sudo reboot
    
  7. (Opcional) Instala los siguientes ejemplos 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
    

¿Qué sigue?