このドキュメントでは、Google Kubernetes Engine(GKE)のインフラストラクチャで動的リソース割り当て(DRA)を使用できるようにするための設定方法について説明します。設定手順には、GPU を使用するノードプールの作成と DRA ドライバのインストールが含まれます。
このドキュメントは、アプリケーション オペレーターがワークロードで要求できる専用のハードウェア デバイスを使用してインフラストラクチャを作成するプラットフォーム管理者を対象としています。
制限事項
次の制限が適用されます。
- GKE での DRA の制限事項
- デバイス固有の制限事項(DRA を使用するかどうかに関係なく適用されます): Standard クラスタでの GPU ワークロード
始める前に
作業を始める前に、次のタスクが完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API を有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化します。gcloud CLI をインストール済みの場合は、
gcloud components updateコマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。
バージョン 1.35 以降を実行する GKE Standard クラスタがある。リージョン クラスタを作成することもできます。
Helm をインストールします。Cloud Shell を使用する場合、Helm はすでにインストールされています。
GPU を使用して GKE ノードプールを作成する
このセクションでは、GPU ノードプールを作成し、対応する DRA ドライバをインストールする方法について説明します。このセクションの手順は、手動で作成したノードプールにのみ適用されます。DRA をサポートする GPU ノードプールを作成するには、次の操作を行う必要があります。
- GPU ドライバの自動インストールを無効にする:
--acceleratorフラグでgpu-driver-version=disabledオプションを指定します。 - GPU デバイス プラグインを無効にする:
gke-no-default-nvidia-gpu-device-plugin=trueノードラベルをノードプールに追加します。 - DRA ドライバ DaemonSet を実行する: ノードプールに
nvidia.com/gpu.present=trueノードラベルを追加します。 - 自動スケーリングを構成する: ノードプールでクラスタ オートスケーラーを使用するには、ノードプールに
cloud.google.com/gke-nvidia-gpu-dra-driver=trueノードラベルを追加します。クラスタ オートスケーラーは、このノードラベルを使用して、GPU の DRA ドライバを実行するノードを識別します。
GPU ノードプールを作成して構成する手順は次のとおりです。
GPU ノードプールを作成します。次のコマンド例は、異なる構成のノードプールを作成します。
2 つの L4 GPU を搭載した
g2-standard-24インスタンスを含むノードプールを作成します。gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \ --machine-type="g2-standard-24" \ --accelerator="type=nvidia-l4,count=2,gpu-driver-version=disabled" \ --num-nodes="1" \ --node-labels=gke-no-default-nvidia-gpu-device-plugin=true,nvidia.com/gpu.present=true次のように置き換えます。
NODEPOOL_NAME: ノードプールの名前。CLUSTER_NAME: クラスタの名前。CONTROL_PLANE_LOCATION: クラスタ コントロール プレーンのリージョンまたはゾーン(例:us-central1、us-central1-a)。NODE_LOCATION1,NODE_LOCATION2,...: コントロール プレーンと同じリージョンにある、ノードを作成するゾーンのカンマ区切りのリスト。GPU の可用性があるゾーンを選択します。
各インスタンスに 1 つの NVIDIA A100(80 GB)GPU を持つ
a2-ultragpu-1gインスタンスを使用して、自動スケーリング ノードプールを作成します。gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \ --enable-autoscaling \ --max-nodes=5 \ --machine-type="a2-ultragpu-1g" \ --accelerator="type=nvidia-a100-80gb,count=1,gpu-driver-version=disabled" \ --num-nodes="1" \ --node-labels=gke-no-default-nvidia-gpu-device-plugin=true,nvidia.com/gpu.present=true,cloud.google.com/gke-nvidia-gpu-dra-driver=true
DRA ドライバをインストールする
NVIDIA DRA ドライバを含む Helm チャートを pull して更新します。
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo updateバージョン 25.8.0 以降の NVIDIA DRA GPU ドライバをインストールします。
helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --version="25.8.0" --create-namespace --namespace=nvidia-dra-driver-gpu \ --set nvidiaDriverRoot="/home/kubernetes/bin/nvidia/" \ --set gpuResourcesEnabledOverride=true \ --set resources.computeDomains.enabled=false \ --set kubeletPlugin.priorityClassName="" \ --set 'kubeletPlugin.tolerations[0].key=nvidia.com/gpu' \ --set 'kubeletPlugin.tolerations[0].operator=Exists' \ --set 'kubeletPlugin.tolerations[0].effect=NoSchedule'Ubuntu ノードの場合は、
--set nvidiaDriverRootフラグで"/opt/nvidia"ディレクトリ パスを指定します。
インフラストラクチャが DRA に対応していることを確認する
DRA ドライバ Pod が実行されていることを確認します。
kubectl get pods -n nvidia-dra-driver-gpu出力は次のようになります。
NAME READY STATUS RESTARTS AGE nvidia-dra-driver-gpu-kubelet-plugin-52cdm 1/1 Running 0 46s追加したハードウェア デバイスが ResourceSlice に一覧表示されていることを確認します。
kubectl get resourceslices -o yaml出力は次のようになります。
apiVersion: v1 items: - apiVersion: resource.k8s.io/v1 kind: ResourceSlice metadata: # Multiple lines are omitted here. spec: devices: - attributes: architecture: string: Ada Lovelace brand: string: Nvidia cudaComputeCapability: version: 8.9.0 cudaDriverVersion: version: 13.0.0 driverVersion: version: 580.65.6 index: int: 0 minor: int: 0 pcieBusID: string: "0000:00:03.0" productName: string: NVIDIA L4 resource.kubernetes.io/pcieRoot: string: pci0000:00 type: string: gpu uuid: string: GPU-ccc19e5e-e3cd-f911-65c8-89bcef084e3f capacity: memory: value: 23034Mi name: gpu-0 - attributes: architecture: string: Ada Lovelace brand: string: Nvidia cudaComputeCapability: version: 8.9.0 cudaDriverVersion: version: 13.0.0 driverVersion: version: 580.65.6 index: int: 1 minor: int: 1 pcieBusID: string: "0000:00:04.0" productName: string: NVIDIA L4 resource.kubernetes.io/pcieRoot: string: pci0000:00 type: string: gpu uuid: string: GPU-f783198d-42f9-7cef-9ea1-bb10578df978 capacity: memory: value: 23034Mi name: gpu-1 driver: gpu.nvidia.com nodeName: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm pool: generation: 1 name: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm resourceSliceCount: 1 kind: List metadata: resourceVersion: ""