Site officiel de NVIDIA Container Runtime
Dépôt GitHub : Docker est la technologie de conteneur la plus utilisée par les développeurs. Avec NVIDIA Container Runtime, les développeurs peuvent exposer les GPU NVIDIA aux applications du conteneur en enregistrant simplement un nouveau runtime lors de la création du conteneur. NVIDIA Container Runtime pour Docker est un projet open source hébergé sur GitHub.
Annuaire d'articles
Introduction
NVIDIA Container Runtime est un environnement d'exécution de conteneur compatible GPU, compatible avec la spécification Open Containers Initiative (OCI) utilisée par Docker, CRI-O et d'autres technologies de conteneurs populaires. Il simplifie le processus de création et de déploiement d'applications conteneurisées accélérées par GPU sur le bureau, cloud ou centres de données.
NVIDIA Container Runtime est un environnement d'exécution de conteneur compatible GPU qui est compatible avec la spécification Open Containers Initiative (OCI) utilisée par Docker, CRI-O et d'autres technologies de conteneurs populaires. Il simplifie le processus de création d'applications conteneurisées accélérées par GPU et de leur déploiement sur le bureau, le cloud ou le centre de données.
Grâce aux technologies de conteneur prises en charge par NVIDIA Container Runtime telles que Docker, les développeurs peuvent regrouper leurs applications accélérées par GPU ainsi que leurs dépendances dans un package unique garantissant les meilleures performances sur les GPU NVIDIA, quel que soit l'environnement de déploiement
. aux développeurs de regrouper leurs applications accélérées par GPU et leurs dépendances dans un package unique garantissant des performances optimales sur les GPU NVIDIA, quel que soit l'environnement de déploiement.
Installer
Cet article fait référence à la documentation d'installation officielle de NVIDIA Container Toolkit pour l'installer dans Ubuntu 22.04.
Exigences environnementales
- Le pilote NVIDIA Linux est installé et version >= 418.81.07
- Version du noyau > 3.10 GNU/Linux x86_64
- Docker >= 19.03
- GPU NVIDIA avec architecture >= Kepler (ou Compute Capability 3.0)
démarrer l'installation
- Configurer le référentiel de packages et la clé GPG
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& 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/$distribution/libnvidia-container.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
- Mettre à jour, télécharger et installer nvidia-docker2
sudo apt-get update
la mise à jour peut signaler une erreur :
sudo apt-get update
E : valeurs contradictoires définies pour l'option Signed-By concernant la source https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/amd64/ /: /usr/share/keyrings/nvidia- containers-toolkit-keyring.gpg !=
E : La liste des sources n'a pas pu être lue.
Pour des solutions, consultez le document officiel Valeurs conflictuelles définies pour l'option Erreur signée lors de l'exécution d'apt update
sudo apt-get install -y nvidia-docker2
sudo nvidia-ctk runtime configure --runtime=docker
- Redémarrez le démon Docker et testez
sudo systemctl restart docker
sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
Si vous voyez un résultat semblable à celui-ci, l’installation a réussi.
Exemple d'utilisation
Reportez-vous au document officiel Guide de l'utilisateur
Ajouter le runtime NVIDIA
Étant donné que nvidia-docker2 a été installé ci-dessus, il n'est pas nécessaire d'ajouter NVIDIA Runtime.
Définir les variables d'environnement
Les utilisateurs peuvent utiliser des variables d'environnement pour contrôler le comportement du runtime du conteneur NVIDIA, en particulier la possibilité d'énumérer les GPU et les pilotes.
Ces variables d'environnement ont déjà été définies dans l'image CUDA de base fournie par NVIDIA.
Énumération GPU
Utilisez --gpus ou utilisez la variable d'environnement NVIDIA_VISIBLE_DEVICES pour contrôler les GPU que le conteneur peut utiliser
La valeur de NVIDIA_VISIBLE_DEVICES est la suivante
Valeurs possibles |
Description |
---|---|
|
une liste d'UUID ou d'index GPU séparés par des virgules. |
|
tous les GPU seront accessibles, c'est la valeur par défaut dans les images de conteneur CUDA de base. |
|
aucun GPU ne sera accessible, mais les capacités du pilote seront activées. (Tous les GPU ne peuvent pas être utilisés, mais les capacités du pilote sont activées.) |
|
|
Lorsque vous utilisez --gpu pour spécifier le GPU, le paramètre périphérique doit également être utilisé. L'exemple est le suivant
docker run --gpus '"device=1,2"' \
nvidia/cuda nvidia-smi --query-gpu=uuid --format=csv
Activer tous les GPU
docker run --rm --gpus all nvidia/cuda nvidia-smi
Utilisez NVIDIA_VISIBLE_DEVICES pour activer tous les GPU
docker run --rm --runtime=nvidia \
-e NVIDIA_VISIBLE_DEVICES=all nvidia/cuda nvidia-smi
Utilisez NVIDIA_VISIBLE_DEVICES pour activer les GPU spécifiés
docker run --rm --runtime=nvidia \
-e NVIDIA_VISIBLE_DEVICES=1,2 \
nvidia/cuda nvidia-smi --query-gpu=uuid --format=csv
Démarrer un conteneur compatible GPU sur deux GPU
docker run --rm --gpus 2 nvidia/cuda nvidia-smi
Utilisez nvidia-smi pour interroger l'UUID du GPU et l'attribuer au conteneur
nvidia-smi -i 3 --query-gpu=uuid --format=csv
uuidGPU
-18a3e86f-4c0e-cd9f-59c3-55488c4b0c24
docker run --gpus device=GPU-18a3e86f-4c0e-cd9f-59c3-55488c4b0c24 \
nvidia/cuda nvidia-smi
Fonction d'entraînement
NVIDIA_DRIVER_CAPABILITIES contrôle quelles bibliothèques de pilotes/binaires sont montées dans le conteneur.
Les valeurs de NVIDIA_DRIVER_CAPABILITIES sont les suivantes
Valeurs possibles |
Description |
---|---|
|
une liste de pilotes séparés par des virgules dont le conteneur a besoin. |
|
activer toutes les fonctionnalités disponibles du pilote. |
vide ou non défini |
utiliser la capacité du pilote par défaut : |
Capacité du pilote |
Description |
---|---|
|
requis pour les applications CUDA et OpenCL. |
|
requis pour exécuter des applications 32 bits. |
|
requis pour exécuter les applications OpenGL et Vulkan. |
|
requis pour l'utilisation |
|
requis pour utiliser le SDK Video Codec. |
|
requis pour exploiter l’affichage X11. |
Par exemple, spécifiez computing et utility, deux façons d'écrire
docker run --rm --runtime=nvidia \
-e NVIDIA_VISIBLE_DEVICES=2,3 \
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility \
nvidia/cuda nvidia-smi
docker run --rm --gpus 'all,"capabilities=compute,utility"' \
nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
contrainte
Le runtime NVIDIA fournit également aux conteneurs la possibilité de définir des contraintes dans les fichiers de configuration
NVIDIA_REQUIRE_* est une expression logique utilisée pour définir des contraintes sur la version du logiciel ou l'architecture GPU sur le conteneur. Voici le contenu spécifique des contraintes.
Contrainte |
Description |
---|---|
|
contrainte sur la version du pilote CUDA. |
|
contrainte sur la version du pilote. |
|
contrainte sur les architectures de calcul des GPU sélectionnés. |
|
contrainte sur la marque des GPU sélectionnés (ex : GeForce, Tesla, GRID). |
NVIDIA_REQUIRE_CUDA "cuda>=11.0 driver>=450"
Voir le texte original pour plus d'informations
Fichier Docker
Cela peut être défini via des variables d'environnement, par exemple
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
Docker Composer
Reportez-vous au tutoriel dans la documentation officielle de Docker
Méthode d'écriture Compose v2.3
services:
test:
image: nvidia/cuda:10.2-base
command: nvidia-smi
runtime: nvidia
Cette façon d’écrire ne peut pas contrôler les propriétés spécifiques du GPU.
Un contrôle plus granulaire
- les valeurs des capacités
sont spécifiées sous forme de liste de chaînes (par exemple, capacités : [gpu]). Vous devez définir ce champ dans le fichier Compose. Sinon, il renverra une erreur lorsque le service sera déployé. - count
est spécifié comme une valeur int ou all indiquant le nombre de périphériques GPU qui doivent être réservés (en supposant que l'hôte dispose de ce nombre de GPU). - device_ids
est spécifié comme valeur d'une liste de chaînes représentant les ID de périphérique GPU de l'hôte. L'ID du périphérique se trouve dans la sortie nvidia-smi sur la machine hôte. - pilote
spécifié sous forme de valeur de chaîne (par exemple, pilote : 'nvidia') - options
représente une paire clé-valeur d’options spécifiques au pilote.
count et device_ids s’excluent mutuellement. Vous ne pouvez définir qu'un seul champ à la fois.
Pour plus d’informations sur ces propriétés, consultez la section Compose Spécification dans déployer.
Par exemple, utilisez tous les GPU sur l'hôte et les fonctions de pilote spécifiées (bien que la valeur de NVIDIA_DRIVER_CAPABILITIES puisse être tout, vous ne pouvez pas tout écrire ici, une erreur sera signalée, vous ne pouvez écrire chacun clairement)
services:
test:
image: nvidia/cuda:10.2-base
command: nvidia-smi
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [compute,graphics,video,utility,display]
Pour plus d'exemples de configuration, consultez la documentation officielle