マルチホスト Cloud TPU スライスを使用して MIG を作成する

このドキュメントでは、マルチホスト TPU スライスを使用してマネージド インスタンス グループ(MIG)を作成する方法について説明します。

前提条件

次の前提条件を満たしていることを確認してください。

  1. TPU 用のプロジェクトを設定するの説明に従って、TPU 用のプロジェクトを作成します。
  2. リソースを計画するの説明に沿って、TPU の要件を決定します。

マルチホスト TPU スライスを含む MIG を作成する

  1. インスタンス テンプレートを作成します。
  2. ワークロード ポリシーを作成します。
  3. MIG を作成します。

インスタンス テンプレートの作成

インスタンス テンプレートを作成するコマンドは、使用する消費オプション(オンデマンド、Spot、予約にバインド、Flex Start)によって異なります。使用オプションの詳細については、TPU リソースを計画するをご覧ください。

オンデマンド TPU VM のインスタンス テンプレートを作成する

次のコマンドは、オンデマンド消費オプションを使用してインスタンス テンプレートを作成します。

gcloud

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
  --machine-type=MACHINE_TYPE \
  --maintenance-policy=TERMINATE \
  --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",
      "scheduling": {
        "onHostMaintenance": "TERMINATE"
      },
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY"
          }
        }
      ],
      "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 です。

TPU Spot VM のインスタンス テンプレートを作成する

次のコマンドは、Spot の消費オプションを使用してインスタンス テンプレートを作成します。

gcloud

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
  --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 です。

TPU 予約バインド VM のインスタンス テンプレートを作成する

次のコマンドは、予約バインド消費オプションを使用してインスタンス テンプレートを作成します。

gcloud

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
  --machine-type=MACHINE_TYPE \
  --maintenance-policy=TERMINATE \
  --instance-termination-action=DELETE \
  --reservation-affinity=specific \
  --provisioning-model=reservation-bound \
  --reservation=RESERVATION_NAME \
  --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": "RESERVATION_BOUND",
        "instanceTerminationAction": "DELETE"
      },
      "reservationAffinity": {
        "consumeReservationType": "SPECIFIC_RESERVATION",
        "key": "compute.googleapis.com/reservation-name",
        "values": [
          "RESERVATION_NAME"
        ]
      },
      "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)。
  • RESERVATION_NAME: 使用する特定の予約の名前。All Capacity モードの予約の場合、次のように予約の URL を指定してブロックまたはサブブロックをターゲットに設定できます。

    • ブロックを指定します。

      RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME
      
    • サブブロックを指定します。

      RESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME/reservationSubBlocks/RESERVATION_SUBBLOCK_NAME
      
  • IMAGE_FAMILY: TPU VM の OS イメージ ファミリー。特定の OS バージョンをインストールする場合は、--image フラグを使用します。OS イメージの詳細については、OS イメージをご覧ください。

  • IMAGE_PROJECT: OS イメージを含むプロジェクト。TPU イメージの場合、これは ubuntu-os-accelerator-images です。

TPU Flex Start VM のインスタンス テンプレートを作成する

次のコマンドは、Flex Start 消費オプションを使用してインスタンス テンプレートを作成します。

gcloud

gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \
    --machine-type=MACHINE_TYPE \
    --maintenance-policy=TERMINATE \
    --instance-termination-action=DELETE \
    --provisioning-model=FLEX_START \
    --max-run-duration=DURATION \
    --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": "FLEX_START",
        "instanceTerminationAction": "DELETE",
        "maxRunDuration": {
          "seconds": "DURATION"
        }
      },
      "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)。
  • DURATION: TPU VM を実行できる最大期間。REST の場合は、秒数で指定します(たとえば、1 時間の場合は 3600、7 日間の場合は 604800)。
  • IMAGE_FAMILY: TPU VM の OS イメージ ファミリー。特定の OS バージョンをインストールする場合は、--image フラグを使用します。OS イメージの詳細については、OS イメージをご覧ください。
  • IMAGE_PROJECT: OS イメージを含むプロジェクト。TPU イメージの場合、これは ubuntu-os-accelerator-images です。

ワークロード ポリシーの作成

accelerator-topology パラメータ(4x4、8x8、4x4x4 など)を使用してワークロード ポリシーを作成する必要があります。アクセラレータ トポロジは、インスタンスを相互接続された単一のスライスとして扱うように MIG を構成します。

次のコマンドは、特定のトポロジのワークロード ポリシーを作成します。

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 の各バージョンのトポロジの詳細については、システム アーキテクチャをご覧ください。
  • REGION: ワークロード ポリシーのリージョン。

MIG を作成する

マルチホスト TPU スライスを含むゾーン 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 スライスを含むリージョン MIG を作成するには、次のコマンドを使用します。

gcloud

gcloud compute instance-groups managed create MIG_NAME \
   --size=MIG_SIZE \
   --target-size-policy-mode=bulk \
   --template=INSTANCE_TEMPLATE_URL \
   --region=REGION \
   --default-action-on-vm-failure=do-nothing \
   --workload-policy=WORKLOAD_POLICY_URL \
   --target-distribution-shape=any-single-zone \
   --instance-redistribution-type=none

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"
    },
    "distributionPolicy": {
      "targetShape": "ANY_SINGLE_ZONE"
    },
    "updatePolicy": {
      "instanceRedistributionType": "NONE"
    }
  }' \
  "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers"

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

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

MIG にカスタム名の VM を作成する

各 VM にカスタム名を指定して、MIG に VM を作成できます。これは、デバッグや、インスタンスが特定の順序で作成されるようにする場合に便利です。

マルチホスト TPU スライスを含む MIG は、ターゲット サイズ ポリシーのバルクモードを使用します。このような MIG でカスタム名の VM を作成する場合は、次のようになります。

次のいずれかの REST API メソッドを使用して、カスタム名を持つ VM を作成します。

  • ゾーン MIG の場合は、instanceGroupManagers.createInstances を使用します。

     POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME/createInstances
     {
       "instances": [
         {
           "name": "INSTANCE_NAME_1"
         },
         {
           "name": "INSTANCE_NAME_2"
         },
         ...
       ]
     }
     

  • リージョン MIG の場合は、regionInstanceGroupManagers.createInstances を使用します。

     POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME/createInstances
     {
       "instances": [
         {
           "name": "INSTANCE_NAME_1"
         },
         {
           "name": "INSTANCE_NAME_2"
         },
         ...
       ]
     }
     

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

  • PROJECT_ID: MIG が存在するプロジェクトの ID。
  • ZONE: MIG のゾーン。
  • REGION: MIG のリージョン。
  • INSTANCE_NAME_1,2,..: 指定された MIG に追加する VM の名前。

次のステップ