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

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

GPU を使用して Confidential VM インスタンスを作成する前に、プロジェクトに十分な GPU 割り当てが割り当てられていることを確認してください。 Google Cloud

GPU 割り当ての要件

GPU を使用して Confidential VM インスタンスを正常に作成するには、次の割り当てタイプで十分な割り当てが必要です。

  • 各リージョンで作成する GPU モデルのプリエンプティブル割り当て。

  • すべてのリージョンにおけるすべてのタイプの GPU の合計数に対するグローバル割り当て。

これらの GPU 割り当ての増加をリクエストするには、 プリエンプティブル割り当てをリクエストするおよび グローバル割り当てをリクエストするをご覧ください。

プリエンプティブル割り当てをリクエストする

リージョンのプリエンプティブル NVIDIA H100 GPU 割り当ての増加をリクエストするには、次の操作を行います。

  1. コンソールで、[割り当て] ページに移動します。 Google Cloud

    [割り当て] に移動

  2. [フィルタ] ボックスに PREEMPTIBLE_NVIDIA_H100_GPUS と入力し、 [Enter] キーまたは [Return] キーを押します。

  3. テーブルの [ディメンション] 列で、割り当てを増やすリージョンの行を見つけます。

  4. その行で、 [**その他の操作**] をクリックし、 [**割り当てを編集**] をクリックします。

  5. [割り当ての変更] ペインの [新しい値] ボックスに、必要な GPU の数を入力します。

  6. [リクエストを送信] をクリックします。

グローバル割り当てをリクエストする

グローバル割り当ての増加をリクエストするには、次の操作を行います。

  1. コンソールで、[割り当て] ページに移動します。 Google Cloud

    [割り当て] に移動

  2. [**フィルタ**] ボックスに GPUS_ALL_REGIONS と入力し、 [Enter] キーまたは [Return] キーを押します。

  3. 表示された行で、 [**その他の操作**] をクリックし、 [**割り当てを編集**] をクリックします。

  4. [割り当ての変更] ペインの [新しい値] ボックスに、必要な GPU の数を入力します。

  5. [リクエストを送信] をクリックします。

割り当てリクエストの送信後の処理

割り当てリクエストが成功すると、承認メールが送信されます。メールを受信してから 15 分後に、 [割り当て]ページを更新して、更新された 割り当てを確認します。15 分経過しても割り当てが更新されない場合は、 Cloud カスタマーケアにお問い合わせください。

割り当てリクエストが拒否された場合は、次の手順を説明するメールが届くことがあります。割り当ての増加を再度リクエストするには、メールの手順に沿って操作してください。

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

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

  • ZONE_NAME: VM を作成する サポート対象ゾーン

REST

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

HTTP メソッドと URL:

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

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

  • ZONE_NAME: VM を作成する サポート対象ゾーン

Flex Start モデル

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

Flex Start プロビジョニング モデルで 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
    

    セキュアブートを有効にするには、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-2404-lts イメージ ファミリーを使用することをおすすめします。confidential-vm-images プロジェクトの Container-Optimized OS イメージの場合は、cos-tdx-113-lts イメージ ファミリーを使用します。

    • RUN_DURATION: リクエストされた VM インスタンスを実行する期間。値は、日数、 時間、分、秒の後にそれぞれ dhms を付けて指定する必要があります。たとえば、30 分の場合は 30m、1 日 2 時間 3 分 4 秒の場合は 1d2h3m4s と指定します。値は 10 分から 7 日の間で指定する必要があります。

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

    REST

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

    HTTP メソッドと URL:

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

    • RUN_DURATION: リクエストされた VM インスタンスを実行する期間(秒単位)。値は 600 秒から 604800 秒の間で指定する必要があります。これは 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 メソッドと 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_NAME/instanceTemplates
    

    次の値を指定します。

    • ZONE_NAME: 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-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 ドライバ間の安全な 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
    

次のステップ