Maison >Opération et maintenance >Docker >qu'est-ce que nvidia docker2
nvidia-docker2.0 est un package simple, qui permet principalement à Docker d'utiliser le runtime NVIDIA Container en modifiant le fichier de configuration de Docker "/etc/docker/daemon.json".
L'environnement d'exploitation de cet article : système Windows 10, Docker version 20.10.11, ordinateur Dell G3.
Présentation de NVidia Docker
NVIDIA a commencé à concevoir NVIDIA-Docker en 2016 pour faciliter les conteneurs utilisant les GPU NVIDIA. La première génération de nvidia-docker1.0 implémentait l'encapsulation du client Docker et montait les périphériques GPU et les bibliothèques nécessaires dans le conteneur lors du démarrage du conteneur. Cependant, cette méthode de conception est fortement couplée au runtime Docker et manque de flexibilité. Les défauts existants sont les suivants :
La conception est fortement couplée à Docker et ne prend pas en charge les autres environnements d'exécution de conteneurs. Tels que : les environnements d'exécution LXC, CRI-O et de conteneurs qui pourraient être ajoutés à l'avenir.
Vous ne pouvez pas mieux utiliser les autres outils de l'écosystème Docker. Tels que : docker composer.
Le GPU ne peut pas être utilisé comme ressource du système de planification pour une planification flexible.
Améliorez la prise en charge du GPU pendant l'exécution du conteneur. Par exemple : obtenez automatiquement les bibliothèques de pilotes NVIDIA au niveau utilisateur, les modules du noyau NVIDIA, l'ordre des périphériques, etc.
Sur la base des inconvénients décrits ci-dessus, NVIDIA a commencé la conception du runtime de conteneur de nouvelle génération : nvidia-docker2.0.
Le mécanisme d'implémentation de nvidia-docker 2.0
Tout d'abord, présentons brièvement la relation directe entre nvidia-docker 2.0, containersd, nvidia-container-runtime, libnvidia-container et runc.
La relation entre eux peut être liée à l'image suivante :
nvidia-docker 2.0
nvidia-docker2.0 est un package simple, qui modifie principalement le fichier de configuration du docker /etc /docker/daemon .json pour permettre à Docker d'utiliser le runtime NVIDIA Container.
nvidia-container-runtime
nvidia-container-runtime est la véritable partie centrale. Il ajoute un hook de pré-démarrage basé sur le runtime d'origine du conteneur Docker pour appeler la bibliothèque libnvidia-container.
libnvidia-container
libnvidia-container fournit une bibliothèque et un outil CLI simple qui peut être utilisé pour que les GPU NVIDIA soient utilisés par les conteneurs Linux.
Containerd
Containerd est principalement responsable de :
Gérer le cycle de vie des conteneurs (de la création à la destruction des conteneurs)
Pull/push des images des conteneurs
Gestion du stockage (gérer les images) et stockage des données du conteneur)
Appelez runc pour exécuter le conteneur
Gérer l'interface réseau et le réseau du conteneur
Une fois que conteneurd a reçu la demande, effectuez les préparatifs pertinents et vous pouvez choisir d'appeler lui-même, runc peut également créer containersd-shim, puis appeler runc, et runc crée le conteneur basé sur le fichier OCI. Ce qui précède est le processus de base de la création de conteneurs ordinaires.
RunC
RunC est un outil léger il est utilisé pour exécuter des conteneurs. Il n'est utilisé que pour faire une chose et bien la faire. Nous pouvons le considérer comme un gadget en ligne de commande capable d’exécuter des conteneurs directement sans passer par le moteur Docker. En fait, runC est un produit de standardisation et crée et exécute des conteneurs conformément aux normes OCI. L'organisation OCI (Open Container Initiative) a pour objectif de développer un standard industriel ouvert autour des formats et des runtimes de conteneurs.
Vous pouvez utiliser directement la ligne de commande RunC pour créer un conteneur et fournir des capacités d'interaction simples.
Les fonctions de chaque composant et la relation entre eux ont été présentées ci-dessus. Ensuite, l'image suivante sera décrite en détail :
Le processus normal de création d'un conteneur est le suivant :
docker --> dockerd --> containerd--> containerd-shim -->runc --> container-process
Le client Docker. va créer La demande de conteneur est envoyée à dockerd Lorsque dockerd reçoit la tâche de demande, il envoie la demande à conteneurd après vérification, conteneurd démarre conteneurd-shim ou démarre lui-même le processus de conteneur.
Créer un conteneur qui utilise GPU
Le processus de création d'un conteneur GPU est le suivant :
docker--> dockerd --> containerd --> containerd-shim--> nvidia-container-runtime --> nvidia-container-runtime-hook --> libnvidia-container --> runc -- > container-process
Le processus de base est similaire à celui d'un conteneur qui n'utilise pas GPU, sauf que le runtime par défaut de docker est remplacé par le propre nvidia-container-runtime de NVIDIA.
De cette façon, lorsque nvidia-container-runtime crée un conteneur, il exécute d'abord le hook nvidia-container-runtime-hook pour vérifier si le conteneur doit utiliser le GPU (à en juger par la variable d'environnement NVIDIA_VISIBLE_DEVICES). Si nécessaire, appelez libnvidia-container pour exposer le GPU au conteneur. Sinon, la logique runc par défaut est utilisée.
À ce stade, le mécanisme général de nvidia-docker2.0 est fondamentalement clair. Cependant, les projets impliquant nvidia-container-runtime, libnvidia-container, containersd et runc ne seront pas présentés un par un dans cet article. Si vous êtes intéressé, vous pouvez explorer et apprendre par vous-même. Les adresses de ces projets ont été liées dans l'article.
Apprentissage recommandé : "Tutoriel vidéo Docker"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!