GKE Standard ノードプールで GPU を実行する


このページでは、Google Kubernetes Engine(GKE)Standard クラスタのノードで、NVIDIA® 画像処理装置(GPU)ハードウェア アクセラレータを使用する方法を説明します。GKE における GPU の詳細については、GKE での GPU についてをご覧ください。

Autopilot Pod では GPU を直接使用することもできます。手順については、Autopilot に GPU ワークロードをデプロイするをご覧ください。

概要

GKE では、NVIDIA Tesla® GPU(K80P100P4V100T4L4A100)を装備したノードプールを作成できます。GPU は、画像認識や自然言語処理のほか、動画のコード変換や画像処理などの多くのコンピューティング処理を必要とするタスクなど、ディープ ラーニング タスクを稼働させるための計算能力を提供します。

ワークロードが頻繁なノード中断を許容できるのであれば、GPU を Spot VMで使用することもできます。Spot VM を使用することで、GPU 実行時の料金を下げることができます。詳細については、GPU ノードプールで Spot VM を使用するをご覧ください。

始める前に

作業を始める前に、次のことを確認してください。

  • Google Kubernetes Engine API を有効にします。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化します。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得します。

要件

GKE 上の GPU には、以下の要件があります。

  • Kubernetes バージョン: Container-Optimized OS ノードイメージを使用するノードプールの場合、GPU ノードは GKE バージョン 1.9 以降で使用できます。Ubuntu ノードイメージを使用するノードプールの場合、GPU ノードは GKE バージョン 1.11.3 以降で使用できます。
  • GPU の割り当て: GPU ノードを作成する前に、目的のゾーンに Compute Engine GPU の割り当てが必要です。プロジェクトに十分な GPU 割り当てがあるか確認するには、Google Cloud コンソールで割り当てをご覧ください。

    追加の GPU 割り当てが必要な場合は、Google Cloud コンソールで GPU 割り当てをリクエストする必要があります。請求先アカウントが設定されている場合は、割り当てリクエストを送信すると、プロジェクトに自動的に割り当てが設定されます。

  • NVIDIA GPU ドライバ: クラスタまたはノードプールの作成時に、GKE のバージョンに基づいたバージョンのドライバを自動的にインストールするよう GKE に指示できます。GPU ドライバを自動的にインストールするよう GKE に指示しない場合は、ドライバを手動でインストールする必要があります。

  • A100 GPU: A100 GPU は a2 マシンタイプでのみサポートされており、GKE バージョン 1.18.6-gke.3504 以降が必要です。基盤となる A2 マシンタイプに A100 GPU を使用するための十分な割り当てがあることを確認する必要があります。

  • L4 GPUs:

    • GKE バージョン 1.22.17-gke.5400 以降を使用する必要があります。
    • Container-Optimized OS では、選択する GKE バージョンに NVIDIA ドライバ バージョン 525 以降が含まれている必要があります。ドライバ バージョン 525 以降がデフォルトまたは GKE バージョンの最新バージョンではない場合は、サポートされているドライバをノードに手動でインストールする必要があります。

制限事項

GPU を GKE で使用する前に、以下の制限事項に留意してください。

  • 既存のノードプールに GPU を追加することはできません。
  • メンテナンス イベント中に GPU ノードをライブ マイグレーションすることはできません。
  • 使用可能な GPU タイプは、次のようにマシンシリーズによって異なります。

    選択した GPU タイプと数量に対応するマシンシリーズのプロジェクトに十分な割り当てがあることを確認する必要があります。

  • GPU は Windows Server ノードプールではサポートされていません。

  • GKE バージョン 1.22~1.25 では、クラスタ オートスケーラーは L4 GPU を使用するノードの基本的なスケールアップとスケールダウンのみをサポートします。この制限は、GKE バージョン 1.26 以降には適用されません。

  • H100 GPU で Pod ストレージにローカル SSD を使用するには、--ephemeral-storage-local-ssd=count=SSD_COUNT フラグ(エフェメラル ストレージの場合)または --local-nvme-ssd-block=count=SSD_COUNT フラグ(ブロック アクセスの場合)を使用して、基盤となる A3 VM にアタッチするローカル SSD の正確な数を指定する必要があります。このフラグを省略すると、Pod でローカル SSD を使用できなくなります。これらのフラグは、データアクセスにローカル SSD を使用する場合にのみ必要です。

    GKE でサポートされているマシンサイズは a3-highgpu-8g で、対応するローカル SSD の数は 16 です。

可用性

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 コンソールを使用します。

  1. Google Cloud コンソールの [IAM と管理] ページに移動します。

    [割り当て] に移動

  2. [フィルタ] ボックスで次の操作を行います。

    1. [割り当て] プロパティを選択し、GPU モデルの名前を入力して、Enter を押します。
    2. (省略可)高度なフィルタを適用して結果を絞り込むには、[ディメンション] プロパティを選択し(例: ロケーション)、使用しているリージョンまたはゾーンの名前を追加して、Enter を押します。
  3. GPU 割り当てのリストから、変更する割り当てを選択します。

  4. [割り当てを編集] をクリックします。リクエスト フォームが開きます。

  5. 各割り当てリクエストの [新しい割り当て上限] フィールドを入力します。

  6. [リクエストの説明] フィールドに、リクエストの詳細を入力します。

  7. [次へ] をクリックします。

  8. [オーバーライドの確認] ダイアログで [確認] をクリックします。

  9. [連絡先の詳細] 画面で、承認者が割り当て変更リクエストを完了するために使用できる名前と電話番号を入力します。

  10. [リクエストを送信] をクリックします。

  11. 割り当ての変更を追跡するための確認メールが届きます。

GPU の実行

GKE Standard クラスタで GPU を実行するには、GPU がアタッチされたノードプールを作成します。すでに非 GPU ノードプールを実行している既存のクラスタに GPU ノードプールを追加すると、GKE が自動的に次のノード taint を使用して GPU ノードを taint します。

  • キー: nvidia.com/gpu
  • 効果: NoSchedule

加えて、GKE は、ExtendedResourceToleration アドミッション コントローラを実行することにより、GPU をリクエストしている Pod に対応する toleration を自動的に適用します。

これにより、GPU を要求している Pod のみが GPU ノードでスケジュールされ、より効率的な自動スケーリングが可能になります。GPU を要求している Pod が不足している場合は、GPU ノードを簡単にスケールダウンできます。

GKE で GPU の費用対効果、信頼性、可用性を高めるために、次のことをおすすめします。

  • 個別の GPU ノードプールを作成します。ノードプールごとに、ノードのロケーションを必要な GPU を使用できるゾーンに制限します。
  • 各ノードプールで自動スケーリングを有効にします。
  • リージョン クラスタを使用して、リージョン内のゾーン間で Kubernetes コントロール プレーンをレプリケーションすることで可用性を向上させます。
  • ドライバのバージョンを手動でインストールして管理しなくても済むように、ノードプールにデフォルトまたは最新の GPU ドライバを自動的にインストールするよう GKE に指示します。

GPU ノードプールを作成する

既存のクラスタに個別の GPU ノードプールを作成するには、Google Cloud コンソールまたは Google Cloud CLI を使用します。Terraform を使用して GKE クラスタと GPU ノードプールをプロビジョニングすることもできます。

Container-Optimized OS のバージョンに対応するデフォルトまたは最新の NVIDIA ドライバのバージョンを自動的にインストールするよう GKE に指示できます。

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 タイプ。次のいずれか 1 つを指定できます。
    • nvidia-tesla-k80
    • nvidia-tesla-p100
    • nvidia-tesla-p4
    • nvidia-tesla-v100
    • nvidia-tesla-t4
    • nvidia-tesla-a100
    • nvidia-a100-80gb
    • nvidia-l4
    • nvidia-h100-80gb
  • DRIVER_VERSION: インストールする NVIDIA ドライバのバージョン。次のいずれか 1 つを指定できます。

    • default: GKE バージョンのデフォルトのドライバ バージョンをインストールします。
    • latest: お使いの GKE バージョン向けの最新のドライバ バージョンをインストールします。Container-Optimized OS を使用するノードでのみ使用できます。
    • disabled: ドライバの自動インストールをスキップします。ノードプールを作成した後に、手動でドライバをインストールする必要がありますgpu-driver-version を省略すると、これがデフォルトのオプションになります。
  • AMOUNT: ノードプール内のノードにアタッチする GPU の数。

  • MACHINE_TYPE: ノードの Compute Engine マシンタイプ。次の GPU タイプの場合は必須です。

    その他の 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 を使用するノードプールを作成するには、以下の手順に沿って操作します。

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. クラスタのリストで、変更するクラスタの名前をクリックします。

  3. [ ノードプールを追加] をクリックします。

  4. 必要に応じて、[ノードプールの詳細] ページで [自動スケーリングを有効にする] チェックボックスをオンにします。

  5. 必要に応じてノードプールを構成します。

  6. ナビゲーション パネルで [ノード] を選択します。

  7. [マシンの構成] で [GPU] をクリックします。

  8. 各ノードで実行する [GPU のタイプ] と [GPU の数] を選択します。

  9. 警告を読み、[制限について理解しています] をオンにします。

  10. [GPU Driver installation] セクションで、次のいずれかの方法を選択します。

    • Google が管理: GKE はドライバを自動的にインストールします。このオプションを選択した場合は、[バージョン] プルダウンから次のいずれかを選択します。
      • デフォルト: デフォルトのドライバ バージョンをインストールします。
      • 最新: 使用可能な最新のドライバ バージョンをインストールします。
    • お客様が管理: GKE はドライバをインストールしません。NVIDIA GPU デバイス ドライバのインストールの手順に沿って、互換性のあるドライバを手動でインストールする必要があります
  11. [作成] をクリックします。

Terraform

GPU を搭載した Terraform でリージョン クラスタを作成するには、Terraform モジュールを使用します。

  1. 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_ZONE1,COMPUTE_ZONE2,[...]: GKE が GPU ノードを作成する特定のゾーン。これらのゾーンは、region 変数で指定したのと同じリージョンに存在する必要があります。これらのゾーンには、利用可能な GPU タイプが定義されている必要があります。どのゾーンに GPU があるか調べるには、対象をご覧ください。GPU ノードプールを作成するときに、node_locations 変数を使用して、リクエストされた GPU を含むゾーン(1 つまたは複数)を指定する必要があります。
    • GPU_TYPE: GPU タイプ。次のいずれか 1 つを指定できます。

      • nvidia-tesla-k80
      • nvidia-tesla-p100
      • nvidia-tesla-p4
      • nvidia-tesla-v100
      • nvidia-tesla-t4
      • nvidia-tesla-a100
      • nvidia-a100-80gb
      • nvidia-l4
      • nvidia-h100-80gb
    • DRIVER_VERSION: GKE が自動的にインストールする GPU ドライバのバージョン。このフィールドは省略可能です。次の値を使用できます。

      • INSTALLATION_DISABLED: GPU ドライバの自動インストールを無効にします。GPU を実行するには、ドライバを手動でインストールする必要があります。
      • DEFAULT: ノードのオペレーティング システムのバージョンに対応するデフォルトのドライバ バージョンを自動的にインストールします。
      • LATEST: ノードの OS バージョンで利用可能な最新のドライバ バージョンを自動的にインストールします。

    このフィールドを省略すると、GKE によるドライバの自動インストールが行われません。このフィールドは、ノードの自動プロビジョニングを使用するノードプールではサポートされていません。ドライバを手動でインストールするには、このドキュメントの NVIDIA GPU ドライバを手動でインストールするをご覧ください。* MACHINE_TYPE: ノード用の Compute Engine マシンタイプ。次の GPU タイプの場合は必須です。

    その他の GPU の場合、このフラグは省略可能です。

  2. 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 の詳細については、google_container_node_pool リソースの仕様をご覧ください。

GPU を搭載した新しいクラスタを作成し、--node-locations フラグを使用してゾーンを指定することもできます。ただし、このセクションに示すように、既存のクラスタに別の GPU ノードプールを作成することをおすすめします。

NVIDIA GPU ドライバを手動でインストールする

GPU ノードプールの作成時にデバイス ドライバの自動インストールを無効にした場合、または自動インストールがサポートされている最小バージョンよりも以前の GKE バージョンを使用している場合は、ノード上で互換性のある NVIDIA GPU ドライバを手動でインストールする必要があります。Google は、ドライバのインストールに適用できる DaemonSet を提供しています。Container-Optimized OS を使用する GPU ノードでは、デフォルトの GPU ドライバのバージョンや新しいバージョンを選択することもできます。

可能であれば、Standard クラスタの作成時に --accelerator フラグで gpu-driver-version オプションを指定して、ドライバの自動インストールを使用することをおすすめします。2023 年 1 月 25 日以前にインストール用の DaemonSet を使用して GPU ドライバを手動でインストールした場合は、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.26 R470(デフォルト)、R510、または R525
1.25 R470(デフォルト)、R510、または R525
1.24 R470(デフォルト)、R510、または R525
1.23 R450(デフォルト)、R470、R510、または R525
1.22 R450(デフォルト)、R470、R510、または R525
1.21 R450(デフォルト)、R470、または R510
1.20 R450(デフォルト)、R470

Ubuntu

NVIDIA L4 GPU を除いたすべての GPU のインストール用の DaemonSet をデプロイするには、次のコマンドを実行します。

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded.yaml

インストールには数秒かかります。インストールが完了すると、NVIDIA GPU デバイス プラグインにより、Kubernetes API を介して NVIDIA GPU の容量が表示されます。

NVIDIA L4 GPU の場合は、次のコマンドを使用して R525 ドライバをインストールします。

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded-R525.yaml

次の表に、各 GKE バージョンで利用可能なドライバ バージョンを示します。

GKE バージョン NVIDIA ドライバ
1.27 R470
1.26 R470
1.25 R470
1.24 R470
1.23 R470
1.22 R450
1.21 R450
1.20 R450

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.writemonitoringdevstorage.read_onlycompute を追加します。次に例を示します。

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

自動プロビジョニングの詳細については、ノードの自動プロビジョニングを使用するをご覧ください。

GPU を使用するように Pod を構成する

リソース制限を使用して、Pod が GPU を使用するように構成します。リソース制限を Pod 仕様で指定するには、次の Key-Value ペアを使用します。

  • キー: nvidia.com/gpu
  • 値: 使用する 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
  • 値: nvidia-tesla-k80nvidia-tesla-p100nvidia-tesla-p4nvidia-tesla-v100nvidia-tesla-t4nvidia-tesla-a100nvidia-a100-80gbnvidia-h100-80gbnvidia-l4 のいずれか。

このノードセレクタをワークロードの 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-k80

アクセラレータ(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 ライブラリを追加するには、次のいずれかの方法を使用します。

  • 推奨: NVIDIA CUDA-X ライブラリがプリインストールされたイメージを使用します。たとえば、Deep Learning Containers を使用できます。これらのコンテナには、主要なデータ サイエンス フレームワーク、NVIDIA CUDA-X ライブラリ、ツールがプリインストールされています。また、NVIDIA CUDA イメージには NVIDIA CUDA-X ライブラリのみが含まれます。
  • 独自のイメージをビルドして使用します。この場合、コンテナ仕様の LD_LIBRARY_PATH 環境変数に次の値を含めます。
    1. /usr/local/cuda-CUDA_VERSION/lib64: ノード上の NVIDIA CUDA-X ライブラリの場所。CUDA_VERSION は、使用した CUDA-X イメージ バージョンに置き換えます。一部のバージョンには、/usr/local/nvidia/bin のデバッグ ユーティリティも含まれています。詳細については、DockerHub の NVIDIA CUDA イメージに関するページ をご覧ください。
    2. /usr/local/nvidia/lib64: NVIDIA デバイス ドライバの場所。

ご使用の CUDA に最低限必要な GPU ドライバのバージョンを確認するには、CUDA のツールキットと対応するドライバ バージョンについての記事をご覧ください。ノードで実行されている GKE パッチ バージョンに、選択した CUDA バージョンと互換性のある GPU ドライバのバージョンが含まれていることを確認します。GKE のバージョンに関連付けられている GPU ドライバのバージョンのリストについては、現在の GKE バージョンの表にリンクされた、対応する Container-Optimized OS のページをご覧ください。

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 使用状況を表示するには、以下の手順に沿って操作します。

  1. Google Cloud コンソールの [ワークロード] ページに移動します。

    [ワークロード] に移動
  2. ワークロードを選択します。

[ワークロード] ダッシュボードに、GPU メモリの使用量と容量、GPU デューティ サイクルのチャートが表示されます。

NVIDIA Data Center GPU Manager(DCGM)の指標を表示する

Google Cloud Managed Service for Prometheus を使用すると、Standard クラスタで NVIDIA DCGM 指標を収集して可視化できます。

Standard クラスタに DCGM と Prometheus DCGM エクスポータをデプロイする方法については、Google Cloud Observability ドキュメントの NVIDIA Data Center GPU Manager(DCGM)をご覧ください。

次のステップ