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-Instanzen auf Grundlage des Maschinentyps a3-highgpu-1g erstellen und Intel TDX verwenden. Nachdem Sie die VM-Instanz erstellt haben, aktivieren Sie den Confidential Computing-Modus auf der angehängten GPU.

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

Hinweise

  • Prüfen Sie Ihr GPU-Kontingent, damit Ihr Kontingent für die angeforderten Ressourcen ausreicht. Wenn Sie eine vertrauliche VM-Instanz mit einer GPU verwenden möchten, fordern Sie ein GPU-Kontingent auf Abruf an. 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.

  • Informationen zum Kontingentverbrauch finden Sie unter GPU-VMs und Zuteilungskontingente auf Abruf.

  • Flashen Sie die GPU-Firmware der Confidential VM-Instanzen mit angehängten GPUs nicht. Dieser Vorgang kann zu Instabilität und potenziellen Systemabstürzen führen.

Spot-Modell

gcloud

Verwenden Sie zum Erstellen einer beschleunigungsoptimierten Spot-VM-Instanz mit der gcloud CLI den Unterbefehl instances create mit dem Flag --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

Geben Sie folgende Werte an:

  • INSTANCE_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-Image-Projekt 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 ubuntu-os-cloud-Image-Projekt verwenden, empfehlen wir die Verwendung der ubuntu-2204-lts-Image-Familie. Verwenden Sie für Container-Optimized OS-Images aus dem Projekt confidential-vm-images die Image-Familie cos-tdx-113-lts.

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

REST

Senden Sie die folgende POST-Anfrage mit dem entsprechenden Inhalt des Anfragetexts, um eine Spot-VM-Instanz zu erstellen.

Die HTTP-Methode und URL:

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

JSON-Text anfordern:

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

Geben Sie folgende Werte an:

  • INSTANCE_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-Image-Projekt 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 ubuntu-os-cloud-Image-Projekt verwenden, empfehlen wir die Verwendung der ubuntu-2204-lts-Image-Familie. 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_NAME: Die unterstützte Zone, in der die VM erstellt werden soll.

Flex-Start-Modell

Wenn Sie das Flex-Start-Modell verwenden möchten, erstellen Sie zuerst eine Instanzvorlage und dann eine verwaltete Instanzgruppe (MIG) mit dieser Vorlage. Anschließend können Sie der MIG mithilfe von Anfragen zur Größenänderung GPU-VM-Instanzen hinzufügen.

Wenn Sie eine Anfrage zur Größenanpassung für eine MIG mit dem Bereitstellungsmodell „Flex-Start“ verwenden, wird die Verfügbarkeit von GPU-VM-Instanzen verbessert. Weitere Informationen finden Sie unter Anfragen zur Größenänderung in einer MIG.

Hinweise

Voraussetzungen für das Erstellen einer MIG und Beschränkungen für das Erstellen einer Anfrage zur Größenänderung in einer MIG

MIG mit GPU-VM-Instanzen erstellen

Führen Sie die folgenden Schritte aus, um eine Instanzvorlage zu erstellen und dann anhand der Vorlage eine MIG zu erstellen.

  1. Erstellen Sie eine Instanzvorlage.

    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
    

    Wenn Sie Secure Boot aktivieren möchten, können Sie optional das Flag --shielded-secure-boot für VM-Instanz-Boots verwenden.

    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-Image-Projekt 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 ubuntu-os-cloud-Image-Projekt verwenden, empfehlen wir die Verwendung der ubuntu-2204-lts-Image-Familie. Verwenden Sie für Container-Optimized OS-Images aus dem Projekt confidential-vm-images die Image-Familie cos-tdx-113-lts.

    • RUN_DURATION: Die Dauer, für die die angeforderten VM-Instanzen ausgeführt werden sollen. Sie müssen den Wert als Anzahl der Tage, Stunden, Minuten oder Sekunden gefolgt von d, h, m bzw. s formatieren. Geben Sie beispielsweise 30m für 30 Minuten oder 1d2h3m4s für einen Tag, zwei Stunden, drei Minuten und vier Sekunden an. Der Wert muss zwischen 10 Minuten und 7 Tagen liegen.

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

    REST

    Senden Sie zum Erstellen einer Vorlage für Confidential VM-Instanzen die folgende POST-Anfrage mit dem entsprechenden Inhalt des Anfragetexts.

    Die HTTP-Methode und URL:

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

    JSON-Text anfordern:

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

    Wenn Sie Secure Boot aktivieren möchten, können Sie optional das folgende Objekt für VM-Instanz-Boots einfügen.

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

    Geben Sie folgende Werte an:

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

    • ZONE_NAME: Die unterstützte Zone, in der die MIG erstellt werden soll.

    • 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-Image-Projekt 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 ubuntu-os-cloud-Image-Projekt verwenden, empfehlen wir die Verwendung der ubuntu-2204-lts-Image-Familie. Verwenden Sie für Container-Optimized OS-Images aus dem Projekt confidential-vm-images die Image-Familie cos-tdx-113-lts.

    • RUN_DURATION: Die Dauer in Sekunden, für die die angeforderten VM-Instanzen ausgeführt werden sollen. Der Wert muss zwischen 600 und 604800 Sekunden liegen, was einem Bereich zwischen 10 Minuten und 7 Tagen entspricht.

  2. Erstellen Sie eine MIG und eine Anfrage zur Größenanpassung, 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_NAME \
        --project=PROJECT_ID
    

    Geben Sie folgende Werte an:

    • INSTANCE_GROUP_NAME: Name der MIG.

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

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

    REST

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

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

    Die HTTP-Methode und URL:

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

    Geben Sie folgende Werte an:

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

    • PROJECT_ID: Die ID des Projekts, aus dem eine Liste der VM-Instanzen abgerufen 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 gcc-12
    
  3. Installieren Sie die entsprechenden GPU-Treiber auf der VM-Instanz. Informationen zu VM-Instanzen mit aktiviertem Secure Boot finden Sie unter GPU-Treiber installieren (Secure Boot-VMs). Wir empfehlen die Verwendung der Treiberversion nvidia-driver-575-open.

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

    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 die folgenden CUDA-Beispiele.

    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

So prüfen Sie, ob der Modus „Vertraulich“ auf GPUs aktiviert ist