TPU Spot VM をリクエストする

Spot VM では、未使用の容量を大幅な割引料金で利用できます。Spot VM はいつでもプリエンプトできますが、プリエンプティブル TPU とは異なり、最大ランタイム時間はありません。Spot VM インスタンスまたは MIG を再起動するには、削除してから再作成する必要があります。

Spot VM の詳細については、Spot VM に関する Compute Engine のドキュメントをご覧ください。

TPU Spot VM を作成する

TPU Spot VM は、個々のインスタンスとして、またはマネージド インスタンス グループ(MIG)の一部として作成できます。

MIG で TPU Spot VM を作成するには、インスタンス テンプレートで Spot プロビジョニング モデルを指定します。

  1. インスタンス テンプレートを作成する:

    gcloud

    gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
        --project=PROJECT_ID \
        --machine-type=MACHINE_TYPE \
        --maintenance-policy=TERMINATE \
        --instance-termination-action=STOP \
        --provisioning-model=SPOT \
        --image-family=IMAGE_FAMILY \
    --image-project=IMAGE_PROJECT
    

    REST

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d '{
        "name": "INSTANCE_TEMPLATE_NAME",
        "properties": {
        "machineType": "MACHINE_TYPE",
        "disks": [
            {
            "boot": true,
            "initializeParams": {
                "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
            }
            }
        ],
        "scheduling": {
            "onHostMaintenance": "TERMINATE",
            "provisioningModel": "SPOT",
            "instanceTerminationAction": "STOP"
        },
        "networkInterfaces": [
            {
            "network": "global/networks/default"
            }
        ]
        }
    }' \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates"
    

    各プレースホルダを次のように置き換えます。

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
    • INSTANCE_TEMPLATE_NAME: インスタンス テンプレートの名前。
    • MACHINE_TYPE: TPU VM のマシンタイプct6e-standard-8t など)。
    • IMAGE_FAMILY: TPU VM の OS イメージ ファミリー。特定の OS バージョンをインストールする場合は、--image フラグを使用します。OS イメージの詳細については、OS イメージをご覧ください。
    • IMAGE_PROJECT: OS イメージを含むプロジェクト。TPU イメージの場合、これは ubuntu-os-accelerator-images です。
  2. ワークロード ポリシーを作成する

    次のコマンドは、ワークロード ポリシーを作成します。これは、単一ホスト スライスでは省略可能です。

    gcloud

    gcloud compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \
    --type=high-throughput \
    --accelerator-topology=TOPOLOGY \
    --region=REGION
    

    REST

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "WORKLOAD_POLICY_NAME",
        "workloadPolicy": {
          "type": "HIGH_THROUGHPUT",
          "acceleratorTopology": "TOPOLOGY"
        }
      }' \
      "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/resourcePolicies"
    

    各プレースホルダを次のように置き換えます。

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
    • WORKLOAD_POLICY_NAME: ワークロード ポリシーの名前。
    • TOPOLOGY: TPU VM のトポロジ(4x4x8 など)。TPU の各バージョンのトポロジの詳細については、TPU のバージョンをご覧ください。
    • REGION: ワークロード ポリシーのリージョン
  3. MIG を作成する:

    gcloud

    gcloud compute instance-groups managed create MIG_NAME \
    --size=MIG_SIZE \
    --target-size-policy-mode=bulk \
    --template=INSTANCE_TEMPLATE_URL \
    --zone=ZONE \
    --default-action-on-vm-failure=do-nothing \
    --workload-policy=WORKLOAD_POLICY_URL
    

    REST

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -d '{
            "name": "MIG_NAME",
            "targetSize": MIG_SIZE,
            "targetSizePolicy": {
              "mode": "BULK"
            },
            "instanceTemplate": "INSTANCE_TEMPLATE_URL",
            "instanceLifecyclePolicy": {
              "defaultActionOnFailure": "DO_NOTHING"
            },
            "resourcePolicies": {
              "workloadPolicy": "WORKLOAD_POLICY_URL"
            }
          }' \
        "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers"
    

    各プレースホルダを次のように置き換えます。

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
    • MIG_NAME: MIG の名前。
    • MIG_SIZE: MIG のサイズ。
    • INSTANCE_TEMPLATE_URL: MIG でインスタンスの作成に使用するインスタンス テンプレートの URL。この URL には、インスタンス テンプレートの ID または名前を含めることができます。次のいずれかの値を指定します。
      • リージョン インスタンス テンプレートの場合: projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
      • グローバル インスタンス テンプレートの場合: INSTANCE_TEMPLATE_ID
    • ZONE: MIG のゾーン
    • WORKLOAD_POLICY_URL: MIG でインスタンスの作成に使用するワークロード ポリシーの URL。例: projects/PROJECT_ID/regions/WORKLOAD_POLICY_REGION/resourcePolicies/WORKLOAD_POLICY_NAME

単一の TPU VM の使用

単一の TPU Spot VM を作成することもできます。

gcloud

gcloud compute instances create TPU_NAME \
  --machine-type=MACHINE_TYPE \
  --image-family=IMAGE_FAMILY \
  --image-project=IMAGE_PROJECT \
  --zone=ZONE \
  --provisioning-model=SPOT \
  --instance-termination-action=DELETE \
  --maintenance-policy=TERMINATE

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "TPU_NAME",
    "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
        }
      }
    ],
    "scheduling": {
      "onHostMaintenance": "TERMINATE",
      "provisioningModel": "SPOT",
      "instanceTerminationAction": "DELETE"
    },
    "networkInterfaces": [
      {
        "network": "global/networks/default"
      }
    ]
  }' \
  "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances"

各プレースホルダを次のように置き換えます。

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • TPU_NAME: TPU VM の名前。
  • MACHINE_TYPE: TPU VM のマシンタイプ(例: ct6e-standard-8t)。
  • IMAGE_FAMILY: TPU VM の OS イメージ ファミリー。特定の OS バージョンをインストールする場合は、--image フラグを使用します。OS イメージの詳細については、OS イメージをご覧ください。
  • IMAGE_PROJECT: OS イメージを含むプロジェクト。TPU イメージの場合、これは ubuntu-os-accelerator-images です。
  • ZONE: TPU VM のゾーン(例: us-central1-b)。

Compute Engine の Spot VM の詳細については、Spot VM をご覧ください。

料金と割り当て

TPU Spot VM の料金は、オンデマンド TPU や予約済み TPU よりも大幅に低くなります。料金について詳しくは、Cloud TPU の料金をご覧ください。

TPU Spot VM を使用するには、プリエンプティブルの割り当てが必要です。詳細については、割り当てをご覧ください。

次のステップ