GPUオペレーター
NVIDIAオペレーターをデプロイする
NVIDIAオペレーターは、Kubernetesクラスターの管理者がGPUをCPUのように管理できるようにします。ポッドがGPUを操作するために必要なすべてが含まれています。
ホストOSの要件
GPUをポッドに正しく公開するには、NVIDIAカーネルドライバーと`libnvidia-ml`ライブラリがホストOSに正しくインストールされている必要があります。NVIDIAオペレーターは、一部のオペレーティングシステムに自動的にドライバーとライブラリをインストールできます。 サポートされているオペレーティングシステムリリースに関する情報は、NVIDIAのドキュメントを参照してください。ホストOSにNVIDIAコンポーネントをインストールすることは、このドキュメントの範囲外です。手順についてはNVIDIAのドキュメントを参照してください。
カーネルドライバーが正しくインストールされている場合、次の3つのコマンドは正しい出力を返す必要があります:
-
`lsmod | grep nvidia`はnvidiaカーネルモジュールのリストを返します。次に例を示します。
nvidia_uvm 2129920 0 nvidia_drm 131072 0 nvidia_modeset 1572864 1 nvidia_drm video 77824 1 nvidia_modeset nvidia 9965568 2 nvidia_uvm,nvidia_modeset ecc 45056 1 nvidia -
`cat /proc/driver/nvidia/version`はドライバーのNVRMおよびGCCバージョンを返します。次に例を示します。
NVRM version: NVIDIA UNIX Open Kernel Module for x86_64 555.42.06 Release Build (abuild@host) Thu Jul 11 12:00:00 UTC 2024 GCC version: gcc version 7.5.0 (SUSE Linux) -
`find /usr/ -iname libnvidia-ml.so`は`libnvidia-ml.so`ライブラリへのパスを返します。次に例を示します。
/usr/lib64/libnvidia-ml.soこのライブラリは、Kubernetesコンポーネントがカーネルドライバーと対話するために使用されます。
オペレーターのインストール
OSが準備でき、RKE2が実行中である場合、次のyamlマニフェストを使用してGPUオペレーターをインストールします。
-
v25.3.x
-
v25.10.x
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: gpu-operator
namespace: kube-system
spec:
repo: https://helm.ngc.nvidia.com/nvidia
chart: gpu-operator
version: v25.3.4
targetNamespace: gpu-operator
createNamespace: true
valuesContent: |-
toolkit:
env:
- name: CONTAINERD_SOCKET
value: /run/k3s/containerd/containerd.sock
- name: ACCEPT_NVIDIA_VISIBLE_DEVICES_ENVVAR_WHEN_UNPRIVILEGED
value: "false"
- name: ACCEPT_NVIDIA_VISIBLE_DEVICES_AS_VOLUME_MOUNTS
value: "true"
devicePlugin:
env:
- name: DEVICE_LIST_STRATEGY
value: volume-mounts
|
envvars |
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: gpu-operator
namespace: kube-system
spec:
repo: https://helm.ngc.nvidia.com/nvidia
chart: gpu-operator
version: v25.10.1
targetNamespace: gpu-operator
createNamespace: true
valuesContent: |-
toolkit:
env:
- name: CONTAINERD_SOCKET
value: /run/k3s/containerd/containerd.sock
|
NVIDIA GPUオペレーターv25.10.xは、 コンテナデバイスインターフェース(CDI)仕様を使用しており、これにより操作が簡素化されます:セキュリティ要件を満たすために追加のenvvarsを渡す必要がなく、ワークロードはもはや`runtimeClassName: nvidia`を渡す必要がありません。 |
|
NVIDIAオペレーターは、hangupコールでcontainerdを再起動し、RKE2を再起動します。 |
約1分後、すべてが期待通りに動作していることを確認するために、次のチェックを行うことができます。
-
ドライバーと`libnvidia-ml.so`ライブラリが以前にインストールされていると仮定して、オペレーターがそれらを正しく検出しているか確認してください。
kubectl get node $NODENAME -o jsonpath='{.metadata.labels}' | grep "nvidia.com/gpu.deploy.driver"`pre-installed`の値が表示されることを確認してください。`true`が表示される場合、ドライバーが正しくインストールされていません。前提条件が正しい場合、すべてのパッケージをインストールした後にノードを再起動するのを忘れた可能性があります。
他のドライバーラベルも次のコマンドで確認できます。
kubectl get node $NODENAME -o jsonpath='{.metadata.labels}' | grep "nvidia.com"ドライバーとGPUを指定するラベル(例:
nvidia.com/gpu.machine`または`nvidia.com/cuda.driver.major)が表示されることを確認してください。 -
ノードにおいて、`nvidia-device-plugin-daemonset`によってGPUが割り当て可能なリソースとして追加されたか確認してください。
kubectl get node $NODENAME -o jsonpath='{.status.allocatable}'ノードで`"nvidia.com/gpu":`の後にGPUの数が表示されることを確認してください。
-
コンテナランタイムバイナリが存在することを確認してください(`nvidia-container-toolkit-daemonset`によってインストールされます):
ls /usr/local/nvidia/toolkit/nvidia-container-runtime -
NVIDIAコンテナランタイムを含むようにcontainerdの設定が更新されたか確認してください。
grep nvidia /var/lib/rancher/rke2/agent/etc/containerd/config.toml -
ポッドを実行して、GPUリソースがポッドに正常にスケジュールされ、ポッドがそれを検出できることを確認してください。
apiVersion: v1 kind: Pod metadata: name: nbody-gpu-benchmark namespace: default spec: restartPolicy: OnFailure # runtimeClassName: nvidia <== Only needed for v25.3.x containers: ** name: cuda-container image: nvcr.io/nvidia/k8s/cuda-sample:nbody args: ["nbody", "-gpu", "-benchmark"] resources: limits: nvidia.com/gpu: 1
|
バージョンゲート
2024年10月のリリースから利用可能:v1.28.15+rke2r1、v1.29.10+rke2r1、v1.30.6+rke2r1、v1.31.2+rke2r1。 |
RKE2は、コンテナランタイムパッケージによって使用されるデフォルトのパスを確認することに加えて、代替のコンテナランタイムを見つけるために`PATH`を使用します。この機能を使用するには、RKE2サービスのPATH環境変数を変更して、コンテナランタイムバイナリを含むディレクトリを追加する必要があります。
この2つの環境ファイルのいずれかを変更することをお勧めします:
-
/etc/default/rke2-server# またはrke2-agent -
/etc/sysconfig/rke2-server# またはrke2-agent
この例では、PATH`を/etc/default/rke2-server`に追加します。
|
`PATH`の変更は、rootユーザーとして実行されるサービスのパスに信頼できないバイナリを配置しないように注意して行う必要があります。 |
echo PATH=$PATH >> /etc/default/rke2-server