Opérateurs GPU
Déployer l’opérateur NVIDIA
L’NVIDIA operator permet aux administrateurs de clusters Kubernetes de gérer les GPU comme des UC. Il comprend tout ce qui est nécessaire pour que les pods fonctionnent avec des GPU.
Exigences du système d’exploitation hôte
Pour exposer correctement le GPU au pod, les pilotes de noyau Linux NVIDIA et la bibliothèque libnvidia-ml doivent être correctement installés dans le système d’exploitation hôte. L’opérateur NVIDIA peut installer automatiquement les pilotes et les bibliothèques sur certains systèmes d’exploitation. Référez-vous à la documentation NVIDIA pour des informations sur les versions de systèmes d’exploitation prises en charge. L’installation des composants NVIDIA sur votre système d’exploitation hôte est hors du champ de cette documentation, référez-vous à la documentation NVIDIA pour des instructions.
Les trois commandes suivantes devraient retourner une sortie correcte si le pilote de noyau Linux a été correctement installé :
-
lsmod | grep nvidiaretourne une liste de modules de kernel NVIDIA. Par exemple :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/versionretourne la version NVRM et GCC du pilote. Par exemple :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.soretourne un chemin vers la bibliothèquelibnvidia-ml.so. Par exemple :/usr/lib64/libnvidia-ml.soCette bibliothèque est utilisée par les composants Kubernetes pour interagir avec le pilote de noyau Linux.
Installation de l’opérateur
Une fois que le système d’exploitation est prêt et que RKE2 fonctionne, installez l’opérateur GPU avec le manifeste yaml suivant.
-
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
|
Les variables d’environnement |
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
|
L’opérateur NVIDIA GPU v25.10.x utilise la spécification de l’interface de périphérique de conteneur (CDI) et cela simplifie les opérations : nous n’avons pas besoin de passer des variables d’environnement supplémentaires pour respecter les exigences de sécurité et les charges de travail n’ont plus besoin de passer le |
|
L’opérateur NVIDIA redémarre containerd avec un appel de hangup qui redémarre RKE2. |
Après environ une minute, vous pouvez effectuer les vérifications suivantes pour vérifier que tout fonctionne comme prévu :
-
En supposant que les pilotes et la bibliothèque
libnvidia-ml.soaient été installés précédemment, vérifiez si l’opérateur les détecte correctement :kubectl get node $NODENAME -o jsonpath='{.metadata.labels}' | grep "nvidia.com/gpu.deploy.driver"Vous devriez voir la valeur
pre-installed. Si vous voyeztrue, les pilotes n’ont pas été correctement installés. Si les prérequis étaient corrects, il est possible que vous ayez oublié de redémarrer le nœud après avoir installé tous les paquets.Vous pouvez également vérifier d’autres étiquettes de pilotes avec :
kubectl get node $NODENAME -o jsonpath='{.metadata.labels}' | grep "nvidia.com"Vous devriez voir des étiquettes spécifiant le pilote et le GPU (par exemple
nvidia.com/gpu.machineounvidia.com/cuda.driver.major). -
Vérifiez si le GPU a été ajouté par
nvidia-device-plugin-daemonseten tant que ressource allouable dans le nœud :kubectl get node $NODENAME -o jsonpath='{.status.allocatable}'Vous devriez voir
"nvidia.com/gpu":suivi du nombre de GPU dans le nœud. -
Vérifiez que le binaire de l’environnement d’exécution de conteneur existe (il est installé par le
nvidia-container-toolkit-daemonset) :ls /usr/local/nvidia/toolkit/nvidia-container-runtime -
Vérifiez si la configuration de containerd a été mise à jour pour inclure l’environnement d’exécution de conteneur NVIDIA :
grep nvidia /var/lib/rancher/rke2/agent/etc/containerd/config.toml -
Exécutez un pod pour vérifier que la ressource GPU peut être planifiée avec succès sur un pod et que le pod peut la détecter.
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
|
Version Gate
Disponible à partir des versions d’octobre 2024 : v1.28.15+rke2r1, v1.29.10+rke2r1, v1.30.6+rke2r1, v1.31.2+rke2r1. |
RKE2 utilisera désormais PATH pour trouver des environnements d’exécution de conteneur alternatifs, en plus de vérifier les chemins par défaut utilisés par les paquets d’environnement d’exécution de conteneur. Pour utiliser cette fonctionnalité, vous devez modifier la variable d’environnement PATH du service RKE2 pour ajouter les répertoires contenant les binaires de l’environnement d’exécution de conteneur.
Il est recommandé de modifier l’un de ces deux fichiers d’environnement :
-
/etc/default/rke2-server# ou rke2-agent -
/etc/sysconfig/rke2-server# ou rke2-agent
Cet exemple ajoutera le PATH dans /etc/default/rke2-server :
|
Les modifications de |
echo PATH=$PATH >> /etc/default/rke2-server