NVIDIA GPUs sur Docker
Ajouter un GPU à Docker m'a permis de jouer avec Jellyfin et LLaMA sur un serveur Docker
Vous pouvez retrouver toutes les informations sur la page dédié à Kubernetes et sur le site officiel NVIDIA
Configuration NVIDIA sur Ubuntu
Vérifier la présence de la carte GPU
Utiliser lspci pour faire apparaitre les informations PCI sur votre système et ainsi vérifier la présence de votre carte GPU.
# list all PCI devices with the text NVIDIA
sudo lspci | grep NVIDIAVous devriez voir:
sudo lspci | grep NVIDIA
01:00.0 VGA compatible controller: NVIDIA Corporation TU102 [GeForce RTX 2080 Ti Rev. A] (rev a1)
01:00.1 Audio device: NVIDIA Corporation TU102 High Definition Audio Controller (rev a1)
01:00.2 USB controller: NVIDIA Corporation TU102 USB 3.1 Host Controller (rev a1)
01:00.3 Serial bus controller: NVIDIA Corporation TU102 USB Type-C UCSI Controller (rev a1)Vérification des drivers GPU NVIDIA
Utiliser la recherche sur le site de téléchargement des drivers NVIDIA pour trouver le dernier recommandé pour votre carte.
Par exemple pour ma 2080TI
Version
550.78
Release Date
2024.4.25
Operating System
Linux 64-bit
Language
English (US)
File Size
292.67 MB
Ce qui veut dire que l'on doit prendre la version 550+
Installation des drivers GPU
Il existe plusieurs methode pour installer les drivers sur mon serveur Ubuntu 24.04 LTS:
Officiel Ubuntu NVIDIA drivers via
ubuntu-drivers install(lien)Officiel NVIDIA driver via
.run file(lien)Non officiel version driver NVIDIA via
ppa:graphics-drivers/ppa(lien)
Dans mon cas pour notre installation nous utiliserons l'option (ppa)
Ajouter le repo PPA et installer la version de driver trouvé sur le site officiel.
# add ppa:graphics-driver repo to apt
sudo add-apt-repository ppa:graphics-drivers/ppa --yes
# update apt content list
sudo apt update
# Install GCC Compiler
sudo apt install build-essential
# install driver
sudo apt install nvidia-driver-550Tester la version du driver installé avec la commande nvidia-smi
# get the driver version
nvidia-smi --query-gpu=driver_version --format=csv,noheaderDans mon cas j'ai comme retour 550.78
Pour voir la liste des packages installé utilisé dpkg -l avec "nvidia" ou "550"
dpkg -l | grep nvidia
# or
dpkg -l | grep 535Vérifier les modules kernel installé en utilisant lsmod qui permet de lister ce qui se trouve dans /proc/modules
# Show the status of driver modules in the Linux Kernel
lsmod | grep nvidiaSi tout semble bon vous devriez avoir:
# lsmod | grep nvidia
nvidia_uvm 4931584 12
nvidia_drm 122880 0
nvidia_modeset 1355776 1 nvidia_drm
nvidia 54239232 41 nvidia_uvm,nvidia_modeset
i2c_nvidia_gpu 12288 0
i2c_ccgx_ucsi 12288 1 i2c_nvidia_gpu
video 73728 1 nvidia_modesetVérifiez le fichier de version du pilote du kernel:
cat /proc/driver/nvidia/version# cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 550.78 Sun Apr 14 06:35:45 UTC 2024
GCC version: gcc version 13.2.0 (Ubuntu 13.2.0-23ubuntu4)Vérifiez le fichier de périphérique NVIDIA trouvé:
# any device files (I/O sys calls)
ls /dev/ | grep 'nvidia[0-9]\+'Votre serveur maintenant a bien un GPU NVIDIA d'installé et fonctionnel si le retour de la commande est:
# ls /dev/ | grep 'nvidia[0-9]\+'
nvidia0TIPS
Pour éviter un changement ou une mise à jour non planifié, nous devons appliquer un hold sur les packages
# any package with nvidia in the name should be held
dpkg-query -W --showformat='${Package} ${Status}\n' | \
grep -v deinstall | \
awk '{ print $1 }' | \
grep -E 'nvidia.*-[0-9]+$' | \
xargs -r -L 1 sudo apt-mark holdCe qui donne:
#...
libnvidia-cfg1-550 passé en figé (« hold »).
libnvidia-common-550 passé en figé (« hold »).
libnvidia-compute-550 passé en figé (« hold »).
libnvidia-decode-550 passé en figé (« hold »).
libnvidia-encode-550 passé en figé (« hold »).
libnvidia-extra-550 passé en figé (« hold »).
libnvidia-fbc1-550 passé en figé (« hold »).
libnvidia-gl-550 passé en figé (« hold »).
nvidia-compute-utils-550 passé en figé (« hold »).
nvidia-dkms-550 passé en figé (« hold »).
nvidia-driver-550 passé en figé (« hold »).
nvidia-kernel-common-550 passé en figé (« hold »).
nvidia-kernel-source-550 passé en figé (« hold »).
nvidia-utils-550 passé en figé (« hold »).Avant une mise à jour planifié, il faut penser à retirer le tag hold sur les packages en faisant
sudo apt-mark unhold [package_name]Installation du Container Toolkit NVIDIA
Vous pouvez trouver le guide d'installation officiel de NVIDIA
# add nvidia-container-toolkit repo to apt sources
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# update apt content
sudo apt update
# install container toolkit
sudo apt install -y nvidia-container-toolkit
Mon environnement Kubernetes étant sur containerd, nous avons besoin de mettre à jour la configuration runtime classes.
Configuration du Container Toolkit NVIDIA
Configurer le container runtme en utilisant la commande nvidia-ctk
sudo nvidia-ctk runtime configure --runtime=dockerLa commande nvidia-ctk modifie le fichier /etc/docker/daemon.json sur le serveur. Le fichier mis à jour permet à Docker d'utiliser le container Runtime de NVIDIA.
Si vous ouvrez le fichier vous devriez avoir ce qui suit:
{
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
}
}Relancer Docker pour la prise en compte du fichier mis à jour.
Tester votre installation du container
Vous pouvez tester votre installation en exécutant un container qui fait appel au GPU NVIDIA
Exécuter un container CUDA
sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smivous devez avoir ce résultat:

Félicitation 🎉🎉 vous avez un GPU de configuré sur votre Docker
Liens utiles
Mis à jour