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:

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 adicional (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.

  • No actualices el firmware de la GPU de las instancias de Confidential VM con GPU conectadas. Esta operación puede provocar inestabilidad y posibles fallas del sistema.

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 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

Ingresa los siguientes valores:

  • INSTANCE_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_NAME: 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": "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"
      }
    ]
  }

Ingresa los siguientes valores:

  • INSTANCE_NAME: Es el nombre de la plantilla de instancias 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.

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

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

Modelo de inicio flexible

Para usar el modelo de inicio flexible, primero debes crear una plantilla de instancias y, luego, crear un grupo de instancias administrado (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 capacidad de obtener 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

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 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 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.

    • RUN_DURATION: Es la duración de la que deseas que se ejecuten las instancias de VM solicitadas. Debes darle formato al valor como la cantidad de días, horas, minutos o segundos, seguidos de d, h, m y s, respectivamente. Por ejemplo, especifica 30m para 30 minutos o 1d2h3m4s para un día, dos horas, tres minutos y cuatro segundos. El valor debe ser de entre 10 minutos y siete días.

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

    Cuerpo JSON de la solicitud:

    {
      "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 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:

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

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

    • 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.

    • RUN_DURATION: Es la duración, en segundos, por la que deseas que se ejecuten las instancias de VM solicitadas. El valor debe estar entre 600 y 604800 segundos, lo que corresponde a un rango de entre 10 minutos y siete días.

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

    Ingresa los siguientes valores:

    • INSTANCE_GROUP_NAME: el nombre del MIG

    • ZONE_NAME: 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_NAME/instanceTemplates
    

    Ingresa los siguientes valores:

    • ZONE_NAME: 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-driver-575-open.

  4. Para configurar una comunicación segura entre la GPU y el controlador de GPU, habilita la API de criptografía del kernel de Linux (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. Habilita el modo de persistencia para establecer una conexión segura de Security Protocol and Data Model (SPDM) entre la GPU y el controlador de la 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. 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?

Obtén más información para verificar que el modo confidencial esté habilitado en las GPUs.