Zum Inhalt springen

Docker Schnellstartanleitung für Ultralytics

Ultralytics Docker-Paket Visuell

Dieser Leitfaden dient als umfassende Einführung in die Einrichtung einer Docker-Umgebung für deine Ultralytics Projekte. Docker ist eine Plattform für die Entwicklung, den Versand und die Ausführung von Anwendungen in Containern. Sie ist besonders nützlich, um sicherzustellen, dass die Software immer gleich läuft, unabhängig davon, wo sie eingesetzt wird. Weitere Informationen findest du im Ultralytics Docker Repository auf Docker Hub.

Docker Image Version Docker Pulls

Was du lernen wirst

  • Einrichten von Docker mit NVIDIA Unterstützung
  • Installation von Ultralytics Docker-Images
  • Ultralytics in einem Docker-Container mit CPU oder GPU Unterstützung ausführen
  • Verwendung eines Display-Servers mit Docker zur Anzeige von Ultralytics Erkennungsergebnissen
  • Lokale Verzeichnisse in den Container einbinden

Voraussetzungen

  • Stelle sicher, dass Docker auf deinem System installiert ist. Falls nicht, kannst du es von der Website von Docker herunterladen und installieren.
  • Vergewissere dich, dass dein System eine NVIDIA GPU hat und NVIDIA Treiber installiert sind.

Docker einrichten mit NVIDIA Unterstützung

Überprüfe zunächst, ob die NVIDIA Treiber richtig installiert sind, indem du sie ausführst:

nvidia-smi

Installation von NVIDIA Docker Runtime

Jetzt installieren wir die NVIDIA Docker-Laufzeitumgebung, um die GPU Unterstützung in Docker-Containern zu aktivieren:

# Add NVIDIA package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(lsb_release -cs)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

# Install NVIDIA Docker runtime
sudo apt-get update
sudo apt-get install -y nvidia-docker2

# Restart Docker service to apply changes
sudo systemctl restart docker

NVIDIA Runtime mit Docker verifizieren

Lauf docker info | grep -i runtime um sicherzustellen, dass nvidia erscheint in der Liste der Laufzeiten:

docker info | grep -i runtime

Installation von Ultralytics Docker Images

Ultralytics bietet mehrere Docker-Images, die für verschiedene Plattformen und Anwendungsfälle optimiert sind:

  • Dockerfile: GPU image, ideal für die Ausbildung.
  • Dockerfile-arm64: Für die ARM64-Architektur, geeignet für Geräte wie den Raspberry Pi.
  • Dockerfile-cpu: CPU-only Version für Inferenz und nichtGPU Umgebungen.
  • Dockerfile-Jetson: Optimiert für NVIDIA Jetson-Geräte.
  • Dockerfile-python: Minimale Python Umgebung für leichtgewichtige Anwendungen.
  • Dockerfile-conda: Enthält Miniconda3 und das Ultralytics Paket, das über Conda installiert wird.

So ziehst du das neueste Bild:

# Set image name as a variable
t=ultralytics/ultralytics:latest

# Pull the latest Ultralytics image from Docker Hub
sudo docker pull $t

Ultralytics in Docker Container ausführen

Hier erfährst du, wie du den Ultralytics Docker-Container ausführst:

Wenn du nur die CPU

# Run with all GPUs
sudo docker run -it --ipc=host $t

GPUs verwenden

# Run with all GPUs
sudo docker run -it --ipc=host --gpus all $t

# Run specifying which GPUs to use
sudo docker run -it --ipc=host --gpus '"device=2,3"' $t

Die -it Flag weist ein Pseudo-TTY zu und hält stdin offen, damit du mit dem Container interagieren kannst. Die --ipc=host Flag ermöglicht die gemeinsame Nutzung des IPC-Namensraums des Hosts, der für die gemeinsame Nutzung von Speicher durch Prozesse unerlässlich ist. Die --gpus Flag ermöglicht dem Container den Zugriff auf die GPUs des Hosts.

Ultralytics in Docker Container ausführen

Hier erfährst du, wie du den Ultralytics Docker-Container ausführst:

Wenn du nur die CPU

# Run with all GPUs
sudo docker run -it --ipc=host $t

GPUs verwenden

# Run with all GPUs
sudo docker run -it --ipc=host --gpus all $t

# Run specifying which GPUs to use
sudo docker run -it --ipc=host --gpus '"device=2,3"' $t

Die -it Flag weist ein Pseudo-TTY zu und hält stdin offen, damit du mit dem Container interagieren kannst. Die --ipc=host Flag ermöglicht die gemeinsame Nutzung des IPC-Namensraums des Hosts, der für die gemeinsame Nutzung von Speicher durch Prozesse unerlässlich ist. Die --gpus Flag ermöglicht dem Container den Zugriff auf die GPUs des Hosts.

Hinweis zur Zugänglichkeit von Dateien

Um mit Dateien auf deinem lokalen Rechner innerhalb des Containers zu arbeiten, kannst du Docker-Volumes verwenden:

# Mount a local directory into the container
sudo docker run -it --ipc=host --gpus all -v /path/on/host:/path/in/container $t

Ersetze /path/on/host mit dem Verzeichnispfad auf deinem lokalen Rechner und /path/in/container mit dem gewünschten Pfad innerhalb des Docker-Containers.

Ausführen von Anwendungen mit grafischer Benutzeroberfläche (GUI) in einem Docker-Container

Hochgradig experimentell - der Nutzer trägt das gesamte Risiko

Die folgenden Anweisungen sind experimentell. Die gemeinsame Nutzung eines X11-Sockets mit einem Docker-Container birgt potenzielle Sicherheitsrisiken. Es wird daher empfohlen, diese Lösung nur in einer kontrollierten Umgebung zu testen. Weitere Informationen findest du in diesen Ressourcen zur Verwendung von xhost(1)(2).

Docker wird in erster Linie zur Containerisierung von Hintergrundanwendungen und CLI Programmen verwendet, kann aber auch grafische Programme ausführen. In der Linux-Welt gibt es zwei wichtige Grafikserver für die grafische Darstellung: X11 (auch bekannt als das X Window System) und Wayland. Bevor du beginnst, musst du herausfinden, welchen Grafikserver du gerade verwendest. Führe diesen Befehl aus, um das herauszufinden:

env | grep -E -i 'x11|xorg|wayland'

Die Einrichtung und Konfiguration eines X11- oder Wayland-Anzeigeservers liegt außerhalb des Rahmens dieses Handbuchs. Wenn der obige Befehl kein Ergebnis liefert, musst du zunächst einen der beiden Server für dein System einrichten, bevor du fortfahren kannst.

Einen Docker Container mit einer GUI ausführen

Beispiel

GPUs verwenden
If you're using [GPUs](#using-gpus), you can add the `--gpus all` flag to the command.

Wenn du X11 verwendest, kannst du den folgenden Befehl ausführen, damit der Docker-Container auf den X11-Socket zugreifen kann:

xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/.Xauthority:/root/.Xauthority \
-it --ipc=host $t

Dieser Befehl setzt die DISPLAY Umgebungsvariable auf das Display des Hosts, hängt den X11-Socket ein und ordnet die .Xauthority Datei in den Container. Die xhost +local:docker Befehl ermöglicht es dem Docker-Container, auf den X11-Server zuzugreifen.

Für Wayland verwendest du den folgenden Befehl:

xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \
--net=host -it --ipc=host $t

Dieser Befehl setzt die DISPLAY Umgebungsvariable auf das Display des Hosts, hängt den Wayland-Socket ein und ermöglicht dem Docker-Container den Zugriff auf den Wayland-Server.

Docker mit einer GUI verwenden

Jetzt kannst du grafische Anwendungen in deinem Docker-Container anzeigen lassen. Du kannst zum Beispiel den folgenden CLI Befehl ausführen, um die Vorhersagen eines YOLOv8 Modells zu visualisieren:

yolo predict model=yolov8n.pt show=True
Testen

Eine einfache Methode, um zu überprüfen, ob die Docker-Gruppe Zugriff auf den X11-Server hat, ist die Ausführung eines Containers mit einem GUI-Programm wie xclock oder xeyes. Alternativ kannst du diese Programme auch in den Ultralytics Docker-Container installieren, um den Zugriff auf den X11-Server deines GNU-Linux-Displayservers zu testen. Wenn du auf Probleme stößt, kannst du die Umgebungsvariable -e QT_DEBUG_PLUGINS=1. Das Setzen dieser Umgebungsvariable ermöglicht die Ausgabe von Debugging-Informationen, die bei der Fehlersuche helfen.

Wenn du mit der Docker GUI fertig bist

Zugang widerrufen

Vergiss in beiden Fällen nicht, den Zugriff aus der Docker-Gruppe zu entziehen, wenn du fertig bist.

xhost -local:docker
Möchtest du die Bildergebnisse direkt im Terminal ansehen?

Beachte die folgende Anleitung zur Anzeige der Bildergebnisse mit einem Terminal


Herzlichen Glückwunsch! Du bist nun in der Lage, Ultralytics mit Docker zu verwenden und die Vorteile seiner leistungsstarken Funktionen zu nutzen. Alternative Installationsmethoden findest du in der Schnellstart-DokumentationUltralytics .

FAQ

Wie richte ich Ultralytics mit Docker ein?

Um Ultralytics mit Docker einzurichten, stelle zunächst sicher, dass Docker auf deinem System installiert ist. Wenn du eine NVIDIA GPU hast, installiere die NVIDIA Docker-Laufzeitumgebung, um die GPU Unterstützung zu aktivieren. Ziehe dann das neueste Ultralytics Docker-Image von Docker Hub mit dem folgenden Befehl:

sudo docker pull ultralytics/ultralytics:latest

Detaillierte Schritte findest du in unserem Docker Quickstart Guide.

Welche Vorteile hat die Verwendung von Ultralytics Docker-Images für Machine-Learning-Projekte?

Die Verwendung von Ultralytics Docker-Images sorgt für eine konsistente Umgebung auf verschiedenen Rechnern und repliziert dieselbe Software und Abhängigkeiten. Dies ist besonders nützlich für die Zusammenarbeit zwischen Teams, die Ausführung von Modellen auf verschiedenen Geräten und die Gewährleistung der Reproduzierbarkeit. Für den GPU-basierten Unterricht bietet Ultralytics optimierte Docker-Images wie Dockerfile für den allgemeinen Gebrauch GPU und Dockerfile-jetson für NVIDIA Jetson Geräte. Erkunde Ultralytics Docker Hub für weitere Details.

Wie kann ich Ultralytics YOLO in einem Docker-Container mit GPU Unterstützung ausführen?

Stelle zunächst sicher, dass die NVIDIA Docker-Laufzeitumgebung installiert und konfiguriert ist. Verwende dann den folgenden Befehl, um Ultralytics YOLO mit Unterstützung von GPU auszuführen:

sudo docker run -it --ipc=host --gpus all ultralytics/ultralytics:latest

Mit diesem Befehl wird ein Docker-Container mit GPU Zugriff eingerichtet. Weitere Informationen findest du im Docker Quickstart Guide.

Wie visualisiere ich YOLO Vorhersageergebnisse in einem Docker-Container mit einem Display-Server?

Um die Ergebnisse der YOLO Vorhersage mit einer grafischen Benutzeroberfläche in einem Docker-Container zu visualisieren, musst du Docker den Zugriff auf deinen Display-Server erlauben. Für Systeme, auf denen X11 läuft, lautet der Befehl:

xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/.Xauthority:/root/.Xauthority \
-it --ipc=host ultralytics/ultralytics:latest

Für Systeme, auf denen Wayland läuft, verwende:

xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \
--net=host -it --ipc=host ultralytics/ultralytics:latest

Weitere Informationen findest du im Abschnitt Ausführen von Anwendungen mit grafischer Benutzeroberfläche (GUI) in einem Docker Container.

Kann ich lokale Verzeichnisse in den Ultralytics Docker-Container einbinden?

Ja, du kannst lokale Verzeichnisse in den Ultralytics Docker-Container mounten, indem du die -v Flagge:

sudo docker run -it --ipc=host --gpus all -v /path/on/host:/path/in/container ultralytics/ultralytics:latest

Ersetze /path/on/host mit dem Verzeichnis auf deinem lokalen Rechner und /path/in/container mit dem gewünschten Pfad innerhalb des Containers. Auf diese Weise kannst du mit deinen lokalen Dateien innerhalb des Containers arbeiten. Weitere Informationen findest du in dem entsprechenden Abschnitt über lokale Verzeichnisse montieren.



Erstellt am 2023-11-12, Aktualisiert am 2024-07-05
Autoren: glenn-jocher (7), Burhan-Q (1), jpedrofonseca_94@hotmail.com (1)

Kommentare