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

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

GPU 配額需求

建立含 GPU 的機密 VM 執行個體前,請確認專案已分配到足夠的GPU 配額。 Google Cloud如要成功建立搭載 GPU 的機密 VM 執行個體,您必須擁有下列配額類型的足夠配額:

  • 要在各個地區建立的 GPU 型號先占配額。

  • 所有地區中各類 GPU 的總數全域配額。

如要申請提高這些 GPU 配額,請參閱「申請搶占型配額」和「申請全域配額」。

要求搶占型配額

如要申請提高區域先占 NVIDIA H100 GPU 配額,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Quotas」(配額) 頁面。

    前往配額頁面

  2. 在「篩選器」方塊中輸入 PREEMPTIBLE_NVIDIA_H100_GPUS,然後按下 Enter 鍵或 Return 鍵。

  3. 在表格的「維度」欄中,找出要提高配額的區域所在列。

  4. 在該資料列中,依序點選 「更多動作」和「編輯配額」

  5. 在「Quota changes」(配額變更) 窗格的「New value」(新值) 方塊中,輸入所需的 GPU 數量。

  6. 按一下 [提交要求]

要求全域配額

如要申請提高全域配額,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Quotas」(配額) 頁面。

    前往配額頁面

  2. 在「篩選器」方塊中輸入 GPUS_ALL_REGIONS,然後按下 Enter 鍵或 Return 鍵。

  3. 在產生的資料列中,依序按一下 「更多動作」和「編輯配額」

  4. 在「Quota changes」(配額變更) 窗格的「New value」(新值) 方塊中,輸入所需的 GPU 數量。

  5. 按一下 [提交要求]

提出配額要求後的影響

如果配額要求獲准,您會收到核准電子郵件。收到電子郵件後,請等待 15 分鐘,然後重新整理「配額」頁面,確認配額是否已更新。如果 15 分鐘後配額仍未更新,請與 Cloud Customer Care 聯絡。

如果配額要求遭拒,您可能會收到電子郵件,說明可採取的後續步驟。如要重新申請提高配額,請按照電子郵件中的指示操作。

建立搭載 GPU 的機密 VM 執行個體

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

Spot 模型

gcloud

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

提供以下這些值:

  • INSTANCE_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_NAME:用於建立 VM 的支援區域

REST

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

HTTP 方法和網址:

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

JSON 要求內文:

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

提供以下這些值:

  • INSTANCE_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_NAME:用於建立 VM 的支援區域

彈性啟動模式

如要使用彈性啟動模式,請先建立執行個體範本,然後使用該範本建立代管執行個體群組 (MIG)。然後,您可以使用調整大小要求,將 GPU VM 執行個體新增至 MIG。

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

事前準備

如要建立 MIG,請參閱必要條件,如要建立 MIG 中的規模調整要求,請參閱限制

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

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

  1. 建立執行個體範本。

    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
    

    如要啟用安全啟動,您可以選擇使用 --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 映像檔系列。

    • RUN_DURATION:您希望要求的 VM 執行個體執行的時間長度。您必須將值格式化為天數、時數、分鐘數或秒數,並分別加上 dhms。舉例來說,指定 30m 代表 30 分鐘,指定 1d2h3m4s 代表 1 天 2 小時 3 分 4 秒。值必須介於 10 分鐘至 7 天之間。

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

    REST

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

    HTTP 方法和網址:

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

    JSON 要求內文:

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

    如要啟用安全啟動功能,您可以選擇性地為 VM 執行個體啟動包含下列物件。

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

    提供以下這些值:

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

    • ZONE_NAME:建立 MIG 的支援區域

    • 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 映像檔系列。

    • RUN_DURATION:您希望要求的 VM 執行個體執行的時間長度 (以秒為單位)。這個值必須介於 600604800 秒之間,也就是 10 分鐘到 7 天。

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

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

    gcloud

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

    提供以下這些值:

    • INSTANCE_GROUP_NAME:MIG 的名稱。

    • ZONE_NAME:要從中取得 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_NAME/instanceTemplates
    

    提供以下這些值:

    • ZONE_NAME:要從中取得 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-driver-575-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
    

後續步驟