Page cover

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 NVIDIA

Vous 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-550

Tester la version du driver installé avec la commande nvidia-smi

# get the driver version
nvidia-smi --query-gpu=driver_version --format=csv,noheader

Dans 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 535

Vé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 nvidia

Si 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_modeset

Vé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]\+'
nvidia0

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=docker

La 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-smi

vous devez avoir ce résultat:

Félicitation 🎉🎉 vous avez un GPU de configuré sur votre Docker

Liens utiles

Mis à jour