ワークロードにマルチノード分散処理が必要な場合は、キューに格納されたプロビジョニングで Flex Start の使用を検討してください。詳細については、キューに格納されたプロビジョニングで Flex Start を使用して大規模なワークロードを実行するをご覧ください。
このガイドは、バッチ ワークロードの実行に Kubernetes コンテナ オーケストレーション機能を使用することを検討している ML エンジニア、プラットフォーム管理者、オペレーター、データおよび AI のスペシャリストを対象としています。 Cloud de Confiance by S3NS のコンテンツで使用されている一般的なロールとタスクの例の詳細については、一般的な GKE ユーザーのロールとタスクをご覧ください。
Flex Start の料金
Flex Start は、リソースを必要に応じて動的にプロビジョニングする必要があり、最長 7 日間の短期間での利用が想定され、複雑な割り当て管理が必要なく、コスト効率よく使いたいワークロードにおすすめです。Flex Start は Dynamic Workload Scheduler によって動いており、料金も Dynamic Workload Scheduler に基づいたものになります。
- vCPU、GPU、TPU が最大 53% 割引になります。
- 従量課金制です。
始める前に
作業を始める前に、次のタスクが完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
コマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。
- バージョン 1.33.0-gke.1712000 以降を実行している Autopilot クラスタまたは Standard クラスタがあることを確認します。
- Flex Start の制限事項を理解していることを確認します。
- Standard クラスタを使用する場合は、クラスタが正常に機能するように、Flex Start を有効にしていないノードプールを少なくとも 1 つ維持していることを確認します。
- ノードのロケーションにプリエンプティブル GPU の割り当てがあることを確認します。
クラスタがない場合や、クラスタが要件を満たしていない場合は、gcloud CLI を使用して Standard リージョン クラスタを作成できます。flex-start について学習できるように、次のフラグを追加します。
--location=us-central1 \
--node-locations=us-central1-a,us-central1-b \
--machine-type=g2-standard-8
Flex Start ノードプールを作成する場合は、前述のフラグと --accelerator type=nvidia-l4,count=1
を使用します。
要件を満たす Standard クラスタがある場合は、次のセクションで、クラスタの GPU アクセラレータ タイプとマシンタイプの選択について説明します。
GPU アクセラレータ タイプを選択する
Autopilot モードでクラスタを使用している場合は、このセクションをスキップして、バッチ ワークロードを実行するに進みます。
GPU の可用性はゾーンごとに異なります。Standard クラスタが存在するゾーンで使用可能な GPU アクセラレータ タイプを見つける必要があります。リージョン Standard クラスタがある場合、GPU アクセラレータ タイプを使用できるゾーンは、クラスタが存在するリージョン内にある必要があります。ノードプールを作成するときに、アクセラレータ タイプとノードのゾーンを指定します。クラスタのロケーションで使用できないアクセラレータ タイプを指定すると、ノードプールの作成は失敗します。
次のコマンドを実行して、クラスタのロケーションとサポートされている GPU アクセラレータ タイプを取得します。
クラスタが存在するロケーションを取得します。
gcloud container clusters list
出力は次のようになります。
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS STACK_TYPE example-cluster-1 us-west2 1.33.2-gke.1111000 34.102.3.122 e2-medium 1.33.2-gke.1111000 9 RUNNING IPV4
次のロケーションの仮想ワークステーションを除く、使用可能な GPU アクセラレータ タイプを一覧表示します。
gcloud compute accelerator-types list | grep LOCATION_NAME | grep -v "Workstation"
LOCATION_NAME
は、クラスタのロケーションに置き換えます。たとえば、
us-west2
リージョンの GPU アクセラレータ タイプのリストを取得するには、次のコマンドを実行します。gcloud compute accelerator-types list | grep us-west2 | grep -v "Workstation"
出力は次のようになります。
nvidia-b200 us-west2-c NVIDIA B200 180GB nvidia-tesla-p4 us-west2-c NVIDIA Tesla P4 nvidia-tesla-t4 us-west2-c NVIDIA T4 nvidia-tesla-p4 us-west2-b NVIDIA Tesla P4 nvidia-tesla-t4 us-west2-b NVIDIA T4
互換性のあるマシンタイプを選択する
Autopilot モードでクラスタを使用している場合は、このセクションをスキップして、バッチ ワークロードを実行するに進みます。
クラスタのロケーションで使用可能な GPU を確認したら、互換性のあるマシンタイプを特定できます。 Cloud de Confiance by S3NS は、GPU を特定のマシンシリーズに制限します。マシンタイプを見つける手順は次のとおりです。
- 利用可能な GPU モデルの表をご覧ください。
- 選択した GPU アクセラレータ タイプの行を見つけます。
- その行の [マシンシリーズ] 列を確認します。この列には、使用する必要があるマシンシリーズが表示されます。
- 指定できるマシンタイプ名を確認するには、マシンシリーズのリンクをクリックします。
唯一の例外は N1 マシンシリーズです。このシリーズでは、選択したアクセラレータ タイプで使用できる N1 マシンタイプに関する追加のガイダンスが提供されます。
アクセラレータ最適化マシンを使用する前に、マシンタイプ別の消費オプションの可用性に示すように、Flex Start プロビジョニング モードでサポートされていることを確認してください。
アクセラレータの数を決定する
Autopilot モードでクラスタを使用している場合は、このセクションをスキップして、バッチ ワークロードを実行するに進みます。
ノードプールを作成するには、ノードプール内の各ノードに接続するアクセラレータの数を決定する必要があります。有効な値は、アクセラレータ タイプとマシンタイプによって異なります。各マシンタイプには、サポートできる GPU の数に上限があります。使用する値(デフォルトの 1
以外)を判断するには:
- GPU マシンタイプをご覧ください。
- 表で、マシンシリーズ タイプに対応するアクセラレータ タイプを探します。
- [GPU 数] 列の値を使用します。
Flex Start を使用してノードプールを作成する
Autopilot モードでクラスタを使用している場合は、このセクションをスキップして、バッチ ワークロードを実行するに進みます。
既存の Standard クラスタで Flex Start を有効にしてノードプールを作成するには、gcloud CLI または Terraform を使用します。
gcloud
Flex Start を使用してノードプールを作成します。
gcloud container node-pools create NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location LOCATION_NAME \ --project PROJECT_ID \ --accelerator type=ACCELERATOR_TYPE,count=COUNT \ --machine-type MACHINE_TYPE \ --max-run-duration MAX_RUN_DURATION \ --flex-start \ --node-locations NODE_ZONES \ --num-nodes 0 \ --enable-autoscaling \ --total-min-nodes 0 \ --total-max-nodes 5 \ --location-policy ANY \ --reservation-affinity none \ --no-enable-autorepair
次のように置き換えます。
NODE_POOL_NAME
: ノードプールに付ける名前。CLUSTER_NAME
: 変更する Standard クラスタの名前。LOCATION_NAME
: クラスタ コントロール プレーンのコンピューティング リージョン。PROJECT_ID
: プロジェクト ID。ACCELERATOR_TYPE
: インスタンスにアタッチするアクセラレータの特定のタイプ(NVIDIA T4 の場合はnvidia-tesla-t4
など)。COUNT
: インスタンスに接続するアクセラレータの数。デフォルト値は1
です。MACHINE_TYPE
: ノードに使用するマシンのタイプ。MAX_RUN_DURATION
: 省略可。ノードの最大実行時間(秒)。最大実行時間はデフォルトの 7 日間です。入力する番号はs
で終わる必要があります。たとえば、1 日を指定するには、「86400s
」と入力します。NODE_ZONES
: GKE がノードプールを作成する 1 つ以上のゾーンのカンマ区切りリスト。
このコマンドで
--flex-start
フラグを指定すると、gcloud
は Flex Start VM を使用してノードプールを作成します。GKE は、指定されたアクセラレータ タイプのインスタンスを 2 つ含むノードを含むノードプールを作成します。ノードプールには最初に 0 個のノードがあり、自動スケーリングが有効になっています。
ノードプールで Flex-Start のステータスを確認します。
gcloud container node-pools describe NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location LOCATION_NAME \ --format="get(config.flexStart)"
ノードプールで Flex Start が有効になっている場合、
flexStart
フィールドはTrue
に設定されます。
Terraform
GPU で Flex Start を使用するには、Terraform モジュールを使用します。
- Terraform 構成に次のブロックを追加します。
resource "google_container_node_pool" " "gpu_dws_pool" {
name = "gpu-dws-pool"
queued_provisioning {
enabled = false
}
}
node_config {
machine_type = "MACHINE_TYPE"
accelerator_type = "ACCELERATOR_TYPE"
accelerator_count = COUNT
node_locations = ["NODE_ZONES"]
flex_start = true
}
次のように置き換えます。
MACHINE_TYPE
: ノードに使用するマシンのタイプ。ACCELERATOR_TYPE
: インスタンスにアタッチするアクセラレータの特定のタイプ(NVIDIA T4 の場合はnvidia-tesla-t4
など)。COUNT
: インスタンスに接続するアクセラレータの数。デフォルト値は1
です。NODE_ZONES
: GKE がノードプールを作成する 1 つ以上のゾーンのカンマ区切りリスト。
Terraform によって Cloud de Confiance API が呼び出され、GPU を使用する Flex Start VM を含むノードプールを含むクラスタが作成されます。ノードプールには最初に 0 個のノードがあり、自動スケーリングが有効になっています。Terraform の詳細については、terraform.io の google_container_node_pool
リソースの仕様をご覧ください。
バッチ ワークロードを実行する
このセクションでは、それぞれ 1 つの GPU を必要とする 2 つの Kubernetes Job を作成します。 Kubernetes の Job コントローラは、1 つ以上の Pod を作成し、特定のタスクが正常に実行されるようにします。Cloud de Confiance コンソールで、
[Cloud Shell をアクティブにする] をクリックして、Cloud Shell セッションを起動します。 Cloud de Confiance コンソールの下部ペインでセッションが開きます。
dws-flex-start.yaml
という名前のファイルを作成します。apiVersion: batch/v1 kind: Job metadata: name: job-1 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-accelerator: ACCELERATOR_TYPE containers: - name: container-1 image: gcr.io/k8s-staging-perf-tests/sleep:latest args: ["10s"] # Sleep for 10 seconds resources: requests: nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1 restartPolicy: OnFailure --- apiVersion: batch/v1 kind: Job metadata: name: job-2 spec: template: spec: nodeSelector: cloud.google.com/gke-flex-start: "true" cloud.google.com/gke-accelerator: ACCELERATOR_TYPE containers: - name: container-2 image: gcr.io/k8s-staging-perf-tests/sleep:latest args: ["10s"] # Sleep for 10 seconds resources: requests: nvidia.com/gpu: 1 limits: nvidia.com/gpu: 1 restartPolicy: OnFailure
dws-flex-start.yaml
マニフェストを適用します。kubectl apply -f dws-flex-start.yaml
Job が同じノードで実行されていることを確認します。
kubectl get pods -l "job-name in (job-1,job-2)" -o wide
出力は次のようになります。
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES job-1 0/1 Completed 0 19m 10.(...) gke-flex-zonal-a2 <none> <none> job-2 0/1 Completed 0 19m 10.(...) gke-flex-zonal-a2 <none> <none>
クリーンアップ
このページで使用したリソースについて、 Cloud de Confiance by S3NS アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトを削除する
- In the Cloud de Confiance console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
個々のリソースを削除する
ジョブを削除します。
kubectl delete job -l "job-name in (job-1,job-2)"
ノードプールを削除します。
gcloud container node-pools delete NODE_POOL_NAME \ --location LOCATION_NAME
クラスタを削除します。
gcloud container clusters delete CLUSTER_NAME
次のステップ
- GKE での GPU の詳細を確認する。
- ノードの自動プロビジョニングの詳細を確認する。
- GKE でバッチ ワークロードを実行するためのベスト プラクティスの詳細を確認する。