このガイドでは、カレンダー モードで将来の予約を使用して、Tensor Processing Unit(TPU)のプロビジョニングを最適化する方法について説明します。カレンダー モードでの将来の予約では、TPU 容量を確認して事前に計画する際に役立つ、組み込みのカレンダー アドバイザーと Recommender を利用できます。指定した開始時間と期間(1~90 日)の容量をリクエストすると、Recommender が候補の日付を提案します。
このガイドは、バッチ ワークロードの実行に Kubernetes コンテナ オーケストレーション機能を使用することを検討している ML エンジニア、プラットフォーム管理者、オペレーター、データおよび AI のスペシャリストを対象としています。 Google Cloud のコンテンツで使用されている一般的なロールとタスクの例の詳細については、GKE ユーザーの一般的なロールとタスクをご覧ください。
詳細については、カレンダー モードでの将来の予約についてをご覧ください。
ユースケース
カレンダー モードでの将来の予約は、トレーニングや、リクエストした開始時間に高可用性を必要とするバッチ推論モデルなど、予定した短い期間に需要の高いリクエストが発生するワークロードに最適です。
ワークロードに、長期的な予約や複雑な割り当て管理が必要なく、最大 7 日間、必要に応じて動的にプロビジョニングされるリソースが必要な場合は、Flex Start 使用オプションの使用を検討してください。詳細については、Flex Start による GPU と TPU のプロビジョニングについてをご覧ください。
始める前に
作業を始める前に、次のタスクが完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。gcloud CLI をインストール済みの場合は、
gcloud components updateコマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。
- 次のいずれかがあることを確認します。
- バージョン 1.28.3-gke.1098000 以降を実行している既存の Standard クラスタ。
- バージョン 1.30.3-gke.1451000 以降を実行している既存の Autopilot クラスタ。
カレンダー モードで TPU の将来の予約をリクエストする
カレンダー モードで将来の予約を使用して TPU をリクエストするプロセスは、次のステップで構成されています。
- VM の作成時に、ディスクや IP アドレスなど、予約の一部ではないリソースに十分な割り当てがあることを確認します。カレンダー モードでの将来の予約リクエストには、Compute Engine の割り当ては必要ありません。
- カレンダー モードでリクエストを作成するの手順を完了します。手順は次のとおりです。
- TPU の今後の可用性を確認します。
- カレンダー モードで TPU の将来の予約リクエストを作成して送信します。
- Google Cloud がリクエストを承認するまで待ちます。
- 予約を使用する TPU ノードプールを作成します。
ノードプールを作成する
このセクションは Standard クラスタにのみ適用されます。Autopilot モードでは、ワークロードに基づいてノードが自動的に作成されるためです。
予約は、単一ホストまたはマルチホストの TPU スライス ノードプールを作成するときに使用できます。
単一ホスト TPU スライス ノードプールを作成する
Google Cloud CLI を使用して、単一ホスト TPU スライスのノードプールを作成できます。
gcloud container node-pools create NODE_POOL_NAME \
--location=CONTROL_PLANE_LOCATION \
--cluster=CLUSTER_NAME \
--node-locations=NODE_ZONES \
--machine-type=MACHINE_TYPE \
--reservation-affinity=specific \ This is required
--reservation=RESERVATION
次のように置き換えます。
NODE_POOL_NAME: 新しいノードプールの名前。CONTROL_PLANE_LOCATION: 使用する TPU バージョンに基づくゾーンの名前。使用可能なロケーションについては、GKE での TPU の可用性をご覧ください。CLUSTER_NAME: クラスタの名前。NODE_ZONES: GKE がノードプールを作成する 1 つ以上のゾーンのカンマ区切りリスト。MACHINE_TYPE: ノードに使用するマシンのタイプ。TPU 互換マシンタイプの詳細については、TPU バージョンを選択するの表をご覧ください。RESERVATION: 使用するカレンダー予約の名前。
指定できるすべてのフラグの一覧については、gcloud container clusters create リファレンスをご覧ください。
カレンダー モードの予約でノードプールを作成したら、他の TPU ノードプールと同様にワークロードをデプロイできます。カレンダー モードでの将来の予約の使用は、他のタイプの予約と同じように機能します。詳細については、予約済みゾーンリソースの使用をご覧ください。
マルチホスト TPU スライス ノードプールを作成する
マルチホスト TPU スライス ノードプールを作成する手順は、Ironwood(TPU7x)を使用するか、以前の TPU バージョンを使用するかによって異なります。Ironwood(TPU7x)
Google Cloud CLI または Terraform を使用して、Ironwood(TPU7x)バージョンのマルチホスト TPU スライス ノードプールを作成できます。
gcloud
Ironwood(TPU7x)でマルチホスト TPU スライス ノードプールを作成するには、まずワークロード ポリシーを作成する必要があります。
ワークロード ポリシーを作成します。
gcloud compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \ --type=HIGH_THROUGHPUT \ --accelerator-topology=TPU_TOPOLOGY \ --project=PROJECT_ID \ --region=REGION次のように置き換えます。
WORKLOAD_POLICY_NAME: ワークロード ポリシーの名前。TPU_TOPOLOGY: TPU Ironwood(TPU7x)トポロジ。例:2x2x2。サポートされているすべての Ironwood(TPU7x)トポロジについては、トポロジのセクションをご覧ください。PROJECT_ID: 実際の Google Cloud プロジェクト ID。REGION: ワークロード ポリシーのリージョン。ワークロード ポリシーはリージョン リソースであり、同じトポロジを共有するノードプール間で再利用できます。
ワークロード ポリシーを使用してノードプールを作成します。
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=us-central1 \ --node-locations=us-central1-c \ --machine-type=tpu7x-standard-4t \ --reservation-affinity=specific \ --reservation=FUTURE_RESERVATION_NAME \ --placement-policy=WORKLOAD_POLICY次のように置き換えます。
NODE_POOL_NAME: 新しいノードプールの名前。WORKLOAD_POLICY: 作成したワークロード ポリシーの名前。FUTURE_RESERVATION_NAME: 将来の予約の名前。
このコマンドは、次の特性を持つ NODE_POOL_NAME という名前のノードプールを作成します。
--machine-type=tpu7x-standard-4tは、Ironwood(TPU7x)マシンタイプを指定します。
Terraform
googleプロバイダのバージョン 4.84.0 以降を使用していることを確認します。ワークロード ポリシーを作成します。
resource "google_compute_resource_policy" { name = "WORKLOAD_POLICY_NAME" region = CLUSTER_LOCATION workload_policy { type = "HIGH_THROUGHPUT" accelerator_topology = "TPU_TOPOLOGY" } }次のように置き換えます。
WORKLOAD_POLICY_NAME: ワークロード ポリシーの名前。CLUSTER_LOCATION: クラスタのコンピューティングのロケーション。Kubernetes コントロール プレーンの信頼性を高めるため、リージョン クラスタを使用することをおすすめします。ゾーンクラスタを使用することもできます。詳細については、TPU のバージョンとトポロジの選択をご覧ください。TPU_TOPOLOGY: TPU Ironwood(TPU7x)トポロジ。例:2x2x2。サポートされているすべての Ironwood(TPU7x)トポロジについては、TPU を計画するをご覧ください。
google_compute_resource_policyリファレンスの詳細については、Terraform プロバイダをご覧ください。Terraform 構成に次のブロックを追加します。
resource "google_container_node_pool" "NODE_POOL_RESOURCE_NAME" { provider = google project = PROJECT_ID cluster = CLUSTER_NAME name = POOL_NAME location = CLUSTER_LOCATION node_locations = [NODE_ZONES] initial_node_count = NUM_NODES autoscaling { max_node_count = MAX_NODES location_policy = "ANY" } node_config { machine_type = MACHINE_TYPE reservation_affinity { consume_reservation_type = "SPECIFIC_RESERVATION" key = "compute.googleapis.com/reservation-name" values = [RESERVATION_LABEL_VALUES] } flex_start = false } placement_policy { policy_name = WORKLOAD_POLICY_NAME } }次のように置き換えます。
NODE_POOL_RESOURCE_NAME: Terraform テンプレートのノードプール リソースの名前。PROJECT_ID: プロジェクト ID。CLUSTER_NAME: ノードプールを追加する既存のクラスタの名前。POOL_NAME: 作成するノードプールの名前。NODE_ZONES: GKE がノードプールを作成する 1 つ以上のゾーンのカンマ区切りリスト。NUM_NODES: ノードプール内のノード数。ゼロにするか、TPU チップ数の積を 4 で割った数にする必要があります。これは、マルチホスト TPU スライスでは各 TPU スライスノードに 4 つのチップがあるためです。たとえば、TPU_TOPOLOGYが4x8の場合、32 チップがあるため、NUM_NODESは 8 にする必要があります。TPU トポロジの詳細については、TPU バージョンを選択するの表をご覧ください。TPU_TOPOLOGY: TPU スライスに選択した物理トポロジを示します。トポロジの形式は、使用している TPU のバージョンによって異なります。TPU トポロジの詳細については、トポロジを選択するの表をご覧ください。
必要に応じて、次の変数を使用することもできます。
RESERVATION_NAME: TPU 予約を使用する場合は、ノードプールの作成時に使用する予約リソースのラベルのリストを指定します。reservation_affinityフィールドにRESERVATION_LABEL_VALUESを挿入する方法については、Terraform プロバイダをご覧ください。autoscaling: 自動スケーリングが有効なノードプールを作成します。GKE がマルチホスト TPU スライス ノードプールをスケーリングすると、ノードプールがゼロから最大サイズまでアトミックにスケールアップされます。MAX_NODES: ノードグループの最大サイズ。値は、TPU_TOPOLOGY({A}x{B}x{C})で定義された値の積を各 VM のチップ数で割った数と同じにする必要があります。たとえば、TPU_TOPOLOGYが2x2x2の場合、積は 8 です。tpu7x-standard-4tの各 VM には 4 つのチップがあるため、ノード数は 2 です。
spot: TPU スライスノードに Spot VM を使用するノードプール。この設定は、ノードプールの作成後に変更することはできません。詳細については、Spot VM をご覧ください。flex_start: Flex Start 消費オプションを使用するノードプール。spotが有効になっている場合、この設定をtrueに設定することはできません。
その他の TPU バージョン
Google Cloud CLI、Terraform、または Google Cloud コンソールを使用して、バージョン v3、v4、v5p、v5e、Trillium(v6e)でマルチホスト TPU スライス ノードプールを作成できます。
gcloud
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--node-locations=NODE_ZONES \
--machine-type=MACHINE_TYPE \
--tpu-topology=TPU_TOPOLOGY \
--reservation-affinity=specific \
--reservation=FUTURE_RESERVATION_NAME
次のように置き換えます。
NODE_POOL_NAME: 新しいノードプールの名前。CLUSTER_NAME: クラスタの名前。CONTROL_PLANE_LOCATION: 使用する TPU バージョンに基づくゾーンの名前。使用可能なロケーションについては、GKE での TPU の可用性をご覧ください。NODE_ZONES: GKE がノードプールを作成する 1 つ以上のゾーンのカンマ区切りリスト。MACHINE_TYPE: ノードに使用するマシンのタイプ。TPU 互換マシンタイプの詳細については、TPU バージョンを選択するの表をご覧ください。TPU_TOPOLOGY: TPU トポロジ。例:2x2x2。サポートされているすべての TPU トポロジについては、トポロジのセクションをご覧ください。FUTURE_RESERVATION_NAME: 将来の予約の名前。
Terraform
googleプロバイダのバージョン 4.84.0 以降を使用していることを確認します。Terraform 構成に次のブロックを追加します。
resource "google_container_node_pool" "NODE_POOL_RESOURCE_NAME" { provider = google project = PROJECT_ID cluster = CLUSTER_NAME name = POOL_NAME location = CLUSTER_LOCATION node_locations = [NODE_ZONES] initial_node_count = NUM_NODES autoscaling { max_node_count = MAX_NODES location_policy = "ANY" } node_config { machine_type = MACHINE_TYPE reservation_affinity { consume_reservation_type = "SPECIFIC_RESERVATION" key = "compute.googleapis.com/reservation-name" values = [RESERVATION_LABEL_VALUES] } flex_start = false } placement_policy { type = "COMPACT" tpu_topology = TPU_TOPOLOGY } }次のように置き換えます。
NODE_POOL_RESOURCE_NAME: Terraform テンプレートのノードプール リソースの名前。PROJECT_ID: プロジェクト ID。CLUSTER_NAME: ノードプールを追加する既存のクラスタの名前。POOL_NAME: 作成するノードプールの名前。CLUSTER_LOCATION: クラスタのコンピューティングのロケーション。Kubernetes コントロール プレーンの信頼性を高めるため、リージョン クラスタを使用することをおすすめします。ゾーンクラスタを使用することもできます。詳細については、TPU のバージョンとトポロジの選択をご覧ください。NODE_ZONES: GKE がノードプールを作成する 1 つ以上のゾーンのカンマ区切りリスト。NUM_NODES: ノードプール内のノード数。ゼロにするか、TPU チップ数の積を 4 で割った数にする必要があります。これは、マルチホスト TPU スライスでは各 TPU スライスノードに 4 つのチップがあるためです。たとえば、TPU_TOPOLOGYが4x8の場合、32 チップがあるため、NUM_NODESは 8 にする必要があります。TPU トポロジの詳細については、TPU バージョンを選択するの表をご覧ください。TPU_TOPOLOGY: TPU スライスの物理トポロジを示します。トポロジの形式は、使用している TPU のバージョンによって異なります。TPU トポロジの詳細については、トポロジを選択するの表をご覧ください。
必要に応じて、次の変数を使用することもできます。
RESERVATION_NAME: TPU 予約を使用する場合、これはノードプールの作成時に使用する予約リソースのラベルのリストです。reservation_affinityフィールドにRESERVATION_LABEL_VALUESを挿入する方法については、Terraform プロバイダをご覧ください。autoscaling: 自動スケーリングが有効なノードプールを作成します。GKE がマルチホスト TPU スライス ノードプールをスケーリングすると、ノードプールがゼロから最大サイズまでアトミックにスケールアップされます。MAX_NODES: ノードプールの最大サイズです。TPU_TOPOLOGY({A}x{B}x{C})で定義された値の積を各 VM のチップ数で割った数と同じにする必要があります。
spot: TPU スライスノードに Spot VM を使用するようにノードプールを設定します。これは、ノードプールの作成後に変更することはできません。詳細については、Spot VM をご覧ください。flex_start: Flex Start 使用オプションを使用するようにノードプールを設定します。spotが有効になっている場合、trueに設定することはできません。
コンソール
TPU を使用してノードプールを作成するには:
Google Cloud コンソールで [Google Kubernetes Engine] ページに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[add_boxノードプールを追加] をクリックします。
[ノードプールの詳細] セクションで、[ノードのロケーションを指定する] チェックボックスをオンにします。
使用する TPU バージョンに基づくゾーンの名前を選択します。使用可能なロケーションについては、GKE での TPU の可用性をご覧ください。
ナビゲーション パネルで [ノード] をクリックします。
[マシンの構成] セクションで、[TPU] を選択します。
[シリーズ] プルダウン メニューで、次のいずれかを選択します。
- CT3: TPU v3、単一ホストデバイス
- CT3P: TPU v3、マルチホスト Pod スライス
- CT4P: TPU v4
- CT5LP: TPU v5e
- CT5P: TPU v5p
- CT6E: TPU Trillium(v6e)
[マシンタイプ] プルダウン メニューで、ノードに使用するマシンの名前を選択します。TPU バージョンを選択するの表で、マルチホスト TPU スライス ノードプールを作成するマシンタイプと TPU トポロジを定義する方法を確認します。
[TPU トポロジ] プルダウン メニューで、TPU スライスの物理トポロジを選択します。
[変更が必要です] ダイアログで [変更を適用] をクリックします。
[ブートディスクの種類] が [標準永続ディスク] と [SSD 永続ディスク] のいずれかであることを確認します。
必要に応じて、[Spot VM 上にノードを作成する] チェックボックスをオンにして、ノードプール内のノードで Spot VM を使用します。
[作成] をクリックします。
カレンダー モードの予約でノードプールを作成したら、他の TPU ノードプールと同様にワークロードをデプロイできます。カレンダー モードでの将来の予約の使用は、他のタイプの予約と同じように機能します。詳細については、予約済みゾーンリソースの使用をご覧ください。
次のステップ
予約した TPU リソースを使用する生成 AI モデルの GKE デプロイの例を試す。
GKE を活用して AI / ML イニシアチブを加速するための試験運用版のサンプルを GKE AI Labs で確認する。