このドキュメントでは、動的リソース割り当て(DRA)をサポートするように Google Kubernetes Engine(GKE) インフラストラクチャを手動で設定する方法について説明します。 設定手順には、GPU を使用するノードプールの作成と DRA ドライバのインストールが含まれます。
このドキュメントは、アプリケーション オペレーターがワークロードで要求できる特殊なハードウェア デバイスを使用してインフラストラクチャを作成する プラットフォーム管理者 向けです。
制限事項
次の制限が適用されます。
- GKE での DRA の制限事項
- デバイス固有の制限事項(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次のように置き換えます。
各インスタンスに 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 ノードの場合は、
"/opt/nvidia"ディレクトリ パスを--set nvidiaDriverRootフラグで指定します。
インフラストラクチャが 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: ""