nvidia-docker2.0 ist ein einfaches Paket, das es Docker hauptsächlich ermöglicht, die NVIDIA-Container-Laufzeitumgebung zu verwenden, indem die Docker-Konfigurationsdatei „/etc/docker/daemon.json“ geändert wird.
Die Betriebsumgebung dieses Artikels: Windows 10-System, Docker-Version 20.10.11, Dell G3-Computer.
Einführung in NVidia Docker
NVIDIA begann 2016 mit der Entwicklung von NVIDIA-Docker, um Container mit NVIDIA-GPUs zu ermöglichen. Der nvidia-docker1.0 der ersten Generation implementiert die Kapselung des Docker-Clients und stellt beim Starten des Containers die erforderlichen GPU-Geräte und Bibliotheken in den Container bereit. Diese Entwurfsmethode ist jedoch stark mit der Docker-Laufzeit gekoppelt und weist einen Mangel an Flexibilität auf. Die bestehenden Mängel sind wie folgt:
Das Design ist stark mit Docker gekoppelt und unterstützt keine anderen Container-Laufzeiten. Zum Beispiel: LXC, CRI-O und Containerlaufzeiten, die möglicherweise in Zukunft hinzugefügt werden.
Man kann andere Tools im Docker-Ökosystem nicht besser nutzen. Zum Beispiel: Docker Compose.
GPU kann nicht als Ressource des Planungssystems für flexible Planung verwendet werden.
Verbessern Sie die GPU-Unterstützung während der Containerlaufzeit. Beispiel: Erhalten Sie automatisch NVIDIA-Treiberbibliotheken auf Benutzerebene, NVIDIA-Kernelmodule, Gerätereihenfolge usw.
Basierend auf den oben beschriebenen Nachteilen begann NVIDIA mit dem Design der Container-Laufzeit der nächsten Generation: nvidia-docker2.0.
Der Implementierungsmechanismus von Nvidia-Docker 2.0
Stellen Sie zunächst kurz die direkte Beziehung zwischen Nvidia-Docker 2.0, Containerd, Nvidia-Container-Runtime, Libnvidia-Container und Runc vor.
Die Beziehung zwischen ihnen kann durch das folgende Bild dargestellt werden:
nvidia-docker 2.0
nvidia-docker2.0 ist ein einfaches Paket, das hauptsächlich die Docker-Konfigurationsdatei /etc/docker/daemon ändert .json, damit Docker die NVIDIA Container-Laufzeitumgebung nutzen kann.
nvidia-container-runtime
nvidia-container-runtime ist der eigentliche Kernteil. Es fügt einen Prestart-Hook hinzu, der auf dem ursprünglichen Docker-Container-Runtime-Runc basiert, um die libnvidia-container-Bibliothek aufzurufen.
libnvidia-container
libnvidia-container bietet eine Bibliothek und ein einfaches CLI-Tool, mit dem NVIDIA-GPUs für Linux-Container erstellt werden können.
Containerd
Containerd ist hauptsächlich verantwortlich für:
Verwaltung des Lebenszyklus von Containern (von der Containererstellung bis zur Zerstörung)
Containerbilder ziehen/schieben
Speicherverwaltung (Bilder verwalten) und Speicherung von Containerdaten)
Rufen Sie runc auf, um den Container auszuführen.
Verwalten Sie die Netzwerkschnittstelle und das Netzwerk des Containers Wenn Sie es selbst tun, kann Runc auch Containerd-Shim erstellen und dann Runc aufrufen, und Runc erstellt den Container basierend auf der OCI-Datei. Das Obige ist der grundlegende Prozess der normalen Containererstellung.
Die Funktionen der einzelnen Komponenten und die Beziehung zwischen ihnen wurden oben vorgestellt. Als nächstes wird das folgende Bild im Detail beschrieben:
Der normale Prozess zum Erstellen eines Containers ist wie folgt:
docker --> dockerd --> containerd--> containerd-shim -->runc --> container-process
Der Docker-Client wird erstellt Die Containeranforderung wird an Docker gesendet. Wenn Docker die Anforderungsaufgabe empfängt, sendet es die Anforderung an Containerd. Nach der Überprüfung und Überprüfung startet Containerd den Containerprozess selbst.
Erstellen Sie einen Container, der die GPU verwendet.
Der Prozess zum Erstellen eines GPU-Containers ist wie folgt:docker--> dockerd --> containerd --> containerd-shim--> nvidia-container-runtime --> nvidia-container-runtime-hook --> libnvidia-container --> runc -- > container-process
Auf diese Weise führt nvidia-container-runtime beim Erstellen eines Containers zunächst den Hook nvidia-container-runtime-hook aus, um zu prüfen, ob der Container die GPU verwenden muss (beurteilt anhand der Umgebungsvariablen NVIDIA_VISIBLE_DEVICES). Rufen Sie bei Bedarf libnvidia-container auf, um die GPU dem Container zugänglich zu machen. Andernfalls wird die Standard-Runc-Logik verwendet.
An diesem Punkt ist der allgemeine Mechanismus von nvidia-docker2.0 grundsätzlich klar. Die Projekte mit nvidia-container-runtime, libnvidia-container, containerd und runc werden in diesem Artikel jedoch nicht einzeln vorgestellt. Wenn Sie interessiert sind, können Sie es auf eigene Faust erkunden und lernen. Die Adressen dieser Projekte sind im Artikel verlinkt.
Empfohlenes Lernen: „Docker-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonWas ist NVIDIA Docker2?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!