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

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

GPU 割り当ての要件

GPU を使用して Confidential VM インスタンスを作成する前に、 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 インスタンスを作成する手順は次のとおりです。

スポットモデル

gcloud

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

  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-2204-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-2204-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-2204-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-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 メソッドと 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
    

次のステップ