Creare un'istanza Confidential VM con GPU

Per utilizzare le GPU con Confidential VM, devi creare un'istanza Confidential VM utilizzando il modello di provisioning spot o flessibile in base al tipo di macchina a3-highgpu-1g e utilizzare Intel TDX. Dopo aver creato l'istanza VM, devi attivare la modalità Confidential Computing sulla GPU collegata.

Per creare un'istanza VM utilizzando il modello spot o con avvio flessibile, segui questi passaggi:

Modello spot

gcloud

Per creare un'istanza VM spot ottimizzata per gli acceleratori con gcloud CLI, utilizza il comando secondario instances create con il flag --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

Fornisci i seguenti valori:

  • VM_NAME: Il nome della nuova istanza VM.

  • IMAGE_PROJECT: Il progetto contenente l'immagine del sistema operativo supportato. Ti consigliamo di utilizzare il progetto di immagini ubuntu-os-cloud per le immagini Ubuntu. Se vuoi, puoi utilizzare il progetto di immagini confidential-vm-images per le immagini Container-Optimized OS.

  • IMAGE_FAMILY_NAME: la famiglia dell'immagine del sistema operativo supportata da Confidential VM. Quando utilizzi il progetto di immagine ubuntu-os-cloud, ti consigliamo di utilizzare la famiglia di immagini ubuntu-2204-lts. Per le immagini Container-Optimized OS del progetto confidential-vm-images, utilizza la famiglia di immagini cos-tdx-113-lts.

  • ZONE: la zona supportata in cui creare la VM.

REST

Per creare un'istanza VM spot, invia la seguente richiesta POST con il contenuto del corpo appropriato.

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

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

Fornisci i seguenti valori:

  • VM_NAME: Il nome del nuovo modello di istanza VM.

  • IMAGE_PROJECT: Il progetto contenente l'immagine sistema operativo supportata. Ti consigliamo di utilizzare il progetto di immagini ubuntu-os-cloud per le immagini Ubuntu. Se vuoi, puoi utilizzare il progetto di immagini confidential-vm-images per le immagini Container-Optimized OS.

  • IMAGE_FAMILY_NAME: la famiglia dell'immagine del sistema operativo supportata da Confidential VM. Quando utilizzi il progetto di immagine ubuntu-os-cloud, ti consigliamo di utilizzare la famiglia di immagini ubuntu-2204-lts. Per le immagini Container-Optimized OS del progetto confidential-vm-images, utilizza la famiglia di immagini cos-tdx-113-lts.

  • PROJECT_ID: (Facoltativo). L'ID del progetto in cui creare la VM.

  • ZONE: la zona supportata in cui creare la VM.

Modello di avvio flessibile

Per utilizzare il modello di avvio flessibile, crea un modello di istanza, quindi crea un gruppo di istanze gestite utilizzando quel modello. Puoi quindi aggiungere istanze di VM GPU al MIG utilizzando richieste di ridimensionamento.

L'utilizzo di una richiesta di ridimensionamento del MIG con il modello di provisioning con avvio flessibile migliora l'ottenibilità delle istanze VM GPU. Per saperne di più, consulta la sezione Informazioni sulle richieste di ridimensionamento in un MIG.

Prima di iniziare

  • Per assicurarti di disporre di una quota GPU sufficiente per le risorse che stai richiedendo, controlla la quota GPU. Per l'istanza VM confidenziale con una GPU, richiedi una quota di GPU prerilasciabile per utilizzare le risorse. Quando richiedi una quota GPU, devi richiederne una per i modelli di GPU che vuoi creare in ciascuna regione e una quota globale aggiuntiva (GPUs (all regions)) per il numero totale di GPU di tutti i tipi in tutte le regioni.
  • Per comprendere il consumo di quota, leggi VM GPU e quote di allocazione preemptible.
  • Consulta i prerequisiti per la creazione di un MIG e le limitazioni per la creazione di una richiesta di ridimensionamento in un MIG.

Crea un MIG con istanze VM GPU

Per creare un modello di istanza e poi utilizzarlo per creare un gruppo di istanze gestite, completa i seguenti passaggi.

  1. Creare un modello di istanza.

    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
    

    Per abilitare l'avvio protetto, puoi utilizzare facoltativamente il flag --shielded-secure-boot per gli avvii dell'istanza VM.

    Fornisci i seguenti valori:

    • INSTANCE_TEMPLATE_NAME: Il nome del nuovo modello di istanza VM.

    • IMAGE_PROJECT: Il progetto contenente l'immagine sistema operativo supportata. Ti consigliamo di utilizzare il progetto di immagini ubuntu-os-cloud per le immagini Ubuntu. Se vuoi, puoi utilizzare il progetto di immagini confidential-vm-images per le immagini Container-Optimized OS.

    • IMAGE_FAMILY_NAME: la famiglia dell'immagine del sistema operativo supportata da Confidential VM. Quando utilizzi il progetto di immagine ubuntu-os-cloud, ti consigliamo di utilizzare la famiglia di immagini ubuntu-2204-lts. Per le immagini Container-Optimized OS del progetto confidential-vm-images, utilizza la famiglia di immagini cos-tdx-113-lts.

    • PROJECT_ID: (Facoltativo). L'ID del progetto in cui creare la VM.

    REST

    Per creare un template di istanza Confidential VM, invia la seguente richiesta POST con il contenuto del corpo appropriato.

    Metodo HTTP e URL:

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

    Corpo JSON della richiesta:

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

    Per abilitare l'avvio protetto, puoi includere facoltativamente il seguente oggetto per gli avvii delle istanze VM.

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

    Fornisci i seguenti valori:

    • INSTANCE_TEMPLATE_NAME: Il nome del nuovo modello di istanza VM.

    • IMAGE_PROJECT: Il progetto contenente l'immagine sistema operativo supportata. Ti consigliamo di utilizzare il progetto di immagini ubuntu-os-cloud per le immagini Ubuntu. Se vuoi, puoi utilizzare il progetto di immagini confidential-vm-images per le immagini Container-Optimized OS.

    • IMAGE_FAMILY_NAME: la famiglia dell'immagine del sistema operativo supportata da Confidential VM. Quando utilizzi il progetto di immagine ubuntu-os-cloud, ti consigliamo di utilizzare la famiglia di immagini ubuntu-2204-lts. Per le immagini Container-Optimized OS del progetto confidential-vm-images, utilizza la famiglia di immagini cos-tdx-113-lts.

    • PROJECT_ID: (Facoltativo). L'ID del progetto in cui creare la VM.

    • ZONE: la zona supportata in cui creare il MIG.

  2. Crea un MIG e una richiesta di ridimensionamento per aggiungere contemporaneamente istanze VM GPU.

  3. Elenca le istanze presenti nel MIG.

    gcloud

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

    Fornisci i seguenti valori:

    • INSTANCE_GROUP_NAME: il nome del MIG.

    • ZONE: la zona supportata da cui recuperare un elenco di istanze VM.

    • PROJECT_ID: (Facoltativo). L'ID del progetto da cui ottenere un elenco di istanze VM.

    REST

    Per elencare tutte le istanze, invia la seguente richiesta GET.

    Metodo HTTP e URL:

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

    Per restringere l'elenco delle istanze a una zona specifica, invia la seguente richiesta GET.

    Metodo HTTP e URL:

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

    Fornisci i seguenti valori:

    • ZONE: la zona supportata da cui recuperare un elenco di istanze VM.

    • PROJECT_ID: l'ID del progetto da cui recuperare un elenco di istanze VM.

Abilita la modalità Confidential Computing sulla GPU

  1. Connettiti a un'istanza VM nel MIG utilizzando il comando gcloud compute ssh.

    gcloud compute ssh
    
  2. Aggiorna l'elenco dei pacchetti e installa gli strumenti e le librerie necessari.

    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. Installa i driver GPU appropriati sull'istanza VM. Per le istanze VM con Avvio protetto abilitato, consulta Installare i driver della GPU (VM con Avvio protetto). Ti consigliamo di utilizzare la versione del driver nvidia-550-server-open.

  4. Per configurare una comunicazione sicura tra la GPU e il driver GPU, abilita l'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. Per garantire una connessione sicura Security Protocol and Data Model (SPDM) tra la GPU e il driver della GPU, attiva la modalità di persistenza.

    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. Riavvia l'istanza VM per applicare le configurazioni della modalità LKCA e di persistenza.

    sudo reboot
    
  7. (Facoltativo) Installa i seguenti esempi di 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
    

Passaggi successivi