DRA ワークロード用に GKE インフラストラクチャを準備する

このドキュメントでは、動的リソース割り当て(DRA)をサポートするように Google Kubernetes Engine(GKE) インフラストラクチャを手動で設定する方法について説明します。 設定手順には、GPU を使用するノードプールの作成と DRA ドライバのインストールが含まれます。

このドキュメントは、アプリケーション オペレーターがワークロードで要求できる特殊なハードウェア デバイスを使用してインフラストラクチャを作成する プラットフォーム管理者 向けです。

制限事項

次の制限が適用されます。

始める前に

作業を始める前に、次のタスクが完了していることを確認してください。

  • 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 ノードプールを作成して構成する手順は次のとおりです。

  1. 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-central1us-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
      
  2. NVIDIA GPU ドライバを手動でインストールします

  3. DRA ドライバをインストールします

DRA ドライバをインストールする

  1. NVIDIA DRA ドライバを含む Helm チャートを pull して更新します。

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
        && helm repo update
    
  2. バージョン 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 に対応していることを確認する

  1. 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
    
  2. 追加したハードウェア デバイスが 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: ""
    

次のステップ