このページでは、Google Kubernetes Engine(GKE)Standard クラスタのノードに NVIDIA® 画像処理装置(GPU)ハードウェア アクセラレータを接続して使用することで、人工知能(AI)や画像処理などのコンピューティング負荷の高いワークロードを実行し、最適化する方法について説明します。
Autopilot Pod を使用している場合は、Autopilot に GPU ワークロードをデプロイするをご覧ください。
概要
GKE では、GPU を搭載したノードプールを作成できます。GPU は、画像認識や自然言語処理のほか、動画のコード変換や画像処理などの多くのコンピューティング処理を必要とするタスクなど、ディープ ラーニング タスクを稼働させるための計算能力を提供します。GKE Standard モードでは、GPU ハードウェアをクラスタ内のノードに接続し、それらのノード上で実行されているコンテナ化されたワークロードに GPU リソースを割り当てることができます。
GPU のユースケースについて詳しくは、Google Cloud の GPU に関するページをご覧ください。GKE での GPU の詳細とモードの違い(Standard と Autopilot)については、GKE での GPU についてをご覧ください。
ワークロードが頻繁なノード中断を許容できるのであれば、GPU を Spot VMで使用することもできます。Spot VM を使用することで、GPU 実行時の料金を下げることができます。詳細については、GPU ノードプールで Spot VM を使用するをご覧ください。
バージョン 1.29.2-gke.1108000 以降では、GKE Sandbox に GPU ノードプールを作成できるようになりました。詳細については、GKE Sandbox および GKE Sandbox の構成をご覧ください。
始める前に
始める前に、次の作業が完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
GKE での GPU の要件
GKE 上の GPU には、以下の要件があります。
Kubernetes バージョン: 使用可能なバージョンは、GPU が使用するノードイメージによって異なります。
- Container-Optimized OS: GKE バージョン 1.9 以降。
- Ubuntu: GKE バージョン 1.11.3 以降。
GPU の割り当て: GPU ノードを作成する前に、選択したゾーンに Compute Engine GPU の割り当てが必要です。プロジェクトに十分な GPU 割り当てがあるか確認するには、Google Cloud コンソールで割り当てをご覧ください。
追加の GPU 割り当てが必要な場合は、Google Cloud コンソールで GPU 割り当てをリクエストする必要があります。請求先アカウントが設定されている場合、割り当てリクエストを送信すると、プロジェクトに自動的に割り当てが付与されます。
デフォルトでは、無料トライアル アカウントに GPU 割り当ては設定されません。
NVIDIA GPU ドライバ: クラスタまたはノードプールの作成時に、GKE のバージョンに基づいたバージョンのドライバを自動的にインストールするよう GKE に指示できます。GPU ドライバを自動的にインストールするよう GKE に指示しない場合は、ドライバを手動でインストールする必要があります。
A100 GPU: A100 GPU は a2 マシンタイプでのみサポートされます。基盤となる A2 マシンタイプに A100 GPU を使用するための十分な割り当てがあることを確認する必要があります。
Ubuntu ノード上の GPU: Ubuntu ノードで GPU を使用する場合は、次のドライバ要件が適用されます。
L4 GPU と H100 GPU: NVIDIA ドライバ バージョン 535 以降。
必要なバージョン以降のドライバ バージョンが GKE バージョンのデフォルト バージョンでない場合は、サポートされているドライバをノードに手動でインストールする必要があります。
GPU ノードに Container-Optimized OS を使用します。Container-Optimized OS には、GPU ノードの特定の GKE バージョンをサポートするために必要なドライバが含まれています。
GKE での GPU の使用の制限事項
GPU を GKE で使用する前に、以下の制限事項に留意してください。
- 既存のノードプールに GPU を追加することはできません。
- メンテナンス イベント中に GPU ノードをライブ マイグレーションすることはできません。
使用可能な GPU タイプは、次のようにマシンシリーズによって異なります。
- A3 マシンシリーズ: H100 GPU。
- A2 マシンシリーズ: A100 GPU。
- G2 マシンシリーズ: L4 GPU。
- N1 マシンシリーズ: A100 と L4 を除くすべての GPU。
選択した GPU タイプと数量に対応するマシンシリーズのプロジェクトに十分な割り当てがあることを確認する必要があります。
GPU は Windows Server ノードプールではサポートされていません。
バージョン 1.28.2-gke.1098000 以前を実行している GKE Standard クラスタでは、L4 GPU を使用したノードプールの作成でノード自動プロビジョニングがサポートされていません。ただし、以前のバージョンを実行しているクラスタでは、既存のノードプールのクラスタ オートスケーラー スケーリングがサポートされています。
H100 GPU を使用していて、Pod でローカル SSD を使用する場合は、基盤となる A3 VM にアタッチするローカル SSD の正確な数を明示的に指定する必要があります。エフェメラル ストレージの場合は
--ephemeral-storage-local-ssd=count=SSD_COUNT
フラグ、ブロック アクセスの場合は--local-nvme-ssd-block=count=SSD_COUNT
フラグを使用して、この数を指定します。これらのフラグのいずれかを追加しないと、Pod でローカル SSD を使用できなくなります。GKE でサポートされているマシンサイズは
a3-highgpu-8g
で、対応するローカル SSD の数は16
です。
リージョンごととゾーンごとの GPU の可用性
GPU は特定のリージョンとゾーンで利用できます。GPU 割り当てをリクエストするときは、クラスタを実行するリージョンについて考慮してください。
適用可能なリージョンとゾーンの完全なリストについては、Compute Engine の GPU に関する記事をご覧ください。
Google Cloud CLI を使用して、ゾーンで利用可能な GPU を確認することもできます。各ゾーンでサポートされているすべての GPU アクセラレータ タイプのリストを表示するには、次のコマンドを実行します。
gcloud compute accelerator-types list
料金
GPU の料金情報については、Google Cloud GPU ページの料金表をご覧ください。
GPU の割り当てが十分であることを確認する
GPU 割り当てとは、Google Cloud プロジェクトで実行できる GPU の合計数です。GPU を搭載したクラスタを作成するには、プロジェクトに十分な GPU 割り当てが必要です。
GPU 割り当ては、クラスタで実行する GPU の総数以上である必要があります。クラスタの自動スケーリングを有効にする場合は、ノードあたりの GPU 数にクラスタの最大ノード数を掛けた数以上の GPU 割り当てをリクエストする必要があります。
たとえば、3 つのノードを持つクラスタを作成してノードごとに 2 つの GPU を実行する場合、少なくとも 6 つの GPU 割り当てがプロジェクトに必要です。
GPU 割り当てのリクエスト
GPU 割り当てをリクエストするには、Google Cloud コンソールを使用します。割り当てのリクエストの詳細については、Compute Engine ドキュメントの GPU 割り当てをご覧ください。
GPU 割り当てを検索して割り当てリクエストを送信するには、Google Cloud コンソールを使用します。
Google Cloud コンソールの [IAM と管理] ページに移動します。
[フィルタ] ボックスで次の操作を行います。
- [割り当て] プロパティを選択し、GPU モデルの名前を入力して、Enter を押します。
- (省略可)高度なフィルタを適用して結果を絞り込むには、[ディメンション] プロパティを選択し(例: ロケーション)、使用しているリージョンまたはゾーンの名前を追加して、Enter を押します。
GPU 割り当てのリストから、変更する割り当てを選択します。
[割り当てを編集] をクリックします。リクエスト フォームが開きます。
各割り当てリクエストの [新しい割り当て上限] フィールドを入力します。
[リクエストの説明] フィールドに、リクエストの詳細を入力します。
[次へ] をクリックします。
[オーバーライドの確認] ダイアログで [確認] をクリックします。
[連絡先の詳細] 画面で、承認者が割り当て変更リクエストを完了するために使用できる名前と電話番号を入力します。
[リクエストを送信] をクリックします。
割り当ての変更を追跡するための確認メールが届きます。
GKE Standard クラスタでの GPU の実行
GKE Standard クラスタで GPU を実行するには、GPU が割り当てられたノードプールを作成します。
GKE で GPU の費用対効果、信頼性、可用性を高めるには、次の操作を行います。
- 個別の GPU ノードプールを作成します。ノードプールごとに、ノードのロケーションを必要な GPU を使用できるゾーンに制限します。
- 各ノードプールで自動スケーリングを有効にします。
- リージョン クラスタを使用して、リージョン内のゾーン間で Kubernetes コントロール プレーンをレプリケートすることで可用性を向上させます。
- ドライバのバージョンを手動でインストールして管理しなくても済むように、ノードプールにデフォルトまたは最新の GPU ドライバを自動的にインストールするように GKE を構成します。
以降のセクションで説明するように、GKE はノード taint と許容を使用して、Pod が不適切なノードにスケジュールされないようにします。
GPU ノードプールを自動的に taint して、不適切なスケジューリングを回避する
ノード taint を使用してノードをマークすると、スケジューラは特定の Pod でそのノードの使用を回避または禁止します。すでに非 GPU ノードプールを実行している既存のクラスタに GPU ノードプールを追加すると、GKE が自動的に次のノード taint を使用して GPU ノードを taint します。
- キー:
nvidia.com/gpu
- 効果:
NoSchedule
GKE は、クラスタ内に非 GPU ノードプールがある場合にのみ、この taint を追加します。既存のすべてのノードプールが GPU ノードプールであるクラスタに GPU ノードプールを追加する場合、またはデフォルトのノードプールに GPU がアタッチされた新しいクラスタを作成する場合、上記の taint は GPU ノードに追加されません。
今後クラスタに非 GPU ノードプールを追加しても、GKE はこの taint を既存の GPU ノードに遡って適用することはありません。
toleration によるスケジュール設定の自動制限
tolerations を使用すると、「taint」としてマークされたノードで使用できる Pod を指定できます。GKE は自動的に toleration を適用するため、GPU をリクエストする Pod のみが GPU ノードでスケジュールされます。これにより、GPU をリクエストしている Pod が不足している場合に GPU ノードを簡単にスケールダウンできるため、より効率的な自動スケーリングが可能になります。そのために、GKE は ExtendedResourceToleration アドミッション コントローラを実行します。
GPU ノードプールを作成する
既存のクラスタに個別の GPU ノードプールを作成するには、Google Cloud コンソールまたは Google Cloud CLI を使用します。Terraform を使用して GKE クラスタと GPU ノードプールをプロビジョニングすることもできます。
GKE コントロール プレーン バージョン 1.30.1-gke.1156000 以降では、GKE ノード バージョンのデフォルトの NVIDIA ドライバ バージョンが自動的にインストールされます。必要に応じて、利用可能な最新のドライバ バージョンを選択するか、ドライバの自動インストールを明示的に無効にできます。1.30.1-gke.1156000 より前のバージョンでは、ノードプールの作成または更新時にドライバ バージョンを指定しない場合、デフォルトではドライバがインストールされません。
gcloud
GPU を搭載したノードプールをクラスタ内に作成するには、次のコマンドを実行します。
gcloud container node-pools create POOL_NAME \
--accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=DRIVER_VERSION \
--machine-type MACHINE_TYPE \
--region COMPUTE_REGION --cluster CLUSTER_NAME \
--node-locations COMPUTE_ZONE1[,COMPUTE_ZONE2] \
[--enable-autoscaling \
--min-nodes MIN_NODES \
--max-nodes MAX_NODES] \
[--ephemeral-storage-local-ssd=count=SSD_COUNT]
次のように置き換えます。
POOL_NAME
: ノードプールに付ける名前。GPU_TYPE
: 使用する GPU アクセラレータのタイプ。例:nvidia-tesla-t4
。DRIVER_VERSION
: インストールする NVIDIA ドライバのバージョン。次のいずれかになります。default
: ノードの GKE バージョンのデフォルト ドライバ バージョンをインストールします。GKE バージョン 1.30.1-gke.1156000 以降では、gpu-driver-version
フラグを省略すると、これがデフォルトのオプションになります。以前のバージョンでは、このフラグを省略すると、GKE はドライバをインストールしません。latest
: お使いの GKE バージョン向けの最新のドライバ バージョンをインストールします。Container-Optimized OS を使用するノードでのみ使用できます。disabled
: ドライバの自動インストールをスキップします。ノードプールを作成した後に、手動でドライバをインストールする必要があります。1.30.1-gke.1156000 より前の GKE バージョンでは、これがデフォルトのオプションです。
gpu-driver-version
オプションは、GKE バージョン 1.27.2-gke.1200 以降に限り使用できます。それより前のバージョンでは、このフラグを省略して、ノードプールの作成後に手動でドライバをインストールします。既存のクラスタまたはノードプールをこのバージョン以降にアップグレードすると、アップグレードを開始する際に別のバージョンを指定した場合を除き、GKE バージョンに対応するデフォルトのドライバ バージョンが自動的にインストールされます。AMOUNT
: ノードプール内のノードに割り当てる GPU の数。MACHINE_TYPE
: ノードの Compute Engine マシンタイプ。次の GPU タイプの場合は必須です。- NVIDIA H100 80 GB GPU(
nvidia-h100-80gb
アクセラレータ タイプと A3 High マシンタイプに対応)または NVIDIA H100 80 GB Mega GPU(nvidia-h100-mega-80gb
アクセラレータ タイプと A3 Mega マシンタイプに対応)。詳細については、Compute Engine ドキュメントの A3 マシンシリーズをご覧ください。 - NVIDIA A100 40 GB GPU(
nvidia-tesla-a100
アクセラレータ タイプと A2 Standard マシンタイプに対応)または NVIDIA A100 80 GB GPU(nvidia-a100-80gb
アクセラレータ タイプと A2 Ultra マシンタイプに対応)。詳細については、Compute Engine ドキュメントの A2 マシンシリーズをご覧ください。 - NVIDIA L4 GPU(
nvidia-l4
アクセラレータ タイプと G2 マシンシリーズに対応)。
その他の GPU の場合、このフラグは省略可能です。
- NVIDIA H100 80 GB GPU(
COMPUTE_REGION
: クラスタの Compute Engine リージョン(us-central1
など)。リクエストされた GPU を使用できるゾーンが 1 つ以上あるリージョンを選択します。CLUSTER_NAME
: ノードプールを作成するクラスタの名前。COMPUTE_ZONE1,COMPUTE_ZONE2,[...]
: GKE が GPU ノードを作成する特定のゾーン。ゾーンは、--region
フラグで指定したクラスタと同じリージョンに存在する必要があります。定義する GPU タイプは、選択した各ゾーンで使用可能である必要があります。ノードプールを作成するときに、常に--node-locations
フラグを使用して、リクエストされた GPU を含むゾーンを指定することをおすすめします。MIN_NODES
: 任意の時点でのノードプール内の各ゾーンの最小ノード数。この値は、--enable-autoscaling
フラグが使用されている場合にのみ関連します。MAX_NODES
: 任意の時点でのノードプール内の各ゾーンの最大ノード数。この値は、--enable-autoscaling
フラグが使用されている場合にのみ関連します。SSD_COUNT
: エフェメラル ストレージに接続するローカル SSD の数。このフラグは、H100 GPU を搭載した A3 マシンタイプでローカル SSD を使用する場合に必要です。
たとえば、次のコマンドを実行すると、リージョン クラスタ p100-cluster
内に、ノードごとに 2 つの P100 GPU を持つ高可用性自動スケーリング ノードプール p100
が作成されます。GKE は、これらのノードにデフォルトのドライバを自動的にインストールします。
gcloud container node-pools create p100 \
--accelerator type=nvidia-tesla-p100,count=2,gpu-driver-version=default \
--region us-central1 --cluster p100-cluster \
--node-locations us-central1-c \
--min-nodes 0 --max-nodes 5 --enable-autoscaling
コンソール
GPU を使用するノードプールを作成するには、以下の手順に沿って操作します。
Google Cloud コンソールで Google Kubernetes Engine のページに移動します。
クラスタのリストで、変更するクラスタの名前をクリックします。
[add_box ノードプールを追加] をクリックします。
必要に応じて、[ノードプールの詳細] ページで [自動スケーリングを有効にする] チェックボックスをオンにします。
必要に応じてノードプールを構成します。
ナビゲーション パネルで [ノード] を選択します。
[マシンの構成] で [GPU] をクリックします。
各ノードで実行する [GPU のタイプ] と [GPU の数] を選択します。
警告を読み、[制限について理解しています] をオンにします。
[GPU Driver installation] セクションで、次のいずれかの方法を選択します。
- Google が管理: GKE はドライバを自動的にインストールします。このオプションを選択した場合は、[バージョン] プルダウンから次のいずれかを選択します。
- デフォルト: デフォルトのドライバ バージョンをインストールします。
- 最新: 使用可能な最新のドライバ バージョンをインストールします。
- お客様が管理: GKE はドライバをインストールしません。NVIDIA GPU デバイス ドライバのインストールの手順に沿って、互換性のあるドライバを手動でインストールする必要があります。
- Google が管理: GKE はドライバを自動的にインストールします。このオプションを選択した場合は、[バージョン] プルダウンから次のいずれかを選択します。
[作成] をクリックします。
Terraform
GPU を搭載した Terraform でリージョン クラスタを作成するには、Terraform モジュールを使用します。
variables.tf
ファイルに次のブロックを追加して、Terraform 変数を設定します。variable "project_id" { default = PROJECT_ID description = "the gcp_name_short project where GKE creates the cluster" } variable "region" { default = CLUSTER_REGION description = "the gcp_name_short region where GKE creates the cluster" } variable "zone" { default = "COMPUTE_ZONE1,COMPUTE_ZONE2" description = "the GPU nodes zone" } variable "cluster_name" { default = "CLUSTER_NAME" description = "the name of the cluster" } variable "gpu_type" { default = "GPU_TYPE" description = "the GPU accelerator type" } variable "gpu_driver_version" { default = "DRIVER_VERSION" description = "the NVIDIA driver version to install" } variable "machine_type" { default = "MACHINE_TYPE" description = "The Compute Engine machine type for the VM" }
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。CLUSTER_NAME
: GKE クラスタの名前。CLUSTER_REGION
: クラスタの Compute Engine のリージョン。COMPUTE_ZONE1,COMPUTE_ZONE2,[...]
: GKE が GPU ノードを作成する特定のゾーン。これらのゾーンは、region
変数で指定したのと同じリージョンに存在する必要があります。これらのゾーンには、利用可能な GPU タイプが定義されている必要があります。どのゾーンに GPU があるか調べるには、対象をご覧ください。GPU ノードプールを作成するときに、node_locations
変数を使用して、リクエストされた GPU を含むゾーン(1 つまたは複数)を指定する必要があります。GPU_TYPE
: 使用する GPU アクセラレータのタイプ。例:nvidia-tesla-t4
。DRIVER_VERSION
: GKE が自動的にインストールする GPU ドライバのバージョン。このフィールドは省略可能です。次の値を使用できます。INSTALLATION_DISABLED
: GPU ドライバの自動インストールを無効にします。GPU を実行するには、ドライバを手動でインストールする必要があります。1.30.1-gke.1156000 より前の GKE バージョンでは、このフィールドを省略した場合、これがデフォルトのオプションになります。DEFAULT
: ノードのオペレーティング システムのバージョンに対応するデフォルトのドライバ バージョンを自動的にインストールします。GKE バージョン 1.30.1-gke.1156000 以降では、このフィールドを省略すると、これがデフォルトのオプションになります。以前のバージョンでは、このフィールドを省略すると、GKE はドライバをインストールしません。LATEST
: ノードの OS バージョンで利用可能な最新のドライバ バージョンを自動的にインストールします。Container-Optimized OS を使用するノードでのみ指定できます。
このフィールドを省略すると、GKE によるドライバの自動インストールが行われません。このフィールドは、ノードの自動プロビジョニングを使用するノードプールではサポートされていません。ドライバを手動でインストールするには、このドキュメントの NVIDIA GPU ドライバを手動でインストールするをご覧ください。
MACHINE_TYPE
: ノードの Compute Engine マシンタイプ。次の GPU タイプの場合は必須です。- NVIDIA H100 80 GB GPU(
nvidia-h100-80gb
アクセラレータ タイプと A3 High マシンタイプに対応)または NVIDIA H100 80 GB Mega GPU(nvidia-h100-mega-80gb
アクセラレータ タイプと A3 Mega マシンタイプに対応)。詳細については、Compute Engine ドキュメントの A3 マシンシリーズをご覧ください。 - NVIDIA A100 40 GB GPU(
nvidia-tesla-a100
アクセラレータ タイプと A2 Standard マシンタイプに対応)または NVIDIA A100 80 GB GPU(nvidia-a100-80gb
アクセラレータ タイプと A2 Ultra マシンタイプに対応)。詳細については、Compute Engine ドキュメントの A2 マシンシリーズをご覧ください。 - NVIDIA L4 GPU(
nvidia-l4
アクセラレータ タイプと G2 マシンシリーズに対応)。
その他の GPU の場合、このフラグは省略可能です。
- NVIDIA H100 80 GB GPU(
Terraform 構成に次のブロックを追加します。
provider "google" { project = var.project_id region = var.region } resource "google_container_cluster" "ml_cluster" { name = var.cluster_name location = var.region node_locations = [var.zone] } resource "google_container_node_pool" "gpu_pool" { name = google_container_cluster.ml_cluster.name location = var.region cluster = google_container_cluster.ml_cluster.name node_count = 3 autoscaling { total_min_node_count = "1" total_max_node_count = "5" } management { auto_repair = "true" auto_upgrade = "true" } node_config { oauth_scopes = [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", "https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/trace.append", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", ] labels = { env = var.project_id } guest_accelerator { type = var.gpu_type count = 1 gpu_driver_installation_config { gpu_driver_version = var.gpu_driver_version } } image_type = "cos_containerd" machine_type = var.machine_type tags = ["gke-node", "${var.project_id}-gke"] disk_size_gb = "30" disk_type = "pd-standard" metadata = { disable-legacy-endpoints = "true" } } }
Terraform が Google Cloud APIs を呼び出して、GPU を使用するノードプールで新しいクラスタを作成します。ノードプールには最初に 3 つのノードがあり、自動スケーリングが有効になっています。Terraform の詳細については、terraform.io の google_container_node_pool
リソースの仕様をご覧ください。
追加費用が発生しないように、terraform destroy
コマンドを使用して、構成ファイルで定義されているすべてのリソースを削除します。
ベスト プラクティス: GPU が割り当てられた新しいクラスタを作成し、--node-locations
フラグを使用してゾーンを指定することもできます。ただし、このセクションに示すように、既存のクラスタに別の GPU ノードプールを作成することをおすすめします。
NVIDIA GPU ドライバを手動でインストールする
インストール DaemonSet をノードにデプロイすることで、ノードに NVIDIA GPU ドライバを手動でインストールできます。次の状況では、手動インストールを使用します。
- GPU ノードプールの作成時にデバイス ドライバの自動インストールを無効にした場合。
- 自動インストールがサポートされている最小バージョンよりも前の GKE バージョンを使用している場合。
- ワークロードに、自動インストールでデフォルトまたは最新のドライバとして使用できない特定の NVIDIA ドライバ バージョンが必要な場合。
可能な限り、ドライバの自動インストールを使用します。これを行うには、Standard クラスタの作成時に --accelerator
フラグで gpu-driver-version
オプションを指定します。2023 年 1 月 25 日以前にインストール用の DaemonSet を使用して GPU ドライバを手動でインストールした場合は、DaemonSet を再適用して、ドライバの自動インストールを使用するノードを無視するバージョンを取得する必要があります。
インストール用の DaemonSet を実行するには、GPU ノードプールが Cloud Storage と通信するための https://www.googleapis.com/auth/devstorage.read_only
スコープを必要とします。このスコープがないと、インストール用の DaemonSet マニフェストのダウンロードは失敗します。このスコープはデフォルトのスコープの一つであり、通常はクラスタの作成時に追加されます。
次の手順では、Container-Optimized OS(COS)ノードと Ubuntu ノードにドライバをインストールし、Terraform を使用する方法について説明します。
COS
インストール用の DaemonSet をデプロイして、デフォルトの GPU ドライバのバージョンをインストールするには、次のコマンドを実行します。
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
代わりに、より新しいバージョンの GPU ドライバ(下の表を参照)をインストールするには、次のコマンドを実行します。
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded-latest.yaml
インストールには数秒かかります。インストールが完了すると、NVIDIA GPU デバイス プラグインは Kubernetes API を使用して NVIDIA GPU の容量を利用可能にします。
Container-Optimized OS イメージの各バージョンには、サポートされている NVIDIA GPU ドライバのバージョンが少なくとも 1 つあります。デフォルトでサポートされているバージョンについては、主要な Container-Optimized OS LTS マイルストーンのリリースノートをご覧ください。
次の表に、各 GKE バージョンで利用可能なドライバ バージョンを示します。
GKE NVIDIA ドライバのバージョン | ||
---|---|---|
1.30 | R535(デフォルト)または R550 | |
1.29 | R535(デフォルト)または R550 | |
1.28 | R535(デフォルト)または R550 | |
1.27 | R470(デフォルト)、R525、R535、または R550 | |
1.26 | R470(デフォルト)、R525、R535、または R550 |
Ubuntu
デプロイするインストール DaemonSet は、次のように GPU タイプと GKE ノード バージョンによって異なります。
NVIDIA L4 GPU と NVIDIA H100 GPU を除くすべての GPU で、次のコマンドを実行します。
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded.yaml
2024-R05 リリース以降のノード バージョンを実行している NVIDIA L4 GPU または H100 GPU の場合は、
R535
ドライバをインストールします。kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded-R535.yaml
2024-R05 リリースより前のリリース、またはこのリリースよりも後のリリースのノード バージョンを実行している NVIDIA L4 GPU または H100 GPU の場合は、
R525
ドライバをインストールします。kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded-R525.yaml
インストールには数秒かかります。インストールが完了すると、NVIDIA GPU デバイス プラグインは Kubernetes API を使用して NVIDIA GPU の容量を利用可能にします。
次の表に、各 GKE バージョンで利用可能なドライバ バージョンを示します。
Ubuntu GPU ドライバと GKE のバージョン | ||
---|---|---|
1.30 | R470 または R535 | |
1.29 | R470 または R535 | |
1.28 | R470 または R535 | |
1.27 | R470 または R535 | |
1.26 | R470 または R535 |
Terraform
Terraform を使用すると、ノードのタイプに応じてデフォルトの GPU ドライバのバージョンをインストールできます。どちらの場合も、kubectl_manifest
Terraform リソースタイプを構成する必要があります。
COS に DaemonSet をインストールするには、Terraform 構成に次のブロックを追加します。
data "http" "nvidia_driver_installer_manifest" { url = "https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml" } resource "kubectl_manifest" "nvidia_driver_installer" { yaml_body = data.http.nvidia_driver_installer_manifest.body }
Ubuntu に DaemonSet をインストールするには、Terraform 構成に次のブロックを追加します。
data "http" "nvidia_driver_installer_manifest" { url = "https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded.yaml" } resource "kubectl_manifest" "nvidia_driver_installer" { yaml_body = data.http.nvidia_driver_installer_manifest.body }
GPU でのノードの自動プロビジョニングを使用したドライバのインストール
ノードの自動プロビジョニングで GPU を使用する場合、デフォルトでは、自動プロビジョニングされたノードプールに十分なスコープが割り当てられていないため、ドライバをインストールできません。必要なスコープを付与するには、ノードの自動プロビジョニングのデフォルト スコープを変更して logging.write
、monitoring
、devstorage.read_only
、compute
を追加します。次に例を示します。
gcloud container clusters update CLUSTER_NAME --enable-autoprovisioning \
--min-cpu=1 --max-cpu=10 --min-memory=1 --max-memory=32 \
--autoprovisioning-scopes=https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring,https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/compute
GKE バージョン 1.29.2-gke.1108000 以降では、自動プロビジョニングされた GPU ノードに自動的にインストールする、GKE の GPU ドライバ バージョンを選択できます。マニフェストに次のフィールドを追加します。
spec:
nodeSelector:
cloud.google.com/gke-gpu-driver-version: "DRIVER_VERSION"
DRIVER_VERSION
は次のいずれかの値に置き換えます。
default
- ノードの GKE バージョンに対応するデフォルトの安定版ドライバ。マニフェストで nodeSelector を省略した場合、これがデフォルトのオプションになります。latest
- ノードの GKE バージョンに対応する最新のドライバ バージョン。
自動プロビジョニングの詳細については、ノードの自動プロビジョニングを使用するをご覧ください。
GPU を使用するように Pod を構成する
リソース制限を使用して、Pod が GPU を使用するように構成します。リソース制限を Pod 仕様で指定するには、次の Key-Value ペアを使用します。
- キー:
nvidia.com/gpu
- 値: 使用する GPU の数
GKE では alpha.kubernetes.io/nvidia-gpu
をリソース名としてサポートしていません。その代わりに nvidia.com/gpu
をリソース名として使用してください。
次のマニフェストは、GPU を使用する Pod 仕様の例です。
apiVersion: v1
kind: Pod
metadata:
name: my-gpu-pod
spec:
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: 2
複数の GPU タイプを使用する
クラスタごとに複数の GPU アクセラレータ タイプを使用する場合は、それぞれが独自のアクセラレータ タイプを持つ複数のノードプールを作成する必要があります。GKE は、独自のノードセレクタを GPU ノードに接続することにより、特定の GPU タイプのノードに GPU ワークロードを配置できるようにします。
- キー:
cloud.google.com/gke-accelerator
- 値: 使用する GPU アクセラレータのタイプ。
例:
nvidia-tesla-t4
。
このノードセレクタをワークロードの Pod 仕様に追加することにより、特定の GPU タイプをターゲットにできます。次に例を示します。
apiVersion: v1
kind: Pod
metadata:
name: my-gpu-pod
spec:
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: 2
nodeSelector:
cloud.google.com/gke-accelerator: nvidia-tesla-t4
アクセラレータ(GPU と TPU)を使用してノードプールをアップグレードする
GKE は、ノードプールを含む Standard クラスタを自動的にアップグレードします。ノードを新しいバージョンに早急に移行する必要がある場合は、ノードプールを手動でアップグレードすることもできます。クラスタのアップグレードの動作を制御するには、リリース チャンネル、メンテナンスの時間枠と除外、ロールアウトのシーケンスを使用します。
サージ アップグレードや Blue/Green アップグレードなど、ノードプールにノード アップグレード戦略を構成することもできます。これらの戦略を構成することで、環境の速度と中断の最適なバランスが実現されるようにノードプールをアップグレードできます。マルチホスト TPU スライス ノードプールの場合、GKE は、構成済みのノード アップグレード戦略を使用せずに、1 つのステップでノードプール全体をアトミックに再作成します。詳細については、GKE の TPU に関連する用語の「アトミック性」の定義をご覧ください。
ノードのアップグレード戦略を使用する場合は、構成に応じて、GKE が一時的に追加のリソースをプロビジョニングする必要があります。Google Cloud でノードプールのリソースの容量が限られている場合(たとえば、GPU または TPU を使用してノードを追加しようとするとリソースの可用性エラーが表示される場合)は、リソースが制限された環境でのアップグレードをご覧ください。
NVIDIA CUDA-X ライブラリについて
CUDA は、NVIDIA の GPU 用並列コンピューティング プラットフォームおよびプログラミング モデルです。CUDA アプリケーションを使用するには、使用するイメージにライブラリが必要となります。NVIDIA CUDA-X ライブラリを追加するには、コンテナ仕様の LD_LIBRARY_PATH
環境変数に次の値を追加し、独自のイメージをビルドして使用します。
/usr/local/cuda-CUDA_VERSION/lib64
: ノード上の NVIDIA CUDA-X ライブラリの場所。CUDA_VERSION
は、使用した CUDA-X イメージ バージョンに置き換えます。一部のバージョンには、/usr/local/nvidia/bin
にデバッグ ユーティリティも含まれています。詳細については、DockerHub の NVIDIA CUDA イメージに関するページをご覧ください。ご使用の CUDA に最低限必要な GPU ドライバのバージョンを確認するには、CUDA のツールキットと対応するドライバ バージョンについての記事をご覧ください。
/usr/local/nvidia/lib64
: NVIDIA デバイス ドライバの場所。
GPU ノード ワークロードのパフォーマンスをモニタリングする
GKE クラスタでシステム指標が有効になっている場合、Cloud Monitoring で次の指標を使用して GPU ワークロードのパフォーマンスをモニタリングできます。
- デューティ サイクル(
container/accelerator/duty_cycle
): 過去のサンプル期間(10 秒)に対する、アクセラレータがアクティブに処理していた時間の割合。1~100 までの間。 - メモリ使用量(
container/accelerator/memory_used
): 割り当てられたアクセラレータ メモリの量(バイト単位)。 - メモリ容量(
container/accelerator/memory_total
): アクセラレータの総メモリ(バイト単位)。
事前定義されたダッシュボードを使用して、GPU ノードを使用するクラスタをモニタリングできます。詳細については、オブザーバビリティ指標を表示するをご覧ください。クラスタとそのリソースのモニタリングに関する一般的な情報については、GKE のオブザーバビリティをご覧ください。
ワークロードの使用状況の指標を表示する
ワークロードの GPU 使用状況の指標は、Google Cloud コンソールの [ワークロード] ダッシュボードで表示できます。
ワークロードの GPU 使用状況を表示するには、以下の手順に沿って操作します。
Google Cloud コンソールの [ワークロード] ページに移動します。
[ワークロード] に移動- ワークロードを選択します。
[ワークロード] ダッシュボードに、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 ノードの正常終了を構成する
コントロール プレーンで 1.29.1-gke.1425000 以降が実行されている GKE クラスタでは、GPU ノードはシャットダウンの差し迫ったノードに警告する SIGTERM
シグナルをサポートしています。GPU ノードでは、最大 60 分前のシャットダウン通知を構成できます。
この通知期間内にワークロードを正常に終了するように GKE を構成するには、GPU と TPU の GKE ノードの中断を管理するの手順に沿って操作します。
次のステップ
- ノードプールの詳細を理解する。
- ノードの最小 CPU プラットフォームを使用する方法を学ぶ。
- Docker を使用してローカルの Deep Learning Containers を作成して設定する方法を学ぶ。