
Docker avec accès à votre carte graphique
Dernière révision :
Chaque serveur de modèles de cette série tourne dans un conteneur : il s'installe proprement, se désinstalle proprement, et deux versions peuvent cohabiter. Deux pièces, aucune n'est de nous : Docker, et le Container Toolkit de NVIDIA.
Un peu d'histoire
Docker, sorti en 2013, a permis d'expédier toute une application comme une seule image qui tourne pareil partout. Les cartes graphiques sont venues plus tard : un conteneur ne voit pas les périphériques de l'hôte par défaut. Le toolkit de conteneurs de NVIDIA fait le pont, et la plus récente Container Device Interface (CDI) décrit les périphériques dans un simple fichier que tout moteur de conteneurs sait lire, ce qui explique aussi pourquoi ce fichier doit rester au pas du pilote.
1. Docker
Le script d'installation de Docker installe la dernière version. Docker le réserve aux machines de test et de développement ; pour un serveur de production, utilisez la méthode par dépôt de leur documentation.
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
2. NVIDIA Container Toolkit (Ubuntu, Debian)
D'après le guide d'installation de NVIDIA :
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
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
Autres distributions : suivez le même guide sur le site de NVIDIA.
3. Tester
sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
Le même tableau que sur l'hôte, affiché depuis l'intérieur d'un conteneur : vos conteneurs voient la carte.
Le piège après une mise à jour du pilote
Si vous utilisez CDI (le fichier /etc/cdi/nvidia.yaml), il décrit les bibliothèques du pilote telles qu'elles étaient au moment où il a été généré. Après une mise à jour du pilote, il peut pointer vers des fichiers qui n'existent plus, et plus aucun conteneur GPU ne démarre. Voir le conteneur GPU sur le processeur pour le correctif au démarrage. Régénérez-le : sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml. Chez nous, il est désormais régénéré à chaque démarrage.
Sources
Utile ? Dites-nous ce qu'il faut mesurer ensuite.