Google Kubernetes Engine(GKE)Autopilot ワークロードでタスクを高速化するために GPU をリクエストできます。このドキュメントでは、Autopilot で GPU を実行する方法、Pod のリソース リクエストと上限を設定する方法、GPU ワークロードをモニタリングする方法について説明します。
このドキュメントは、ML トレーニングや推論などのタスクを実行するワークロード用に GPU をリクエストしたいと考えているプラットフォーム管理者や運用担当者、AI スペシャリストを対象としています。 Cloud de Confiance のコンテンツで参照する一般的なロール、責任、タスク例の詳細については、一般的な GKE ユーザーロールとタスクをご覧ください。
続行する前に、次のコンセプトをよく理解しておいてください。
GPU をリクエストするには、ComputeClass を使用するか、Pod 仕様でノードセレクタを使用します。GKE は、これらの Pod をこれらの GPU を持つノードに配置します。タイムシェアリングなどの GPU 共有機能も使用できます。
料金
Autopilot のノードベースの課金モデルは、GPU Pod に適用されます。ノードの Autopilot 管理プレミアムと Compute Engine の実際の GPU ハードウェアの両方が、コンピューティング フレキシブル確約利用割引(CUD)の対象となります。
Autopilot GPU の料金については次の点に注意してください。
- すべての A100(80 GB)GPU ノードで、GPU の数に基づいて固定サイズのノード ブートディスクのローカル SSD を使用します。接続されているローカル SSD に対して別途請求されます。この料金は、A100(40 GB)GPU には適用されません。
- GKE Sandbox の料金は、デフォルトの Autopilot の料金と同じです。アクセラレータ ワークロードのサンドボックス化について詳しくは、GKE Sandbox と GKE Sandbox のスタートガイドをご覧ください。
- Autopilot モードで NVIDIA RTX PRO 6000 GPU(G4 マシンシリーズ)を使用している場合、2026 年 10 月 1 日以降、GKE は基盤となるハードウェアの既存の適用可能な料金に加えて、Autopilot ノード管理プレミアムの料金を請求します。これらの既存の料金は、この日付の前と後の両方で引き続き適用されます。Autopilot ワークロードで特定のハードウェアをリクエストする場合の課金の仕組みについては、特定のハードウェアを選択する Autopilot ワークロードをご覧ください。
始める前に
作業を始める前に、次のタスクが完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API を有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化します。gcloud CLI をインストール済みの場合は、
gcloud components updateコマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。
次の GPU または機能を使用するには、次のいずれかのバージョンを実行している GKE Autopilot クラスタがあることを確認します。
- NVIDIA B200(180 GB)GPU: 1.32.2-gke.1422000 以降
- NVIDIA RTX PRO 6000 GPU:
- 1 つ以上の GPU を備えたマシンタイプ: 1.34.1-gke.1829001 以降
- GPU が 1 つ未満のマシンタイプ: 1.35.2-gke.1485000 以降
他のすべての GPU タイプは、利用可能なすべての GKE バージョンでサポートされています。
- プロジェクトで使用できる GPU 割り当てが十分にあることを確認します。各リージョンに作成する GPU モデルに十分な Compute Engine GPU 割り当てが必要です。追加の GPU 割り当てが必要な場合は、割り当ての調整をリクエストします。
1 つ未満の NVIDIA RTX PRO 6000 GPU を搭載した G4 マシンタイプを使用する場合は、前述のバージョン要件に加えて、次の操作を行う必要があります。
- GPU が 1 つ未満の G4 マシンタイプを明示的にリクエストします。
- クラスタで 1.36 より前の GKE バージョンが実行されている場合は、ワークロードを準備します。
制限事項
- 使用できる GPU は、Autopilot クラスタの Cloud de Confiance by S3NS リージョンと GPU の割り当てによって異なります。リージョンまたはゾーンで利用可能な GPU モデルを確認するには、利用できる GPU のリージョンとゾーンをご覧ください。
- NVIDIA A100(80 GB)GPU の場合、ノードにアタッチされたローカル SSD に対して、Pod がその容量を使用するかどうかにかかわらず、固定料金が発生します。
- 複数の GPU Pod を単一のノードに収めるには、それらの Pod の GPU リクエストの合計が、そのノードに接続されている GPU リソースの数「以下」である必要があります。たとえば、
gke-accelerator-countが 4 のノードには、それぞれ 1 つの GPU をリクエストする Pod を最大 4 つまで配置できます。
単一の GPU ノードに複数の Pod を配置すると、次のような場合に役立ちます。
- 大規模なアクセラレータ マシンタイプの容量を予約していて、単一 GPU のワークロードを実行している。このような場合、ノードごとに 1 つの Pod を展開すると、そのマシン上の他の GPU が無駄になってしまいます。
- 同じホストで実行する必要がある GPU ワークロードがある。
このような状況では、ノード上の Pod GPU リソース リクエストの合計が、ノードに接続されている GPU の数と等しくなるように、ノード上のすべての GPU を使用することをおすすめします。
コンテナで GPU をリクエストする
コンテナの GPU リソースをリクエストするには、次のフィールドを Pod 仕様に追加します。ワークロードの要件に応じて、必要に応じて cloud.google.com/gke-accelerator-count セレクタを省略できます。
apiVersion: v1
kind: Pod
metadata:
name: my-gpu-pod
spec:
# Optional: Use GKE Sandbox
# runtimeClassName: gvisor
nodeSelector:
cloud.google.com/gke-accelerator: GPU_TYPE
cloud.google.com/gke-accelerator-count: "GPU_COUNT"
containers:
- name: my-gpu-container
image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
command: ["/bin/bash", "-c", "--"]
args: ["while true; do sleep 600; done;"]
resources:
limits:
nvidia.com/gpu: GPU_QUANTITY
次のように置き換えます。
GPU_TYPE: GPU ハードウェアのタイプ。使用できる値は次のとおりです。nvidia-gb200: NVIDIA GB200(プレビュー)nvidia-b200: NVIDIA B200(180 GB)nvidia-h200-141gb: NVIDIA H200(141GB)nvidia-h100-mega-80gb: NVIDIA H100 Mega(80 GB)nvidia-h100-80gb: NVIDIA H100(80 GB)nvidia-a100-80gb: NVIDIA A100(80 GB)nvidia-tesla-a100: NVIDIA A100(40 GB)nvidia-rtx-pro-6000: NVIDIA RTX PRO 6000nvidia-l4: NVIDIA L4nvidia-tesla-t4: NVIDIA T4
nvidia-gb200: NVIDIA GB200(プレビュー)nvidia-b200: NVIDIA B200(180 GB)(プレビュー)nvidia-h200-141gb: NVIDIA H200(141 GB)(プレビュー)nvidia-h100-mega-80gb: NVIDIA H100 Mega(80 GB)nvidia-h100-80gb: NVIDIA H100(80 GB)nvidia-a100-80gb: NVIDIA A100(80 GB)nvidia-tesla-a100: NVIDIA A100(40 GB)nvidia-rtx-pro-6000: NVIDIA RTX PRO 6000(プレビュー)(GPU が 1 つ未満の G4 マシンタイプを除く)nvidia-l4: NVIDIA L4nvidia-tesla-t4: NVIDIA T4
GPU_COUNT: ノードに接続できる GPU の合計数。GPU_QUANTITYおよび選択した GPU タイプでサポートされている GPU 数以上にする必要があります。この nodeSelector を省略すると、Autopilot によって各 GPU ノードに 1 つの Pod が配置されます。GPU_QUANTITY: コンテナに割り当てる GPU の数。GPU_COUNTおよび選択した GPU タイプのサポートされている GPU 数以下にする必要があります。省略可能な
runtimeClassname: gvisor: この Pod を GKE Sandbox で実行できるようにする設定。使用する場合は、この行のコメント化を解除します。詳細については、GKE Sandbox をご覧ください。
Pod 仕様には、GPU タイプと GPU 数の両方を指定する必要があります。いずれかの値を省略すると、Autopilot によって Pod が拒否されます。
このマニフェストをデプロイすると、Autopilot によって、ノードの GKE バージョンに対応するデフォルトの NVIDIA ドライバが自動的にインストールされます。必要に応じて、マニフェストに次のノードセレクタを追加することで、その GKE バージョンの最新のドライバ バージョンをインストールすることを選択できます。
spec:
nodeSelector:
cloud.google.com/gke-gpu-driver-version: "DRIVER_VERSION"
DRIVER_VERSION は次のいずれかの値に置き換えます。
default- ノードの GKE バージョンに対応するデフォルトの安定版ドライバ。マニフェストで nodeSelector を省略した場合、これがデフォルトのオプションになります。latest- ノードの GKE バージョンに対応する最新のドライバ バージョン。
Autopilot GPU Pod の CPU とメモリをリクエストする
GPU Pod を定義するときは、コンテナが想定どおりに機能するように、CPU リソースとメモリリソースもリクエストする必要があります。Autopilot は、GPU のタイプと数量に基づいて特定の CPU とメモリの最小数、最大数、デフォルト数を適用します。1 つのノードで複数の GPU Pod を実行する場合は、CPU とメモリを指定します。指定しないと、デフォルトでノードの容量全体が使用されます。詳細については、Autopilot のリソース リクエストをご覧ください。
Pod の仕様は、次の例のようになります。この例では、4 つの T4 GPU をリクエストします。
apiVersion: v1
kind: Pod
metadata:
name: t4-pod
spec:
# Optional: Use GKE Sandbox
# runtimeClassName: gvisor
nodeSelector:
cloud.google.com/gke-accelerator: "nvidia-tesla-t4"
containers:
- name: t4-container-1
image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
command: ["/bin/bash", "-c", "--"]
args: ["while true; do sleep 600; done;"]
resources:
limits:
nvidia.com/gpu: 3
cpu: "54"
memory: "54Gi"
requests:
cpu: "54"
memory: "54Gi"
- name: t4-container-2
image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
command: ["/bin/bash", "-c", "--"]
args: ["while true; do sleep 600; done;"]
resources:
limits:
nvidia.com/gpu: 1
cpu: "18"
memory: "18Gi"
requests:
cpu: "18"
memory: "18Gi"
- 省略可能な
runtimeClassname: gvisor: この Pod を GKE Sandbox で実行できるようにする設定。使用する場合は、この行のコメント化を解除します。詳細については、GKE Sandbox をご覧ください。
このマニフェストでは、CPU リソースとメモリリソースに limits を指定しています。CPU またはメモリの limits を省略すると、GKE は Pod に Burstable QoS クラスを設定し、Pod がノードのリソース リクエストの合計数に応じて未使用のリソースを利用できるようにします。詳細については、GKE で Pod バースト機能を構成するをご覧ください。
Autopilot GPU Pod のエフェメラル ストレージをリクエストする
有効期間が短いストレージを必要とする Pod では、エフェメラル ストレージをリクエストすることもできます。使用可能なエフェメラル ストレージの最大量と使用されるストレージ ハードウェアのタイプは、Pod がリクエストする GPU のタイプと数量によって異なります。ローカル SSD は、次の構成でエフェメラル ストレージとして使用できます。
- NVIDIA RTX PRO 6000 GPU を使用し、始める前にセクションに記載されているバージョン要件を満たす GKE パッチ バージョンを実行します。8 分の 1 の GPU 分数構成では、エフェメラル ストレージはサポートされていません。
- NVIDIA L4 GPU を使用します。
エフェメラル ストレージにローカル SSD を使用するには、ワークロード マニフェストに cloud.google.com/gke-ephemeral-storage-local-ssd: "true" nodeSelector を追加します。ローカル SSD を使用するエフェメラル ストレージを Autopilot クラスタで使用するのマニフェストの例をご覧ください。NVIDIA H100(80 GB)GPU と NVIDIA A100(80 GB)GPU は、エフェメラル ストレージに常にローカル SSD を使用します。これらの GPU にこのノードセレクタを指定することはできません。
カスタム ComputeClass を使用して特定のマシンタイプをリクエストする
場合によっては、GPU ワークロードを特定のマシンタイプで実行する必要があります。たとえば、必要なマシンタイプが Autopilot クラスタのデフォルトのマシンタイプではない場合などです。カスタム ComputeClass を使用して特定のマシンを明示的にリクエストすることで、マシンタイプと GPU を指定するノード構成プロファイルを定義できます。GPU が 1 つ未満の G4 マシンタイプを使用するには、次のセクションの手順に沿って、マシンタイプを明示的にリクエストする必要があります。
ComputeClass の一般的な情報については、カスタム ComputeClass についてをご覧ください。
GPU ワークロードに対して特定のマシンタイプをリクエストする手順は次のとおりです。
カスタム ComputeClass のマニフェストを作成します。この例では、次を
a3-computeclass.yamlとして保存します。apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: a3-edge-gpu spec: priorities: - machineType: a3-edgegpu-8g-nolssd gpu: count: 8 type: nvidia-h100-80gb nodePoolAutoCreation: enabled: trueこのマニフェストの内容:
metadata.nameは、Pod 仕様で参照するカスタム ComputeClass の名前です。machineTypeは、プロビジョニングする特定のマシンです。gpuフィールドには、そのマシンにアタッチされている GPU のタイプと数を指定します。これらのフィールドの値は、指定されたmachineTypeの機能と一致している必要があります。
次のコマンドを実行してマニフェストを適用します。
kubectl apply -f a3-computeclass.yamlPod マニフェストで、
cloud.google.com/compute-classノードセレクタを使用して ComputeClass をリクエストします。apiVersion: v1 kind: Pod metadata: name: gpu-cc-pod spec: nodeSelector: cloud.google.com/compute-class: a3-edge-gpu containers: - name: my-gpu-container image: nvidia/cuda:latest command: ["/bin/bash", "-c", "--"] args: ["while true; do sleep 600; done;"] resources: limits: nvidia.com/gpu: 1GKE は、
a3-edge-gpuComputeClass の定義に一致する新しいノードをプロビジョニングして、Pod を実行します。
GPU が 1 つ未満の G4 マシンタイプをリクエストする
G4 マシンタイプは NVIDIA RTX PRO 6000 GPU を使用します。GPU が 1 つ未満の G4 マシンタイプをリクエストするには、前のセクションの手順に沿って、次のフィールドを設定する必要があります。
machineTypeを次のいずれかの値に設定します。g4-standard-6(GPU の 8 分の 1)g4-standard-12(GPU の 4 分の 1)g4-standard-24(GPU の半分)
gpu.count:1gpu.type:nvidia-rtx-pro-6000
デプロイされた GPU の割り当てを確認する
デプロイされた GPU ワークロードにリクエストされた GPU があることを確認するには、次のコマンドを実行します。
kubectl describe node NODE_NAME
NODE_NAME は、Pod がスケジュールされたノードの名前に置き換えます。
出力は次のようになります。
apiVersion: v1
kind: Node
metadata:
...
labels:
...
cloud.google.com/gke-accelerator: nvidia-tesla-t4
cloud.google.com/gke-accelerator-count: "1"
cloud.google.com/machine-family: custom-48
...
...
GPU ドライバのバージョンを確認する
Autopilot クラスタでは、GKE がすべての GPU ノードに NVIDIA デバイス ドライバを自動的にインストールします。GKE がクラスタにインストールしたドライバのバージョンを確認するには、次のコマンドを実行します。
kubectl logs --selector=k8s-app=nvidia-gpu-device-plugin \
--container="nvidia-gpu-device-plugin" \
--tail=-1 \
--namespace=kube-system | grep Driver
出力は次のようになります。
I1206 18:37:08.251742 5851 metrics.go:144] nvml initialized successfully. Driver version: 535.104.12
Autopilot での GPU 割り当ての仕組み
Pod 内のコンテナの GPU タイプと数量をリクエストして Pod をデプロイすると、次のようになります。
- 割り当て可能な GPU ノードが存在しない場合、Autopilot は、新しい GPU ノードをプロビジョニングしてその Pod をスケジュールします。Autopilot は、ハードウェアを利用するために NVIDIA ドライバを自動的にインストールします。
- Autopilot は、GPU ノードに Node Taints を追加し、それに対応する toleration を Pod に追加します。このため、GKE は GPU ノードで他の Pod をスケジュールできなくなります。
Autopilot は、各 GPU ノードに 1 つの GPU Pod、すべてのノードで実行される GKE マネージド ワークロード、すべての Node Taints を許容するように構成された DaemonSet を配置します。
すべてのノードで DaemonSet を実行する
taint が適用されたノードでも、すべてのノードで DaemonSet の実行が必要になる場合があります。たとえば、一部のロギング エージェントとモニタリング エージェントはクラスタ内のすべてのノードで実行する必要があります。GKE がワークロードをすべてのノードに配置できるように、Node Taints を無視するように DaemonSet を構成することもできます。
クラスタ内のすべてのノード(GPU ノードを含む)で DaemonSet を実行するには、次の toleration を仕様に追加します。
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: logging-agent
spec:
tolerations:
- key: ""
operator: "Exists"
effect: ""
containers:
- name: logging-agent-v1
image: IMAGE_PATH
IMAGE_PATH は、コンテナ イメージのパスに置き換えます。
クラスタ内の特定の GPU ノードで DaemonSet を実行するには、次のものを仕様に追加します。
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: logging-agent
spec:
nodeSelector:
cloud.google.com/gke-accelerator: "GPU_TYPE"
tolerations:
- key: ""
operator: "Exists"
effect: ""
containers:
- name: logging-agent-v1
image: IMAGE_PATH
GPU_TYPE は、ターゲット ノードの GPU のタイプに置き換えます。次のいずれかになります。
nvidia-gb200: NVIDIA GB200(プレビュー)nvidia-b200: NVIDIA B200(180 GB)nvidia-h200-141gb: NVIDIA H200(141GB)nvidia-h100-mega-80gb: NVIDIA H100 Mega(80 GB)nvidia-h100-80gb: NVIDIA H100(80 GB)nvidia-a100-80gb: NVIDIA A100(80 GB)nvidia-tesla-a100: NVIDIA A100(40 GB)nvidia-rtx-pro-6000: NVIDIA RTX PRO 6000nvidia-l4: NVIDIA L4nvidia-tesla-t4: NVIDIA T4
nvidia-gb200: NVIDIA GB200(プレビュー)nvidia-b200: NVIDIA B200(180 GB)(プレビュー)nvidia-h200-141gb: NVIDIA H200(141 GB)(プレビュー)nvidia-h100-mega-80gb: NVIDIA H100 Mega(80 GB)nvidia-h100-80gb: NVIDIA H100(80 GB)nvidia-a100-80gb: NVIDIA A100(80 GB)nvidia-tesla-a100: NVIDIA A100(40 GB)nvidia-rtx-pro-6000: NVIDIA RTX PRO 6000(プレビュー)(GPU が 1 つ未満の G4 マシンタイプを除く)nvidia-l4: NVIDIA L4nvidia-tesla-t4: NVIDIA T4
Autopilot での GPU のユースケース
Autopilot Pod のコンテナに GPU を割り当てることで、次のようなワークロードが利用できるようになります。
- 機械学習(ML)推論
- ML トレーニング
- レンダリング
サポートされている GPU 数
Pod 仕様で GPU をリクエストする場合は、GPU のタイプに基づいて次の数量を使用する必要があります。そのタイプでサポートされていない GPU 数をリクエストすると、Autopilot によって Pod が拒否されます。
| GPU の数 | |
|---|---|
NVIDIA B200(180 GB)nvidia-b200 |
8 |
NVIDIA H200(141 GB)nvidia-h200-141gb |
8 |
NVIDIA H100 Mega(80 GB)nvidia-h100-mega-80gb |
8 |
NVIDIA H100(80GB)nvidia-h100-80gb |
1、2、4、8 |
NVIDIA A100(80GB)nvidia-a100-80gb |
1、2、4、8 |
NVIDIA A100(40GB)nvidia-tesla-a100 |
1、2、4、8、16 |
NVIDIA RTX PRO 6000nvidia-rtx-pro-6000 |
1/8、1/4、1/2、1、2、4、8 |
NVIDIA L4nvidia-l4 |
1、2、4、8 |
NVIDIA T4nvidia-tesla-t4 |
1、2、4 |
GPU ノード ワークロードのパフォーマンスをモニタリングする
GKE クラスタでシステム指標が有効になっている場合、Cloud Monitoring で次の指標を使用して GPU ワークロードのパフォーマンスをモニタリングできます。
-
デューティ サイクル(
container/accelerator/duty_cycle): 過去のサンプル期間(10 秒)に対する、アクセラレータがアクティブに処理していた時間の割合。 1~100 までの間。 -
メモリ使用量(
container/accelerator/memory_used): 割り振られたアクセラレータ メモリの量(バイト単位)。 -
メモリ容量(
container/accelerator/memory_total): アクセラレータの総メモリ(バイト単位)。
これらの指標はコンテナレベル(container/accelerator)で適用され、GPU タイム シェアリングまたは NVIDIA MPS を使用する GPU でスケジュールされたコンテナに対しては収集されません。
事前定義されたダッシュボードを使用して、GPU ノードを使用するクラスタをモニタリングできます。詳細については、オブザーバビリティ指標を表示するをご覧ください。 クラスタとそのリソースのモニタリングに関する一般的な情報については、GKE のオブザーバビリティをご覧ください。
ワークロードの使用状況の指標を表示する
ワークロードの GPU 使用状況の指標は、 Cloud de Confiance コンソールの [ワークロード] ダッシュボードで表示できます。
ワークロードの GPU 使用状況を表示するには、以下の手順に沿って操作します。
-
Cloud de Confiance コンソールの [ワークロード] ページに移動します。
[ワークロード] に移動 - ワークロードを選択します。
[ワークロード] ダッシュボードに、GPU メモリの使用量と容量、GPU デューティ サイクルのチャートが表示されます。
NVIDIA Data Center GPU Manager(DCGM)の指標を表示する
Google Cloud Managed Service for Prometheus を使用すると、NVIDIA DCGM 指標を収集して可視化できます。Autopilot クラスタの場合、GKE によってドライバがインストールされます。Standard クラスタの場合は、NVIDIA ドライバをインストールする必要があります。
GKE で管理されている DCGM パッケージをデプロイする方法については、NVIDIA Data Center GPU Manager(DCGM)の指標の収集と表示をご覧ください。
GPU ワークロードの JobSet とノードの健全性指標
DCGM 指標に加えて、次の指標を使用して、GPU ワークロードの健全性とパフォーマンスをモニタリングできます。特に、JobSet として実行している場合は、これらの指標を使用します。
JobSet 指標
次の指標は、レプリケートされた Job が 1 つだけある GPU と TPU の両方の JobSet に適用されます。
kubernetes.io/jobset/times_between_interruptionskubernetes.io/jobset/times_to_recoverkubernetes.io/jobset/uptime
これらのシステム指標の詳細については、Kubernetes の指標をご覧ください。
Cloud de Confiance コンソールの JobSet ダッシュボードを使用して、GPU ワークロードを可視化してモニタリングすることもできます。
ノードの健全性指標
次のノードレベルの指標は、GPU を搭載したノードを含むすべてのノードに適用されます。
-
kubernetes.io/node/status_condition: この指標には、GKE バージョン 1.32.1-gke.1357001 以降が必要です。
ノードの中断とノードプールの中断の指標は、TPU 以外のノードにも適用されます。
JobSet の kube-state-metrics
JobSet の kube-state-metrics は GPU で使用できます。これらの指標を収集するには、GKE バージョン 1.32.1-gke.1357001 以降が必要です。詳細については、JobSet の指標に関するドキュメントをご覧ください。
次のステップ
- GKE での GPU サポートの詳細を確認する。
- 特殊なユースケースに合わせて Autopilot ComputeClass を最適化する方法を確認する。
- Dynamic Workload Scheduler を使用してバッチ ワークロード用の GPU をデプロイする方法を確認する。
- GKE Sandbox での GPU ワークロードのサンドボックス化について学習する