Créer une instance Confidential VM avec GPU

Pour utiliser des GPU avec une Confidential VM, vous devez créer une instance Confidential VM à l'aide du modèle de provisionnement Spot ou Flex Start basé sur le type de machine a3-highgpu-1g et utiliser Intel TDX. Après avoir créé l'instance de VM, vous activez le mode Informatique confidentielle sur le GPU associé.

Pour créer une instance de VM à l'aide du modèle Spot ou Démarrage flexible, procédez comme suit :

Modèle Spot

gcloud

Pour créer une instance de VM Spot optimisée pour les accélérateurs avec gcloud CLI, utilisez la sous-commande instances create avec l'option --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

Indiquez les valeurs suivantes :

  • VM_NAME : nom de la nouvelle instance de VM.

  • IMAGE_PROJECT : projet contenant l'image du système d'exploitation compatible. Nous vous recommandons d'utiliser le projet d'image ubuntu-os-cloud pour les images Ubuntu. Vous pouvez également utiliser le projet d'images confidential-vm-images pour les images Container-Optimized OS.

  • IMAGE_FAMILY_NAME : famille de l'image de système d'exploitation compatible avec les Confidential VM. Lorsque vous utilisez le projet d'image ubuntu-os-cloud, nous vous recommandons d'utiliser la famille d'images ubuntu-2204-lts. Pour les images Container-Optimized OS du projet confidential-vm-images, utilisez la famille d'images cos-tdx-113-lts.

  • ZONE : zone compatible dans laquelle créer la VM.

REST

Pour créer une instance VM Spot, envoyez la requête POST suivante avec le contenu de corps approprié.

Méthode HTTP et URL :

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

Corps JSON de la requête :

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

Indiquez les valeurs suivantes :

  • VM_NAME : nom du nouveau modèle d'instance de VM.

  • IMAGE_PROJECT : projet contenant l'image du système d'exploitation compatible. Nous vous recommandons d'utiliser le projet d'image ubuntu-os-cloud pour les images Ubuntu. Vous pouvez également utiliser le projet d'images confidential-vm-images pour les images Container-Optimized OS.

  • IMAGE_FAMILY_NAME : famille de l'image de système d'exploitation compatible avec les Confidential VM. Lorsque vous utilisez le projet d'image ubuntu-os-cloud, nous vous recommandons d'utiliser la famille d'images ubuntu-2204-lts. Pour les images Container-Optimized OS du projet confidential-vm-images, utilisez la famille d'images cos-tdx-113-lts.

  • PROJECT_ID : facultatif. ID du projet dans lequel créer la VM.

  • ZONE : zone compatible dans laquelle créer la VM.

Modèle de démarrage Flex

Pour utiliser le modèle de démarrage flexible, créez un modèle d'instance, puis créez un MIG à l'aide de ce modèle. Vous pouvez ensuite ajouter des instances de VM avec GPU au MIG à l'aide de demandes de redimensionnement.

L'utilisation d'une requête de redimensionnement de MIG avec le modèle de provisionnement Démarrage flexible améliore l'obtention des instances de VM avec GPU. Pour en savoir plus, consultez À propos des requêtes de redimensionnement dans un MIG.

Avant de commencer

  • Pour vous assurer que vous disposez d'un quota de GPU suffisant pour les ressources que vous demandez, vérifiez votre quota de GPU. Pour une instance de VM confidentielle avec un GPU, demandez un quota de GPU préemptifs pour utiliser les ressources. Lorsque vous demandez un quota de GPU, vous devez inclure les modèles de GPU que vous souhaitez créer dans chaque région, mais également demander un quota mondial supplémentaire (GPUs (all regions)) pour le nombre total de GPU de tous types, dans toutes les régions.
  • Pour comprendre la consommation de quotas, consultez VM GPU et quotas d'allocation préemptive.
  • Consultez les conditions préalables pour créer un MIG et les limites pour créer une demande de redimensionnement dans un MIG.

Créer un MIG avec des instances de VM avec GPU

Pour créer un modèle d'instance, puis l'utiliser pour créer un MIG, procédez comme suit.

  1. Créez un modèle d'instance.

    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
    

    Pour activer le démarrage sécurisé, vous pouvez éventuellement utiliser l'indicateur --shielded-secure-boot pour les démarrages d'instances de VM.

    Indiquez les valeurs suivantes :

    • INSTANCE_TEMPLATE_NAME : nom du nouveau modèle d'instance de VM.

    • IMAGE_PROJECT : projet contenant l'image du système d'exploitation compatible. Nous vous recommandons d'utiliser le projet d'image ubuntu-os-cloud pour les images Ubuntu. Vous pouvez également utiliser le projet d'images confidential-vm-images pour les images Container-Optimized OS.

    • IMAGE_FAMILY_NAME : famille de l'image de système d'exploitation compatible avec les Confidential VM. Lorsque vous utilisez le projet d'image ubuntu-os-cloud, nous vous recommandons d'utiliser la famille d'images ubuntu-2204-lts. Pour les images Container-Optimized OS du projet confidential-vm-images, utilisez la famille d'images cos-tdx-113-lts.

    • PROJECT_ID : facultatif. ID du projet dans lequel créer la VM.

    REST

    Pour créer un modèle d'instance Confidential VM, envoyez la requête POST suivante avec le contenu de corps approprié.

    Méthode HTTP et URL :

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

    Corps JSON de la requête :

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

    Pour activer le démarrage sécurisé, vous pouvez éventuellement inclure l'objet suivant pour les démarrages d'instances de VM.

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

    Indiquez les valeurs suivantes :

    • INSTANCE_TEMPLATE_NAME : nom du nouveau modèle d'instance de VM.

    • IMAGE_PROJECT : projet contenant l'image du système d'exploitation compatible. Nous vous recommandons d'utiliser le projet d'image ubuntu-os-cloud pour les images Ubuntu. Vous pouvez également utiliser le projet d'images confidential-vm-images pour les images Container-Optimized OS.

    • IMAGE_FAMILY_NAME : famille de l'image de système d'exploitation compatible avec les Confidential VM. Lorsque vous utilisez le projet d'image ubuntu-os-cloud, nous vous recommandons d'utiliser la famille d'images ubuntu-2204-lts. Pour les images Container-Optimized OS du projet confidential-vm-images, utilisez la famille d'images cos-tdx-113-lts.

    • PROJECT_ID : facultatif. ID du projet dans lequel créer la VM.

    • ZONE : zone compatible dans laquelle créer le MIG.

  2. Créez un MIG et une requête de redimensionnement pour ajouter toutes les instances de VM avec GPU à la fois.

  3. Répertoriez les instances présentes dans le MIG.

    gcloud

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

    Indiquez les valeurs suivantes :

    • INSTANCE_GROUP_NAME : nom du MIG.

    • ZONE : zone compatible à partir de laquelle obtenir la liste des instances de VM.

    • PROJECT_ID : facultatif. ID du projet à partir duquel obtenir la liste des instances de VM.

    REST

    Pour répertorier toutes les instances, envoyez la requête GET suivante.

    Méthode HTTP et URL :

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

    Pour limiter la liste des instances à une zone spécifique, envoyez la requête GET suivante.

    Méthode HTTP et URL :

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

    Indiquez les valeurs suivantes :

    • ZONE : zone compatible à partir de laquelle obtenir la liste des instances de VM.

    • PROJECT_ID : ID du projet pour lequel vous souhaitez obtenir une liste des instances de VM.

Activer le mode d'informatique confidentielle sur le GPU

  1. Connectez-vous à une instance de VM du MIG à l'aide de la commande gcloud compute ssh.

    gcloud compute ssh
    
  2. Mettez à jour la liste des packages et installez les outils et bibliothèques nécessaires.

    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. Installez les pilotes de GPU appropriés sur l'instance de VM. Pour les instances de VM sur lesquelles le démarrage sécurisé est activé, consultez Installer des pilotes de GPU (VM avec démarrage sécurisé). Nous vous recommandons d'utiliser la version nvidia-550-server-open du pilote.

  4. Pour configurer une communication sécurisée entre le GPU et le pilote de GPU, activez 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. Pour assurer une connexion sécurisée entre le GPU et le pilote GPU via le protocole de sécurité et le modèle de données (SPDM), activez le mode persistant.

    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. Redémarrez l'instance de VM pour appliquer les configurations LKCA et du mode persistant.

    sudo reboot
    
  7. (Facultatif) Installez les exemples CUDA suivants.

    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
    

Étapes suivantes