GPU を使用して Confidential VM インスタンスを作成する

Confidential VM で GPU を使用するには、a3-highgpu-1g マシンタイプに基づいてスポットまたは flex-start プロビジョニング モデルを使用して Confidential VM インスタンスを作成し、Intel TDX を使用する必要があります。VM インスタンスを作成したら、接続された GPU で Confidential Computing モードを有効にします。

Spot モデルまたは Flex Start モデルを使用して VM インスタンスを作成するには、次の操作を行います。

スポットモデル

gcloud

gcloud CLI を使用してアクセラレータ最適化 Spot VM インスタンスを作成するには、--provisioning-model フラグを指定して instances create サブコマンドを使用します。

  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: Confidential VM でサポートされるオペレーティング システム イメージのファミリー。ubuntu-os-cloud イメージ プロジェクトを使用する場合は、ubuntu-2204-lts イメージ ファミリーを使用することをおすすめします。confidential-vm-images プロジェクトの Container-Optimized OS イメージの場合は、cos-tdx-113-lts イメージ ファミリーを使用します。

  • ZONE: VM を作成するサポートされているゾーン

REST

Spot VM インスタンスを作成するには、適切な本文コンテンツを含む次の POST リクエストを送信します。

HTTP メソッドと URL:

  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: Confidential VM でサポートされるオペレーティング システム イメージのファミリー。ubuntu-os-cloud イメージ プロジェクトを使用する場合は、ubuntu-2204-lts イメージ ファミリーを使用することをおすすめします。confidential-vm-images プロジェクトの Container-Optimized OS イメージの場合は、cos-tdx-113-lts イメージ ファミリーを使用します。

  • PROJECT_ID: 省略可。VM を作成するプロジェクトの ID。

  • ZONE: VM を作成するサポートされているゾーン

Flex Start モデル

Flex Start モデルを使用するには、インスタンス テンプレートを作成し、そのテンプレートを使用して MIG を作成します。その後、サイズ変更リクエストを使用して、GPU VM インスタンスを MIG に追加できます。

Flex Start プロビジョニング モデルで MIG サイズ変更リクエストを使用すると、GPU VM インスタンスの入手可能性が向上します。詳細については、MIG のサイズ変更リクエストについてをご覧ください。

始める前に

  • リクエストするリソースに十分な GPU 割り当てがあることを確認するには、GPU 割り当てを確認します。GPU を使用する Confidential 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
    

    セキュアブートを有効にするには、VM インスタンスの起動に --shielded-secure-boot フラグを使用します。

    次の値を指定します。

    • INSTANCE_TEMPLATE_NAME: 新しい VM インスタンス テンプレートの名前。

    • IMAGE_PROJECT: サポートされているオペレーティング システム イメージを含むプロジェクト。Ubuntu イメージには ubuntu-os-cloud イメージ プロジェクトを使用することをおすすめします。必要に応じて、Container-Optimized OS イメージに confidential-vm-images イメージ プロジェクトを使用できます。

    • IMAGE_FAMILY_NAME: Confidential VM でサポートされるオペレーティング システム イメージのファミリー。ubuntu-os-cloud イメージ プロジェクトを使用する場合は、ubuntu-2204-lts イメージ ファミリーを使用することをおすすめします。confidential-vm-images プロジェクトの Container-Optimized OS イメージの場合は、cos-tdx-113-lts イメージ ファミリーを使用します。

    • PROJECT_ID: 省略可。VM を作成するプロジェクトの ID。

    REST

    Confidential VM インスタンス テンプレートを作成するには、適切な本文コンテンツを含む次の POST リクエストを送信します。

    HTTP メソッドと URL:

    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: Confidential 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 メソッドと URL:

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

    インスタンスのリストを特定のゾーンに絞り込むには、次の GET リクエストを送信します。

    HTTP メソッドと URL:

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

    次の値を指定します。

    • ZONE: VM インスタンスのリストを取得するサポートされているゾーン

    • PROJECT_ID: VM インスタンスのリストを取得するプロジェクトの ID。

GPU で Confidential Computing モードを有効にする

  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 ドライバをインストールする(セキュアブート VM)をご覧ください。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 ドライバ間の安全な Security Protocol and Data Model(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
    

次のステップ