Was ist NVIDIA Docker2?

藏色散人
Freigeben: 2021-12-08 17:27:52
Original
4293 Leute haben es durchsucht

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.

Was ist NVIDIA Docker2?

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:

Was ist NVIDIA Docker2?

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.

RunC

Was ist NVIDIA Docker2?

RunC ist ein leichtes Tool. Es dient nur dazu, eine Sache zu erledigen, und zwar gut. Wir können es uns als ein Befehlszeilen-Gadget vorstellen, das Container direkt ausführen kann, ohne die Docker-Engine zu durchlaufen. Tatsächlich ist runC ein Produkt der Standardisierung und erstellt und führt Container gemäß OCI-Standards aus. Die Organisation OCI (Open Container Initiative) hat sich zum Ziel gesetzt, einen offenen Industriestandard rund um Containerformate und Laufzeiten zu entwickeln.

Sie können die RunC-Befehlszeile direkt verwenden, um einen Container zu erstellen und einfache Interaktionsfunktionen bereitzustellen.

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
Nach dem Login kopieren

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.

Was ist NVIDIA Docker2?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
Nach dem Login kopieren
Der grundlegende Prozess ähnelt dem eines Containers, der keine GPU verwendet, mit der Ausnahme, dass die Standardlaufzeit von Docker dies ist ersetzt durch NVIDIAs eigene nvidia-container-runtime .

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage