Devoxx France 2025

✨ Du GPU dans mes conteneurs !

Rémi Verchère

Devoxx France 2025

Qui suis-je ?

👋 Rémi Verchère

💻 Cloud Native Infrastructure Consultant

👷 Ops qui aide les Devs à mettre en prod

🫶 Open Source & CNCF landscape

☸️ Kubestronaut

👨‍🍼 Papa x 👦👦👧👧

🌐 @rverchere

⚠️ Présentation non sponsorisée par NVIDIA

 

Devoxx France 2025

Agenda

Sujets traités

  • Gestion GPU côté dev
  • Gestion GPU côté ops 💪
    • Tour du propriétaire NVIDIA GPU Operator
    • Gestion des nodes & méthodes d'accès au GPU
  • 👨‍🏫 Le tout avec des démos quand même (avec du YAML ^^)

Sujets non traités

  • Quel GPU, Cloud Provider, Distribution K8S OnPrem choisir
  • Quels modèles de diffusion utiliser, génération de prompts efficaces, etc.

 

Devoxx France 2025

Côté dev

Devoxx France 2025

Activation du GPU côté dev

Easy 😎 !

from diffusers import StableDiffusion3Pipeline
import torch

pipe_id = "stabilityai/stable-diffusion-3-medium-diffuser"
pipe = StableDiffusion3Pipeline.from_pretrained(pipe_id,
        torch_dtype=torch.float16)
# [...]

pipe.to("cuda") # <-- Et voilà !

# [...]

 

 

Devoxx France 2025

Activation du GPU côté dev

Easy 😎 !

from diffusers import StableDiffusion3Pipeline
import torch

pipe_id = "stabilityai/stable-diffusion-3-medium-diffuser"
pipe = StableDiffusion3Pipeline.from_pretrained(pipe_id,
        torch_dtype=torch.float16)
# [...]

pipe.to("cuda") # <-- Et voilà !

# [...]

Environnement de démo

  • Apps Python, Streamlit + Pytorch + Diffusers + StableDiffusion 🐍
Devoxx France 2025

Côté ops 🧐

fill
Devoxx France 2025

Cluster Kubernetes

Besoins

  • 1 Cluster Kubernetes (of course)
  • 1 ou plusieurs nodes avec carte GPU

 

 

 

 

 

 

fill
Devoxx France 2025

Cluster Kubernetes

Besoins

  • 1 Cluster Kubernetes (of course)
  • 1 ou plusieurs nodes avec carte GPU

Environnement de démo

  • Cluster OVHCloud MKS, v1.32 (🎵)
  • Nodes avec 1 GPU "H100" 💸

 

 

 

Devoxx France 2025

Démo time !

 

center

Devoxx France 2025

Cluster Kubernetes

Besoins

  • 1 Cluster (of course)
  • 1 ou plusieurs nodes avec une carte GPU

 

 

 

 

 

 

Devoxx France 2025

Cluster Kubernetes

Besoins

  • 1 Cluster (of course)
  • 1 ou plusieurs nodes avec une carte GPU
  • ✨ Le fameux opérateur "NVIDIA GPU Operator" 🎵

 

 

 

 

 

 

Devoxx France 2025

Activation du GPU côté DevOoops

Déploiement sur Kubernetes

apiVersion: apps/v1
kind: Deployment
[..]
    spec:
      runtimeClassName: nvidia # <-- 🤔
      containers:
      - name: my-container-using-gpu
        resources:
          limits:
            nvidia.com/gpu: "1" # <-- 🤔
      nodeSelector:
        nvidia.com/gpu.family: ampere # <- 🤔

 

Devoxx France 2025

NVIDIA GPU Operator

Devoxx France 2025

NVIDIA GPU Operator

Opérateur Kubernetes, plusieurs composants :

  • NVIDIA GPU Operator, CQFD
  • NVIDIA GPU Driver
  • NVIDIA Container Toolkit
  • NVIDIA Kubernetes Device Plugin
  • NVIDIA GPU Feature Discovery
  • NVIDIA MIG Manager
  • NVIDIA DCGM Exporter
  • D'autres trucs qu'on aura pas le temps de traiter (KubeVirt, Confidential Computing, Kata, etc.)

 

Devoxx France 2025

NVIDIA GPU Operator

center

 

Devoxx France 2025

NVIDIA GPU Operator

Opérateur Kubernetes, plusieurs composants :

  • NVIDIA GPU Operator
  • NVIDIA GPU Driver
  • NVIDIA Container Toolkit
  • NVIDIA Kubernetes Device Plugin
  • NVIDIA GPU Feature Discovery
  • NVIDIA MIG Manager
  • NVIDIA DCGM Exporter

 

 

Devoxx France 2025

Composants : NVIDIA GPU Operator

Custom Resource nvidia.com/v1/clusterpolicies

apiVersion: nvidia.com/v1
kind: ClusterPolicy
metadata:
   name: cluster-policy
spec:
  driver:
    enabled: true
      hostPaths:
    driverInstallDir: /run/nvidia/driver
    rootFS: /
  migManager:
    config:
      default: all-disabled
      name: default-mig-parted-config
    enabled: true
  [...]
Devoxx France 2025

NVIDIA GPU Operator

Opérateur Kubernetes, plusieurs composants :

  • NVIDIA GPU Operator
  • NVIDIA GPU Driver
  • NVIDIA Container Toolkit
  • NVIDIA Kubernetes Device Plugin
  • NVIDIA GPU Feature Discovery
  • NVIDIA MIG Manager
  • NVIDIA DCGM Exporter

 

 

Devoxx France 2025

Composants : NVIDIA GPU Driver

  • Si besoin, installe le driver NVIDIA (optionnel)
$ kubectl logs nvidia-driver-daemonset-zljb6
  The kernel was built by: gcc (Ubuntu 11.4.Cleaning kernel module build directory.
Building kernel modules:

  [##############################] 100%
Kernel module compilation complete.
Kernel messages:
[  405.347857] nvidia: loading out-of-tree module taints kernel.
[  405.347875] nvidia: module license 'NVIDIA' taints kernel.
[  405.347879] Disabling lock debugging due to kernel taint
[  405.361004] nvidia: module verification failed: signature and/or required key missing - tainting kernel
[  405.385913] nvidia-nvlink: Nvlink Core is being initialized, major device number 235
[  405.385920] NVRM: loading NVIDIA UNIX x86_64 Kernel Module  550.90.07  Fri May 31 09:35:42 UTC 2024
[  405.458423] nvidia_uvm: module uses symbols from proprietary module nvidia, inheriting taint.
[  405.464070] nvidia-uvm: Loaded the UVM driver, major device number 511.
[  405.469814] nvidia-modeset: Loading NVIDIA Kernel Mode Setting Driver for UNIX platforms  550.90.07  Fri May 31 09:30:47 UTC 2024
[  405.476414] nvidia-modeset: Unloading
[  405.523298] nvidia-uvm: Unloaded the UVM driver.
[  405.564398] nvidia-nvlink: Unregistered Nvlink Core, major device number 235
Installing 'NVIDIA Accelerated Graphics Driver for Linux-x86_64' (550.90.07):: Installing

 

Devoxx France 2025

Composants : NVIDIA GPU Driver

Old Good Times 🧓

center

Devoxx France 2025

Composants : NVIDIA GPU Driver

  • Version act. 550.144.03, défini dans la CRD ClusterPolicy de l'opérateur
  • Possibilité d'utiliser des drivers pré-compilés (Technology Preview)
  • Possibilité d'avoir plusieurs drivers (Technology Preview), CRD NVIDIADriver

center

Devoxx France 2025

NVIDIA GPU Operator

Opérateur Kubernetes, plusieurs composants :

  • NVIDIA GPU Operator
  • NVIDIA GPU Driver
  • NVIDIA Container Toolkit
  • NVIDIA Kubernetes Device Plugin
  • NVIDIA GPU Feature Discovery
  • NVIDIA MIG Manager
  • NVIDIA DCGM Exporter

 

 

Devoxx France 2025

Composants : NVIDIA Container Toolkit

  • Installation du container runtime pour permettre l'accès au GPU depuis les conteneurs.
  • Patch de /etc/containerd/config.toml
    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options]
      BinaryName = "/usr/local/nvidia/toolkit/nvidia-container-runtime"
      SystemdCgroup = true
      imports = ["/etc/containerd/default.toml"]
    
  • Définition d'un runtimeClass nvidia
    kubectl describe runtimeclass nvidia
    Name:         nvidia
    Namespace:
    Labels:       app.kubernetes.io/component=gpu-operator
    API Version:  node.k8s.io/v1
    Handler:      nvidia
    Kind:         RuntimeClass
    
Devoxx France 2025

Composants : NVIDIA Container Toolkit

center

Devoxx France 2025

Composants : NVIDIA Container Toolkit

  • Optionnel (sinon doit être déjà installé sur le node)
  • runtimeClass par défaut sur le node GPU
apiVersion: apps/v1
kind: Deployment
[..]
    spec:
      runtimeClassName: nvidia # <-- ✅ NVIDIA Container Toolkit (*par défaut*)
      containers:
      - name: my-container-using-gpu
  • 💡 Pour aller plus loin : Container Device Interface (CDI)

 

 

Devoxx France 2025

NVIDIA GPU Operator

Opérateur Kubernetes, plusieurs composants :

  • NVIDIA GPU Operator
  • NVIDIA GPU Driver
  • NVIDIA Container Toolkit
  • NVIDIA Kubernetes Device Plugin
  • NVIDIA GPU Feature Discovery
  • NVIDIA MIG Manager
  • NVIDIA DCGM Exporter

 

 

Devoxx France 2025

Composants : NVIDIA Kubernetes Device Plugin

  • Exposition automatique du nombre de GPUs de chaque node

    # kubectl get node gpu-l4-node-5430b1 -o yaml
    status:
      capacity:                  
        nvidia.com/gpu: "4"
      allocatable:               
        nvidia.com/gpu: "4"
    
  • Suivi de l'état de santé (health) des GPUs

  • Partage de ressources GPU entre pods (GPU Sharing 🎵)

  • ➡️ Voir concepts Kubernetes Device Plugins

 

Devoxx France 2025

Composants : NVIDIA Kubernetes Device Plugin

center

Devoxx France 2025

Composants : NVIDIA Kubernetes Device Plugin

  • Permet d'informer le 'scheduler' quels pods placer sur des nodes avec GPU
    apiVersion: apps/v1
    kind: Deployment
    [..]
        spec:
          runtimeClassName: nvidia # <-- ✅ NVIDIA Container Toolkit (par défaut)
          containers:
          - name: my-container-using-gpu
            resources:
              limits:
                nvidia.com/gpu: "1" # <-- ✅ NVIDIA Kubernetes Device Plugin
    
  • 📺 Sharing Is Caring: GPU Sharing and CDI in Device Plugins

 

Devoxx France 2025

NVIDIA GPU Operator

Opérateur Kubernetes, plusieurs composants :

  • NVIDIA GPU Operator
  • NVIDIA GPU Driver
  • NVIDIA Container Toolkit
  • NVIDIA Kubernetes Device Plugin
  • NVIDIA GPU Feature Discovery
  • NVIDIA MIG Manager
  • NVIDIA DCGM Exporter

 

 

Devoxx France 2025

Composants : NVIDIA GPU Feature Discovery

  • Ajout de labels GPU Feature Discovery (part of Kubernetes Device Plugin)
# kubectl get nodes gpu-l4-node-5430b1 -o yaml
metadata:
  labels:
    nvidia.com/cuda.driver-version.full: 550.90.07
    nvidia.com/cuda.runtime-version.full: "12.4"
    nvidia.com/gpu.count: "1"
    nvidia.com/gpu.deploy.container-toolkit: "true"
    nvidia.com/gpu.deploy.device-plugin: "true"
    nvidia.com/gpu.deploy.driver: "true"
    nvidia.com/gpu.deploy.gpu-feature-discovery: "true"
    nvidia.com/gpu.family: ampere
    nvidia.com/gpu.memory: "23034"
    nvidia.com/gpu.product: NVIDIA-L4
    nvidia.com/mig.capable: "false"
    nvidia.com/mig.strategy: single
    [...]
Devoxx France 2025

Composant bonus : Node Feature Discovery

  • 💡 Pas spécifique à NVIDIA, mais embarqué avec
# kubectl get nodes gpu-l4-node-5430b1 -o yaml 
metadata:
  labels:    
    feature.node.kubernetes.io/cpu-cpuid.ADX: "true"
    feature.node.kubernetes.io/cpu-hardware_multithreading: "false"
    feature.node.kubernetes.io/cpu-model.family: "25"
    feature.node.kubernetes.io/cpu-model.id: "17"
    feature.node.kubernetes.io/cpu-model.vendor_id: AMD
    feature.node.kubernetes.io/kernel-version.full: 5.15.0-121-generic
    feature.node.kubernetes.io/system-os_release.ID: ubuntu
    feature.node.kubernetes.io/system-os_release.VERSION_ID: "22.04"
    feature.node.kubernetes.io/system-os_release.VERSION_ID.major: "22"
    feature.node.kubernetes.io/system-os_release.VERSION_ID.minor: "04"
Devoxx France 2025

Exemple de déploiement conteneur GPU classique

my-app-using-gpu.yaml

apiVersion: apps/v1
kind: Deployment
[..]
    spec:
      runtimeClassName: nvidia # <-- ✅ NVIDIA Container Toolkit (par défaut)
      containers:
      - name: my-container-using-gpu
        [...]
        resources:
          limits:
            nvidia.com/gpu: "1" # <-- ✅ NVIDIA Kubernetes Device Plugin
      nodeSelector:
        nvidia.com/gpu.family: ampere # <-- ✅ NVIDIA GPU Feature Discovery
        feature.node.kubernetes.io/cpu-model.vendor_id: AMD # <-- ✅ Node Feature Discovery

 

Devoxx France 2025

Composants pour applis conteneur avec accès au GPU 🤯

❯ kubectl get pods
NAME                                                         READY   STATUS      RESTARTS      AGE
gpu-feature-discovery-8m6tj                                  1/1     Running     0             98m
gpu-operator-587db77bb5-zzrq7                                1/1     Running     4 (17h ago)   2d
gpu-operator-node-feature-discovery-gc-fc549bd94-9zsgc       1/1     Running     0             2d
gpu-operator-node-feature-discovery-master-b4bb855b7-s854s   1/1     Running     0             2d
gpu-operator-node-feature-discovery-worker-4p5mv             1/1     Running     0             2d
gpu-operator-node-feature-discovery-worker-6pbxt             1/1     Running     0             103m
gpu-operator-node-feature-discovery-worker-pp5kw             1/1     Running     4 (23h ago)   2d
nvidia-container-toolkit-daemonset-bggm4                     1/1     Running     0             98m
nvidia-cuda-validator-j9ps9                                  0/1     Completed   0             95m
nvidia-dcgm-exporter-gwd9k                                   1/1     Running     0             98m
nvidia-device-plugin-daemonset-zz7nw                         1/1     Running     0             98m
nvidia-driver-daemonset-zljb6                                1/1     Running     0             98m
nvidia-operator-validator-cb5px                              1/1     Running     0             98m

 

 

Devoxx France 2025

Démo time !

 

center

Devoxx France 2025

Quand j'ai plus de 2 applications

Sur mon cluster...

Devoxx France 2025

GPU Sharing

Devoxx France 2025

Stratégie 1 : Time Slicing

  • Découpage du GPU par slots de temps ("Round-Robin Scheduling")

 

center

 

Devoxx France 2025

Stratégie 1 : Time Slicing

# Values chart helm -> ConfigMap
devicePlugin:
  config:
    create: true
    default: "ts4"
    name: timeslicing-parted-config
    data:
      ts4: |-
        version: v1
        sharing:
          timeSlicing:
            resources:
              - name: nvidia.com/gpu
                replicas: 4
            renameByDefault: false # Pour que ce soit transparent pour l'appli
            failRequestsGreaterThanOne: false

 

 

Devoxx France 2025

Stratégie 1 : Time Slicing

# kubectl describe node
labels:
  nvidia.com/gpu.product=NVIDIA-H100-SHARED
  nvidia.com/gpu.replicas=4
Capacity:                  
  nvidia.com/gpu:         4
Allocatable:               
  nvidia.com/gpu:         4

 

 

 

 

 

Devoxx France 2025

Stratégie 1 : Time Slicing

GPU Memory 😨

# nvidia-smi
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A    119580      C   /opt/venv/bin/python                         5236MiB |
|    0   N/A  N/A    119647      C   /opt/venv/bin/python                        17170MiB |
+-----------------------------------------------------------------------------------------+

center

Devoxx France 2025

Stratégie 2 : Multi-Process Service (MPS)

  • Partitionnement logique (experimental)
  • Géré par un serveur "MPS" sur le host

center

Devoxx France 2025

Stratégie 2 : Multi-Process Service (MPS)

# Values chart helm -> ConfigMap
devicePlugin:
  config:
    create: true
    default: "mps4"
    name: "mps-parted-config"
    data:
      mps4: |-
        version: v1
        sharing:
          mps:
            resources:
            - name: nvidia.com/gpu
              replicas: 4

 

 

Devoxx France 2025

Stratégie 3 : Multi-Instance GPUs (MIG)

  • Partitionnement hardware en "mini-GPUs"
  • Isolation complète entre les applications
  • Plusieurs profils de "mini-GPUs"

center

  • 💸 Disponible que sur modèles Ampere A100/H100 et plus
  • Composants: "NVIDIA MIG Manager" pour paramétrer les GPUs automatiquement

 

 

Devoxx France 2025

Stratégie 3 : Multi-Instance GPUs (MIG)

# Values chart helm 
mig:
  strategy: mixed # ou single
mig-configs:
  # A100-40GB, A800-40GB
  all-2g.10gb:
    - devices: all
      mig-enabled: true
      mig-devices:
        "2g.10gb": 3
  all-4g.20gb:
    - devices: all
      mig-enabled: true
      mig-devices:
        "4g.20gb": 1

 

Devoxx France 2025

NVIDIA GPU Operator

Opérateur Kubernetes, plusieurs composants :

  • NVIDIA GPU Operator
  • NVIDIA GPU Driver
  • NVIDIA Container Toolkit
  • NVIDIA Kubernetes Device Plugin
  • NVIDIA GPU Feature Discovery
  • NVIDIA MIG Manager
  • NVIDIA DCGM Exporter

 

 

Devoxx France 2025

Quelle stratégie ?

Well, it depends...

 
 
 
 
 
 
 

💡 Pour aller plus loin
📺 Dynamic Ressource Alloc.

 

 

Devoxx France 2025

Demo time !

 

center

Devoxx France 2025

"Une appli non monitorée,

ce n'est pas une application en prod"

Devoxx France 2025

NVIDIA GPU Operator

Opérateur Kubernetes, plusieurs composants :

  • NVIDIA GPU Operator
  • NVIDIA GPU Driver
  • NVIDIA Container Toolkit
  • NVIDIA Kubernetes Device Plugin
  • NVIDIA GPU Feature Discovery
  • NVIDIA MIG Manager
  • NVIDIA DCGM Exporter

 

 

Devoxx France 2025

Composants: NVIDIA DCGM Exporter

(Data Center GPU Manager)

center

Devoxx France 2025

Point Bonus

Déploiement sur les autres

Cloud Providers

Devoxx France 2025

GCP

Exemple: timeSlicing sur GKE

gcloud container clusters create CLUSTER_NAME \
    --region=COMPUTE_REGION \
    --cluster-version=CLUSTER_VERSION \
    --machine-type=MACHINE_TYPE \
    # Tout sur la même ligne, ici c'est pour la visibilité
    --accelerator=type=GPU_TYPE,\
        count=GPU_QUANTITY,\
        gpu-sharing-strategy=time-sharing,\
        max-shared-clients-per-gpu=CLIENTS_PER_GPU,\
        gpu-driver-version=DRIVER_VERSION

 

 

Devoxx France 2025

Amazon EKS

  1. Installation d'un cluster avec images AMI optimisées GPU
  2. Installation d'au moins du "NVIDIA device plugin" (avec ou sans l'opérateur)

Azure AKS

  1. Installation d'un cluster avec un nodepool images optimisées GPU
  2. Installation d'au moins du "NVIDIA device plugin" (avec ou sans l'opérateur)
  3. NVIDIA conseille même l'option --skip-gpu-driver-install
  4. ⚠️ "AKS GPU image (preview)" avec tout dedans est dépréciée 🤔

Scaleway

  1. Opérateur automatiquement déployé avec les nodepools GPUs 👏
Devoxx France 2025

Ressources

Devoxx France 2025

right

Merci !

Rémi Verchère

Abstract: Après avoir validé le POC du dernier projet IA, à grands coups de requêtes vers OpenAI, la DSI met le holà, impossible d’envoyer des informations de l’entreprise à un service tiers, on va gérer nos LLMs sur nos propres clusters Kubernetes ! Cela demande par contre d’avoir des GPUs (sic) pour que ce soit performant, accessibles aux applications conteneurisées, mais alors comment ça marche ?! Et puis les GPUs c’est cher, c’est rare, comment les utiliser au mieux sans exploser les budgets ? Je vous propose alors de voir ensemble comment, grâce à l’opérateur “NVIDIA GPU Operator“ on peut accéder à ces fameux GPUs : installation, configuration, interaction avec l’hôte et gestion des modules noyau, mais surtout les contraintes et divers modes de partage de ressources (time-slicing, mig), et d’autres add-ons sympa comme le “node-feature-discovery” pour utiliser au mieux les ressources, le tout en mode pas-à-pas. Après cette session, mes équipes de devs pourront enfin avoir du GPU dans leurs conteneurs

--- # Mon application a besoin de GPU ! ![bg right:35%](assets/question-repondue.png) ## Oui, mais pourquoi ? - Démocratisation de la **GenAI** ✨ - Quand le CPU ne suffit plus 🖥️ - Dev. des outils ~~inutiles & énergivores~~ cools 🤭 - Générer des articles techs ou abstracts CFP 🤭 ## Problématique - Plus de crédits vers OpenAI - Besoin de contrôler les données générées - ➡️ Comment on gère sur nos clusters K8S ?

--- # Mise en situation > L'entreprise "**Massil.IA**" développe des applications ultra tendance. Ce sont pour l'instant des 'POCs' qui font des calls API vers *OpenAI*. La DSI souhaite arrêter l'hémoragie des tokens, maitriser les données générées, et oblige à installer de cartes GPU sur les machines au sein du cluster Kubernetes où sont hébergées les applications. &nbsp; ➡️ Comment on gère sur nos clusters K8S l'accès aux GPUs ? ![bg fill right:33%](assets/gpu-marseille.png)

Compute Unified Device Architecture

On verra plus tard comment tout cela s'installe sur les GAFAMs

- CPU - Memory - GPU ??

Single vs Mixed: 1 ou plusieurs types de GPU par node