建立具有 GPU 的機密 VM 執行個體

如要在 Confidential VM 中使用 GPU,您必須根據 a3-highgpu-1g 機器類型,使用現成或彈性啟動佈建模式建立 Confidential VM 執行個體,並使用 Intel TDX。建立 VM 執行個體後,請在連結的 GPU 上啟用機密運算模式。

如要使用 Spot 或彈性啟動模式建立 VM 執行個體,請完成下列步驟:

Spot 模型

gcloud

如要使用 gcloud CLI 建立經過加速器最佳化的 Spot VM 執行個體,請使用 instances create 子指令和 --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

提供以下這些值:

  • VM_NAME:新 VM 執行個體的名稱。

  • IMAGE_PROJECT:包含支援作業系統映像檔的專案。建議使用 Ubuntu 映像檔的ubuntu-os-cloud 映像檔專案。您可以選擇使用 Container-Optimized OS 映像檔的 confidential-vm-images 映像檔專案。

  • IMAGE_FAMILY_NAME:支援機密 VM 的作業系統映像檔系列。使用 ubuntu-os-cloud 映像檔專案時,建議使用 ubuntu-2204-lts 映像檔系列。如要使用 confidential-vm-images 專案的 Container-Optimized OS 映像檔,請使用 cos-tdx-113-lts 映像檔系列。

  • ZONE:用於建立 VM 的支援區域

REST

如要建立 Spot VM 執行個體,請傳送下列 POST 要求,並附上適當的內容主體。

HTTP 方法和網址:

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

JSON 要求內文:

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

提供以下這些值:

  • VM_NAME:新 VM 執行個體範本的名稱。

  • IMAGE_PROJECT:包含支援作業系統映像檔的專案。建議使用 Ubuntu 映像檔的ubuntu-os-cloud 映像檔專案。您可以選擇使用 Container-Optimized OS 映像檔的 confidential-vm-images 映像檔專案。

  • IMAGE_FAMILY_NAME:支援機密 VM 的作業系統映像檔系列。使用 ubuntu-os-cloud 映像檔專案時,建議使用 ubuntu-2204-lts 映像檔系列。如要使用 confidential-vm-images 專案的 Container-Optimized OS 映像檔,請使用 cos-tdx-113-lts 映像檔系列。

  • PROJECT_ID:選用。要在其中建立 VM 的專案 ID。

  • ZONE:用於建立 VM 的支援區域

彈性啟動模式

如要使用彈性啟動模式,請建立執行個體範本,然後使用該範本建立 MIG。然後使用規模調整要求,將 GPU VM 執行個體新增至 MIG。

搭配使用 MIG 規模調整要求和「彈性啟動」佈建模式,可提高 GPU VM 執行個體的取得率。詳情請參閱關於 MIG 中的大小調整要求

事前準備

  • 如要確保您有足夠的 GPU 配額來使用所要求的資源,請檢查 GPU 配額。如要使用搭載 GPU 的機密 VM 執行個體,請申請先占 GPU 配額。要求 GPU 配額時,您必須為要在各個地區中建立的 GPU 模型要求配額,並依據所有地區中全部類型之 GPU 的總數要求額外的全域配額 (GPUs (all regions))。
  • 如要瞭解配額用量,請參閱「GPU VM 和先占分配配額」。
  • 如要建立 MIG,請參閱必要條件,如要建立 MIG 中的大小調整要求,請參閱限制

建立含有 GPU VM 執行個體的 MIG

如要建立執行個體範本,然後使用該範本建立 MIG,請完成下列步驟。

  1. 建立執行個體範本。

    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
    

    如要啟用「安全啟動」,您可以選擇使用 --shielded-secure-boot 旗標啟動 VM 執行個體。

    提供以下這些值:

    • INSTANCE_TEMPLATE_NAME:新 VM 執行個體範本的名稱。

    • IMAGE_PROJECT:包含支援作業系統映像檔的專案。建議使用 Ubuntu 映像檔的ubuntu-os-cloud 映像檔專案。您可以選擇使用 Container-Optimized OS 映像檔的 confidential-vm-images 映像檔專案。

    • IMAGE_FAMILY_NAME:支援機密 VM 的作業系統映像檔系列。使用 ubuntu-os-cloud 映像檔專案時,建議使用 ubuntu-2204-lts 映像檔系列。如要使用 confidential-vm-images 專案的 Container-Optimized OS 映像檔,請使用 cos-tdx-113-lts 映像檔系列。

    • PROJECT_ID:選用。要在其中建立 VM 的專案 ID。

    REST

    如要建立機密 VM 執行個體範本,請傳送下列 POST 要求,並提供適當的主體內容。

    HTTP 方法和網址:

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

    JSON 要求內文:

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

    如要啟用安全啟動功能,您可以選擇在 VM 執行個體啟動時加入下列物件。

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

    提供以下這些值:

    • INSTANCE_TEMPLATE_NAME:新 VM 執行個體範本的名稱。

    • IMAGE_PROJECT:包含支援作業系統映像檔的專案。建議使用 Ubuntu 映像檔的ubuntu-os-cloud 映像檔專案。您可以選擇使用 Container-Optimized OS 映像檔的 confidential-vm-images 映像檔專案。

    • IMAGE_FAMILY_NAME:支援機密 VM 的作業系統映像檔系列。使用 ubuntu-os-cloud 映像檔專案時,建議使用 ubuntu-2204-lts 映像檔系列。如要使用 confidential-vm-images 專案的 Container-Optimized OS 映像檔,請使用 cos-tdx-113-lts 映像檔系列。

    • PROJECT_ID:選用。要在其中建立 VM 的專案 ID。

    • ZONE:建立 MIG 的支援區域

  2. 建立 MIG 和大小調整要求,一次新增多個 GPU VM 執行個體。

  3. 列出 MIG 中的執行個體。

    gcloud

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

    提供以下這些值:

    • INSTANCE_GROUP_NAME:MIG 的名稱。

    • ZONE:要取得 VM 執行個體清單的支援區域

    • PROJECT_ID:選用。要從中取得 VM 執行個體清單的專案 ID。

    REST

    如要列出所有執行個體,請傳送下列 GET 要求。

    HTTP 方法和網址:

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

    如要將執行個體清單縮小至特定區域,請傳送下列 GET 要求。

    HTTP 方法和網址:

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

    提供以下這些值:

    • ZONE:要取得 VM 執行個體清單的支援區域

    • PROJECT_ID:要從中取得 VM 執行個體清單的專案 ID。

在 GPU 上啟用機密運算模式

  1. 使用 gcloud compute ssh 指令連線至 MIG 中的 VM 執行個體。

    gcloud compute ssh
    
  2. 更新套件清單,並安裝必要的工具和程式庫。

    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. 在 VM 執行個體上安裝適當的 GPU 驅動程式。 如要瞭解如何為啟用安全啟動功能的 VM 執行個體安裝 GPU 驅動程式,請參閱這篇文章。建議使用 nvidia-550-server-open 驅動程式版本。

  4. 如要設定 GPU 與 GPU 驅動程式之間的通訊安全,請啟用 Linux Kernel Crypto API (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. 如要確保 GPU 和 GPU 驅動程式之間的安全安全通訊協定和資料模型 (SPDM) 連線,請啟用持續模式。

    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. 重新啟動 VM 執行個體,套用 LKCA 和持續性模式設定。

    sudo reboot
    
  7. (選用) 安裝下列 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
    

後續步驟