Confidential VM-Instanz mit GPU erstellen

Wenn Sie GPUs mit Confidential VMs verwenden möchten, müssen Sie eine Confidential VM-Instanz mit dem Bereitstellungsmodell für Spot- oder Flex-Start basierend auf dem Maschinentyp a3-highgpu-1g erstellen und Intel TDX verwenden. Nachdem Sie die VM-Instanz erstellt haben, aktivieren Sie den Confidential Computing-Modus auf der angeschlossenen GPU.

So erstellen Sie eine VM-Instanz mit dem Spot- oder Flex-Start-Modell:

Eine MIG erstellen.

Hinweise

  • Prüfen Sie Ihr GPU-Kontingent, damit Ihr Kontingent für die angeforderten Ressourcen ausreicht. Fordern Sie für eine vertrauliche VM-Instanz mit einer GPU ein GPU-Kontingent auf Abruf an, um die Ressourcen zu verwenden. Wenn Sie ein GPU-Kontingent anfordern, müssen Sie ein Kontingent für die GPU-Modelle, die Sie in den einzelnen Regionen erstellen möchten, sowie ein zusätzliches globales Kontingent (GPUs (all regions)) für die Gesamtzahl der GPUs aller Typen in allen Regionen anfordern.
  • Weitere Informationen zum Kontingentverbrauch finden Sie unter GPU-VMs und Zuteilungskontingente auf Abruf.
  • Weitere Informationen zu den Voraussetzungen für das Erstellen einer MIG und zu den Einschränkungen beim Erstellen einer Anfrage zur Größenänderung in einer MIG

So erstellen Sie eine MIG mit GPU-VM-Instanzen:

  1. Erstellen Sie eine Instanzvorlage, die zum Erstellen einer MIG erforderlich ist.

    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
    

    Sie können das Flag --shielded-secure-boot für das Booten von VM-Instanzen verwenden, um Secure Boot zu aktivieren.

    Geben Sie folgende Werte an:

    • INSTANCE_TEMPLATE_NAME: Der Name der neuen VM-Instanzvorlage.

    • IMAGE_PROJECT: Das Projekt, das das unterstützte Betriebssystem-Image enthält. Wir empfehlen, das ubuntu-os-cloud-Imageprojekt für Ubuntu-Images zu verwenden. Optional können Sie das Image-Projekt confidential-vm-images für Container-Optimized OS-Images verwenden.

    • IMAGE_FAMILY_NAME: Die Familie für das von Confidential VMs unterstützte Betriebssystem-Image. Wenn Sie das Image-Projekt ubuntu-os-cloud verwenden, empfehlen wir die Image-Familie ubuntu-2204-lts. Verwenden Sie für Container-Optimized OS-Images aus dem Projekt confidential-vm-images die Image-Familie cos-tdx-113-lts.

    • PROJECT_ID: Optional. Die ID des Projekts, in dem die VM erstellt werden soll.

    REST

    Wenn Sie eine Vorlage für eine Confidential VM-Instanz erstellen möchten, senden Sie die folgende POST-Anfrage mit dem entsprechenden Textkörper.

    HTTP-Methode und URL:

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

    JSON-Text anfordern:

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

    Wenn Sie Secure Boot aktivieren möchten, können Sie optional das folgende Objekt für das Starten von VM-Instanzen angeben.

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

    Geben Sie folgende Werte an:

    • INSTANCE_TEMPLATE_NAME: Der Name der neuen VM-Instanzvorlage.

    • IMAGE_PROJECT: Das Projekt, das das unterstützte Betriebssystem-Image enthält. Wir empfehlen, das ubuntu-os-cloud-Imageprojekt für Ubuntu-Images zu verwenden. Optional können Sie das Image-Projekt confidential-vm-images für Container-Optimized OS-Images verwenden.

    • IMAGE_FAMILY_NAME: Die Familie für das von Confidential VMs unterstützte Betriebssystem-Image. Wenn Sie das Image-Projekt ubuntu-os-cloud verwenden, empfehlen wir die Image-Familie ubuntu-2204-lts. Verwenden Sie für Container-Optimized OS-Images aus dem Projekt confidential-vm-images die Image-Familie cos-tdx-113-lts.

    • PROJECT_ID: Optional. Die ID des Projekts, in dem die VM erstellt werden soll.

    • ZONE: Unterstützte Zone, in der die verwaltete Instanzgruppe erstellt werden soll.

  2. Erstellen Sie eine MIG und eine Anfrage zur Größenänderung, um GPU-VM-Instanzen gleichzeitig hinzuzufügen.

  3. Listen Sie die Instanzen in der MIG auf.

    gcloud

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

    Geben Sie folgende Werte an:

    • INSTANCE_GROUP_NAME: Name der MIG.

    • ZONE: Die unterstützte Zone, aus der eine Liste der VM-Instanzen abgerufen werden soll.

    • PROJECT_ID: Optional. Die ID des Projekts, aus dem eine Liste der VM-Instanzen abgerufen werden soll.

    REST

    Senden Sie die folgende GET-Anfrage, um alle Instanzen aufzulisten.

    HTTP-Methode und URL:

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

    Wenn Sie die Liste der Instanzen auf eine bestimmte Zone beschränken möchten, senden Sie die folgende GET-Anfrage.

    HTTP-Methode und URL:

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

    Geben Sie folgende Werte an:

    • ZONE: Die unterstützte Zone, aus der eine Liste der VM-Instanzen abgerufen werden soll.

    • PROJECT_ID: Die ID des Projekts, von dem eine Liste der VM-Instanzen abgerufen werden soll.

Spot-VM-Instanz erstellen

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 \

Geben Sie folgende Werte an:

  • VM_NAME: Der Name der neuen VM-Instanz.

  • IMAGE_PROJECT: Das Projekt, das das unterstützte Betriebssystem-Image enthält. Wir empfehlen, das ubuntu-os-cloud-Imageprojekt für Ubuntu-Images zu verwenden. Optional können Sie das Image-Projekt confidential-vm-images für Container-Optimized OS-Images verwenden.

  • IMAGE_FAMILY_NAME: Die Familie für das von Confidential VMs unterstützte Betriebssystem-Image. Wenn Sie das Image-Projekt ubuntu-os-cloud verwenden, empfehlen wir die Image-Familie ubuntu-2204-lts. Verwenden Sie für Container-Optimized OS-Images aus dem Projekt confidential-vm-images die Image-Familie cos-tdx-113-lts.

REST

Senden Sie zum Erstellen einer Spot-VM-Instanz die folgende POST-Anfrage mit dem entsprechenden Textkörper.

HTTP-Methode und URL:

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

JSON-Text anfordern:

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

Geben Sie folgende Werte an:

  • VM_NAME: Der Name der neuen VM-Instanzvorlage.

  • IMAGE_PROJECT: Das Projekt, das das unterstützte Betriebssystem-Image enthält. Wir empfehlen, das ubuntu-os-cloud-Imageprojekt für Ubuntu-Images zu verwenden. Optional können Sie das Image-Projekt confidential-vm-images für Container-Optimized OS-Images verwenden.

  • IMAGE_FAMILY_NAME: Die Familie für das von Confidential VMs unterstützte Betriebssystem-Image. Wenn Sie das Image-Projekt ubuntu-os-cloud verwenden, empfehlen wir die Image-Familie ubuntu-2204-lts. Verwenden Sie für Container-Optimized OS-Images aus dem Projekt confidential-vm-images die Image-Familie cos-tdx-113-lts.

  • PROJECT_ID: Optional. Die ID des Projekts, in dem die VM erstellt werden soll.

  • ZONE: Die unterstützte Zone, in der die VM erstellt werden soll.

Confidential Computing-Modus auf der GPU aktivieren

  1. Stellen Sie mit dem Befehl gcloud compute ssh eine Verbindung zu einer VM-Instanz in der MIG her.

    gcloud compute ssh
    
  2. Aktualisieren Sie die Paketliste und installieren Sie die erforderlichen Tools und Bibliotheken.

    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. Installieren Sie die entsprechenden GPU-Treiber auf der VM-Instanz.

  4. Aktivieren Sie die Linux Kernel Crypto API (LKCA), um eine sichere Kommunikation zwischen der GPU und dem GPU-Treiber zu konfigurieren.

    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. Aktivieren Sie den Persistenzmodus, um eine sichere SPDM-Verbindung (Security Protocol and Data Model) zwischen der GPU und dem GPU-Treiber zu ermöglichen.

    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. Starten Sie die VM-Instanz neu, um die LKCA- und Persistenzmoduskonfigurationen anzuwenden.

    sudo reboot
    
  7. Optional: Installieren Sie CUDA-Beispiele, um den Confidential Computing-Modus zu aktivieren.

    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
    

Nächste Schritte