GPU 用の Kubernetes デバイスプラグインをインストールする - Amazon EKS

このページの改善にご協力ください

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。

GPU 用の Kubernetes デバイスプラグインをインストールする

Kubernetes デバイスプラグインは、GPU、ネットワークインターフェイス、およびネットワークアダプターなどの特殊なインフラストラクチャを、Kubernetes ワークロードの消耗品リソースとしてアドバタイズするための主要なメカニズムです。動的リソース割り当て (DRA) は Kubernetes におけるデバイス管理の未来として位置づけられていますが、ほとんどの特殊なインフラストラクチャプロバイダーは、DRA ドライバーのサポートにおいてまだ初期段階にあります。そのため、Kubernetes デバイスプラグインは、現在も Kubernetes クラスターで GPU を使用するために広く利用可能なアプローチです。

考慮事項

  • NVIDIA GPU で EKS 最適化 AL2023 AMI を使用する場合は、NVIDIA Kubernetes デバイスプラグインをインストールする必要があります。Helm、任意の Kubernetes ツール、または NVIDIA GPU Operator を使用して、NVIDIA Kubernetes デバイスプラグインをインストールおよび管理できます。

  • NVIDIA GPU で EKS 最適化 Bottlerocket AMI を使用する場合、EKS 最適化 Bottlerocket AMI に既に含まれているため、NVIDIA Kubernetes デバイスプラグインをインストールする必要はありません。これには、EKS Auto Mode で GPU インスタンスを使用する場合も含まれます。

  • EKS 最適化 AL2023 または Bottlerocket AMI を AWS Inferentia または Trainium GPU で使用する場合は、Neuron Kubernetes デバイスプラグインをインストールし、オプションで Neuron Kubernetes スケジューラ拡張機能をインストールする必要があります。詳細については、EKS 上で実行するための Neuron のドキュメントを参照してください。

NVIDIA Kubernetes デバイスプラグインをインストールする

次の手順では、NVIDIA Kubernetes デバイスプラグインをインストールし、NVIDIA GPU インスタンスでサンプルテストを実行する方法について説明します。

前提条件

  • EKS クラスターが作成されていること

  • EKS 最適化 AL2023 NVIDIA AMI を使用してクラスター内で実行されている NVIDIA GPU ノードがあること

  • コマンドライン環境に Helm がインストールされていること。「Setup Helm instructions」を参照してください。

手順

  1. nvdp Helm チャートリポジトリを追加します。

    helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
  2. ローカル Helm リポジトリを更新して、最新のチャートがあることを確認します。

    helm repo update
  3. NVIDIA Kubernetes デバイスプラグインの最新バージョンを取得します。

    helm search repo nvdp --devel
    NAME CHART VERSION APP VERSION DESCRIPTION nvdp/gpu-feature-discovery 0.17.4 0.17.4 ... nvdp/nvidia-device-plugin 0.17.4 0.17.4 ...
  4. 0.17.4 を上記のコマンドで取得した最新バージョンに置き換えて、クラスターに NVIDIA Kubernetes デバイスプラグインをインストールします。

    helm install nvdp nvdp/nvidia-device-plugin \ --namespace nvidia \ --create-namespace \ --version 0.17.4 \ --set gfd.enabled=true
  5. NVIDIA Kubernetes デバイスプラグインがクラスターで実行されていることを確認します。以下の出力は、クラスターに 2 つのノードがある場合の出力を示しています。

    kubectl get ds -n nvidia nvdp-nvidia-device-plugin
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE nvdp-nvidia-device-plugin 2 2 2 2 2 <none> 11m
  6. ノードに割り当て可能な GPU があることを、次のコマンドで確認します。

    kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"
    NAME GPU ip-192-168-11-225.us-west-2.compute.internal 1 ip-192-168-24-96.us-west-2.compute.internal 1
  7. 次の内容で、nvidia-smi.yaml という名前のファイルを作成します。このマニフェストは、ノード上で nvidia-smi を実行する最小構成の AL2023 コンテナイメージを起動します。

    apiVersion: v1 kind: Pod metadata: name: nvidia-smi spec: restartPolicy: OnFailure containers: - name: gpu-demo image: public.ecr.aws/amazonlinux/amazonlinux:2023-minimal command: ['/bin/sh', '-c'] args: ['nvidia-smi && tail -f /dev/null'] resources: limits: nvidia.com/gpu: 1 tolerations: - key: 'nvidia.com/gpu' operator: 'Equal' value: 'true' effect: 'NoSchedule'
  8. 次のコマンドを使用してマニフェストを適用します。

    kubectl apply -f nvidia-smi.yaml
  9. Pod の実行が終了したら、次のコマンドを使用してそのログを表示します。

    kubectl logs nvidia-smi

    出力例は次のとおりです。

    +-----------------------------------------------------------------------------------------+ | NVIDIA-SMI XXX.XXX.XX Driver Version: XXX.XXX.XX CUDA Version: XX.X | |-----------------------------------------+------------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+========================+======================| | 0 NVIDIA L4 On | 00000000:31:00.0 Off | 0 | | N/A 27C P8 11W / 72W | 0MiB / 23034MiB | 0% Default | | | | N/A | +-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=========================================================================================| | No running processes found | +-----------------------------------------------------------------------------------------+

Neuron Kubernetes デバイスプラグインをインストールする

次の手順では、Neuron Kubernetes デバイスプラグインをインストールし、Inferentia インスタンスでサンプルテストを実行する方法について説明します。

前提条件

  • EKS クラスターが作成されていること

  • EKS 最適化 AL2023 Neuron AMI または Bottlerocket AMI を使用してクラスターで実行されている Neuron GPU ノードであること

  • コマンドライン環境に Helm がインストールされていること。「Setup Helm instructions」を参照してください。

手順

  1. Neuron Kubernetes デバイスプラグインをクラスターにインストールします。

    helm upgrade --install neuron-helm-chart oci://public.ecr.aws/neuron/neuron-helm-chart \ --set "npd.enabled=false"
  2. Neuron Kubernetes デバイスプラグインがクラスターで実行されていることを確認します。以下の出力は、クラスターに単一の Neuron ノードがある場合の出力を示しています。

    kubectl get ds -n kube-system neuron-device-plugin
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE neuron-device-plugin 1 1 1 1 1 <none> 72s
  3. ノードに割り当て可能な NueronCores があることを、次のコマンドで確認します。

    kubectl get nodes "-o=custom-columns=NAME:.metadata.name,NeuronCore:.status.allocatable.aws\.amazon\.com/neuroncore"
    NAME NeuronCore ip-192-168-47-173.us-west-2.compute.internal 2
  4. ノードに割り当て可能な NueronDevices があることを、次のコマンドで確認します。

    kubectl get nodes "-o=custom-columns=NAME:.metadata.name,NeuronDevice:.status.allocatable.aws\.amazon\.com/neuron"
    NAME NeuronDevice ip-192-168-47-173.us-west-2.compute.internal 1
  5. 次の内容で、neuron-ls.yaml という名前のファイルを作成します。このマニフェストは、neuron-ls ツールがインストールされている Neuron Monitor コンテナを起動します。

    apiVersion: v1 kind: Pod metadata: name: neuron-ls spec: restartPolicy: Never containers: - name: neuron-container image: public.ecr.aws/g4h4h0b5/neuron-monitor:1.0.0 command: ["/bin/sh"] args: ["-c", "neuron-ls"] resources: limits: aws.amazon.com/neuron: 1 tolerations: - key: "aws.amazon.com/neuron" operator: "Exists" effect: "NoSchedule"
  6. 次のコマンドを使用してマニフェストを適用します。

    kubectl apply -f neuron-ls.yaml
  7. Pod の実行が終了したら、次のコマンドを使用してそのログを表示します。

    kubectl logs neuron-ls

    以下に、出力例を示します。

    instance-type: inf2.xlarge instance-id: ... +--------+--------+--------+---------+ | NEURON | NEURON | NEURON | PCI | | DEVICE | CORES | MEMORY | BDF | +--------+--------+--------+---------+ | 0 | 2 | 32 GB | 00:1f.0 | +--------+--------+--------+---------+