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