Crear una instancia de VM confidencial con GPU

Para usar GPUs con máquinas virtuales confidenciales, debes crear una instancia de máquina virtual confidencial con el modelo de aprovisionamiento de inicio flexible o de instancia de VM esporádica basado en el tipo de máquina a3-highgpu-1g y usar Intel TDX. Después de crear la instancia de VM, habilita el modo de computación confidencial en la GPU conectada.

Requisito de cuota de GPUs

Antes de crear una instancia de VM confidencial con GPU, asegúrate de que tienes suficiente cuota de GPUs asignada a tu proyecto Google Cloud. Para crear una instancia de VM confidencial con GPU, necesitas suficiente cuota de los siguientes tipos:

  • Cuota interrumpible para los modelos de GPU que quieras crear en cada región.

  • Cuota global para el número total de GPUs de todos los tipos en todas las regiones.

Para solicitar un aumento de estas cuotas de GPU, consulta Solicitar cuota de instancias de VM preemptivas y Solicitar cuota global.

Solicitar cuota de recursos preemptivos

Para solicitar un aumento de la cuota de GPUs NVIDIA H100 preemptivas regionales, haz lo siguiente:

  1. En la Google Cloud consola, ve a la página Cuotas.

    Ir a Cuotas

  2. En el cuadro Filtro, escribe PREEMPTIBLE_NVIDIA_H100_GPUS y, a continuación, pulsa la tecla Intro o Retorno.

  3. En la columna Dimensiones de la tabla, busque la fila de la región cuya cuota quiera aumentar.

  4. En esa fila, haz clic en Más acciones y, a continuación, en Editar cuota.

  5. En el panel Cambios de cuota, introduce el número de GPUs que quieras en el cuadro Valor nuevo.

  6. Haz clic en Enviar solicitud.

Solicitar una cuota global

Para solicitar un aumento de cuota global, haz lo siguiente:

  1. En la Google Cloud consola, ve a la página Cuotas.

    Ir a Cuotas

  2. En el cuadro Filtro, escribe GPUS_ALL_REGIONS y, a continuación, pulsa la tecla Intro o Retorno.

  3. En la fila resultante, haz clic en Más acciones y, a continuación, en Editar cuota.

  4. En el panel Cambios de cuota, introduce el número de GPUs que quieras en el cuadro Valor nuevo.

  5. Haz clic en Enviar solicitud.

Qué ocurre después de enviar una solicitud de cuota

Si se aprueba tu solicitud de aumento de cuota, recibirás un correo de confirmación. Espera 15 minutos después de recibir el correo y, a continuación, actualiza la página Cuotas para comprobar la cuota actualizada. Si la cuota sigue sin actualizarse después de 15 minutos, ponte en contacto con Cloud Customer Care.

Si se rechaza tu solicitud de aumento de cuota, es posible que recibas un correo en el que se te expliquen los pasos que puedes seguir. Para volver a solicitar más cuota, sigue las instrucciones que se indican en el correo.

Crear una instancia de VM confidencial con GPU

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

Modelo de Spot

gcloud

Para crear una instancia de máquina virtual Spot optimizada para aceleradores con la CLI de gcloud, 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

Proporciona los siguientes valores:

  • INSTANCE_NAME: nombre de la nueva instancia de VM.

  • IMAGE_PROJECT: el proyecto que contiene la imagen del sistema operativo compatible. Te recomendamos que uses el proyecto de imagen ubuntu-os-cloud para las imágenes de Ubuntu. También puedes usar el proyecto de imagen confidential-vm-imagespara imágenes de Container-Optimized OS.

  • IMAGE_FAMILY_NAME: la familia de la imagen del sistema operativo compatible con Confidential VM. 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: la zona admitida en la que se creará la VM.

REST

Para crear una instancia de máquina virtual de 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"
      }
    ]
  }

Proporciona los siguientes valores:

  • INSTANCE_NAME: el nombre de la nueva plantilla de instancia de VM.

  • IMAGE_PROJECT: el proyecto que contiene la imagen del sistema operativo compatible. Te recomendamos que uses el proyecto de imagen ubuntu-os-cloud para las imágenes de Ubuntu. También puedes usar el proyecto de imagen confidential-vm-imagespara imágenes de Container-Optimized OS.

  • IMAGE_FAMILY_NAME: la familia de la imagen del sistema operativo compatible con Confidential VM. 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. El ID del proyecto en el que se va a crear la VM.

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

Modelo de inicio flexible

Para usar el modelo flex-start, primero debes crear una plantilla de instancia y, a continuación, un grupo de instancias gestionadas (MIG) con esa plantilla. A continuación, puedes añadir instancias de VM con GPU al MIG mediante solicitudes de cambio de tamaño.

Si usas una solicitud de cambio de tamaño de MIG con el modelo de aprovisionamiento de inicio flexible, podrás obtener instancias de VM con GPU más fácilmente. Para obtener más información, consulta Acerca de las solicitudes de cambio de tamaño en un MIG.

Antes de empezar

Consulta los requisitos para crear un MIG y las limitaciones para crear una solicitud de cambio de tamaño en un MIG.

Crear un MIG con instancias de máquina virtual con GPU

Para crear una plantilla de instancia y, después, usarla para crear un MIG, sigue estos pasos.

  1. Crea una plantilla de instancia.

    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 Arranque seguro, puedes usar la marca --shielded-secure-boot para los arranques de instancias de VM.

    Proporciona los siguientes valores:

    • INSTANCE_TEMPLATE_NAME: nombre de la nueva plantilla de instancia de VM.

    • IMAGE_PROJECT: el proyecto que contiene la imagen del sistema operativo compatible. Te recomendamos que uses el proyecto de imagen ubuntu-os-cloud para las imágenes de Ubuntu. También puedes usar el proyecto de imagen confidential-vm-imagespara imágenes de Container-Optimized OS.

    • IMAGE_FAMILY_NAME: la familia de la imagen del sistema operativo compatible con Confidential VM. 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: la duración que quieres que se ejecuten las instancias de VM solicitadas. Debes dar formato al valor como el número de días, horas, minutos o segundos seguido 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 estar entre 10 minutos y 7 días.

    • PROJECT_ID: opcional. El ID del proyecto en el que se va a crear la VM.

    REST

    Para crear una plantilla de instancia de VM confidencial, 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 arranque seguro, puedes incluir de forma opcional el siguiente objeto para los arranques de instancias de VM.

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

    Proporciona los siguientes valores:

    • PROJECT_ID: opcional. El ID del proyecto en el que se va a crear la VM.

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

    • INSTANCE_TEMPLATE_NAME: nombre de la nueva plantilla de instancia de VM.

    • IMAGE_PROJECT: el proyecto que contiene la imagen del sistema operativo compatible. Te recomendamos que uses el proyecto de imagen ubuntu-os-cloud para las imágenes de Ubuntu. También puedes usar el proyecto de imagen confidential-vm-imagespara imágenes de Container-Optimized OS.

    • IMAGE_FAMILY_NAME: la familia de la imagen del sistema operativo compatible con Confidential VM. 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: la duración, en segundos, que quieres que se ejecuten las instancias de VM solicitadas. El valor debe estar comprendido entre 600 y 604800 segundos, lo que corresponde a un intervalo de entre 10 minutos y 7 días.

  2. Crea un MIG y una solicitud de cambio de tamaño para añadir instancias de máquina virtual con GPU a la vez.

  3. Lista las instancias presentes en el MIG.

    gcloud

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

    Proporciona los siguientes valores:

    • INSTANCE_GROUP_NAME: el nombre del MIG.

    • ZONE_NAME: la zona admitida de la que se va a obtener una lista de instancias de VM.

    • PROJECT_ID: opcional. El ID del proyecto del que se va a obtener 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
    

    Proporciona los siguientes valores:

    • ZONE_NAME: la zona admitida de la que se va a obtener una lista de instancias de VM.

    • PROJECT_ID: ID del proyecto del que se va a obtener una lista de instancias de VM.

Habilitar el modo de computación confidencial en la GPU

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

    gcloud compute ssh
    
  2. Actualiza la lista de paquetes e 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. En el caso de las instancias de VM con el arranque seguro habilitado, consulta Instalar controladores de GPU (VMs con arranque seguro). Te recomendamos que utilices la nvidia-driver-575-open versión del controlador.

  4. Para configurar una comunicación segura entre la GPU y el controlador de la GPU, habilita la API Crypto 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 protocolo de seguridad y modelo de datos (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 las configuraciones de LKCA y 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
    

Siguientes pasos