Docker-Schnellstartanleitung für Ultralytics

Ultralytics Docker Package Visual

Diese Anleitung 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 bereitgestellt wird. Weitere Details findest du im Ultralytics Docker-Repository auf Docker Hub.

Docker Image Version Docker Pulls

Was du lernen wirst

  • Docker mit NVIDIA-Unterstützung einrichten
  • Installieren von Ultralytics Docker-Images
  • Ausführen von Ultralytics in einem Docker-Container mit CPU- oder GPU-Unterstützung
  • Verwendung eines Display-Servers mit Docker zur Anzeige von Ultralytics-Erkennungsergebnissen
  • Einbinden lokaler Verzeichnisse in den Container


Watch: How to Get started with Docker | Usage of Ultralytics Python Package inside Docker live demo 🎉

Voraussetzungen

  • Stelle sicher, dass Docker auf deinem System installiert ist. Falls nicht, kannst du es von der Docker-Website herunterladen und installieren.
  • Stelle sicher, dass dein System über eine NVIDIA GPU verfügt und die NVIDIA-Treiber installiert sind.
  • Wenn du NVIDIA Jetson-Geräte verwendest, stelle sicher, dass die passende JetPack-Version installiert ist. Weitere Details findest du in der NVIDIA Jetson-Anleitung.

Docker mit NVIDIA-Unterstützung einrichten

Überprüfe zunächst, ob die NVIDIA-Treiber ordnungsgemäß installiert sind, indem du Folgendes ausführst:

nvidia-smi

Installation des NVIDIA Container Toolkit

Lass uns nun das NVIDIA Container Toolkit installieren, um die GPU-Unterstützung in Docker-Containern zu aktivieren:

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
  | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
    | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

Aktualisiere die Paketlisten und installiere das Paket nvidia-container-toolkit:

sudo apt-get update

Installiere die neueste Version des nvidia-container-toolkit:

sudo apt-get install -y nvidia-container-toolkit \
  nvidia-container-toolkit-base libnvidia-container-tools \
  libnvidia-container1
Optional: Installation einer spezifischen Version des nvidia-container-toolkit

Optional kannst du eine bestimmte Version des nvidia-container-toolkit installieren, indem du die Umgebungsvariable NVIDIA_CONTAINER_TOOLKIT_VERSION setzt:

export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.17.8-1
sudo apt-get install -y \
  nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
  nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
  libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
  libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

NVIDIA-Runtime mit Docker überprüfen

Führe docker info | grep -i runtime aus, um sicherzustellen, dass nvidia in der Liste der Runtimes erscheint:

docker info | grep -i runtime

Installieren von Ultralytics Docker-Images

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

  • Dockerfile: GPU-Image, ideal für das Training.
  • Dockerfile-arm64: Für die ARM64-Architektur, geeignet für Geräte wie Raspberry Pi.
  • Dockerfile-cpu: CPU-only Version für Inferenz und Umgebungen ohne GPU.
  • Dockerfile-jetson-jetpack4: Optimiert für NVIDIA Jetson Geräte mit NVIDIA JetPack 4.
  • Dockerfile-jetson-jetpack5: Optimiert für NVIDIA Jetson Geräte mit NVIDIA JetPack 5.
  • Dockerfile-jetson-jetpack6: Optimiert für NVIDIA Jetson Geräte mit NVIDIA JetPack 6.
  • Dockerfile-jupyter: Für interaktive Entwicklung mit JupyterLab im Browser.
  • Dockerfile-nvidia-arm64: Für NVIDIA ARM64-Geräte wie Jetson AGX Thor und DGX Spark, unterstützt JetPack 7.0 und DGX OS.
  • Dockerfile-python: Minimale Python-Umgebung für leichtgewichtige Anwendungen.
  • Dockerfile-python-export: Minimales Python-Image, erweitert um vollständige Exportfunktionen für die YOLO-Modellkonvertierung.
  • Dockerfile-conda: Enthält Miniconda3 und das über Conda installierte Ultralytics-Paket.
  • Dockerfile-export: GPU-Image mit allen vorinstallierten Abhängigkeiten für Exportformate zur Modellkonvertierung und Benchmarking.

Um das neueste Image zu ziehen:

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

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

Ausführen von Ultralytics im Docker-Container

So führst du den Ultralytics Docker-Container aus:

Verwendung nur der CPU

# Run without GPU
sudo docker run -it --ipc=host $t

Verwendung von GPUs

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

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

Der -it Flag weist ein Pseudo-TTY zu und hält stdin offen, was dir die Interaktion mit dem Container ermöglicht. Der --ipc=host Flag ermöglicht das Teilen des IPC-Namespaces des Hosts, was für den gemeinsamen Speicher zwischen Prozessen unerlässlich ist. Der --gpus Flag erlaubt dem Container den Zugriff auf die GPUs des Hosts.

Hinweis zur Dateizugänglichkeit

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

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

Ersetze /path/on/host durch den Verzeichnispfad auf deinem lokalen Computer und /path/in/container durch den gewünschten Pfad innerhalb des Docker-Containers.

Dauerhaftes Speichern von Trainingsergebnissen

Trainingsergebnisse werden standardmäßig unter /ultralytics/runs/<task>/<name>/ innerhalb des Containers gespeichert. Ohne Einbindung eines Host-Verzeichnisses gehen die Ergebnisse verloren, wenn der Container entfernt wird.

Um Trainingsergebnisse dauerhaft zu speichern:

# Recommended: mount workspace and specify project path
sudo docker run --rm -it -v "$(pwd)":/w -w /w ultralytics/ultralytics:latest \
  yolo train model=yolo26n.pt data=coco8.yaml project=/w/runs

Dies speichert alle Trainingsergebnisse in ./runs auf deinem Host-Rechner.

Grafische Benutzeroberflächen (GUI) in einem Docker-Container ausführen

Hochgradig experimentell – Benutzer übernimmt alle Risiken

Die folgenden Anweisungen sind experimentell. Das Teilen eines X11-Sockets mit einem Docker-Container birgt potenzielle Sicherheitsrisiken. Daher wird 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 hauptsächlich zum Containerisieren von Hintergrundanwendungen und CLI-Programmen verwendet, kann aber auch grafische Programme ausführen. In der Linux-Welt handhaben zwei Haupt-Grafikserver die grafische Anzeige: X11 (auch bekannt als X Window System) und Wayland. Vor dem Start ist es wichtig zu bestimmen, welchen Grafikserver du aktuell verwendest. Führe diesen Befehl aus, um es herauszufinden:

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

Die Einrichtung und Konfiguration eines X11- oder Wayland-Display-Servers liegt außerhalb des Geltungsbereichs dieser Anleitung. Wenn der obige Befehl nichts zurückgibt, musst du zuerst sicherstellen, dass einer der beiden für dein System funktioniert, bevor du fortfährst.

Ausführen eines Docker-Containers mit einer GUI

Beispiel
Verwende GPUs

Wenn du GPUs verwendest, kannst du den --gpus all Flag zum Befehl hinzufügen.

Docker Runtime Flag

Wenn deine Docker-Installation nicht standardmäßig die nvidia Runtime verwendet, kannst du den --runtime=nvidia Flag zum Befehl hinzufügen.

Wenn du X11 verwendest, kannst du den folgenden Befehl ausführen, um dem Docker-Container den Zugriff auf den X11-Socket zu erlauben:

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 Umgebungsvariable DISPLAY auf das Display des Hosts, bindet den X11-Socket ein und ordnet die Datei .Xauthority dem Container zu. Der Befehl xhost +local:docker erlaubt dem Docker-Container den Zugriff auf den X11-Server.

Verwendung von Docker mit einer GUI

Jetzt kannst du grafische Anwendungen innerhalb deines Docker-Containers anzeigen. Zum Beispiel kannst du den folgenden CLI-Befehl ausführen, um die Vorhersagen eines YOLO26-Modells zu visualisieren:

yolo predict model=yolo26n.pt show=True
Testen

Ein einfacher Weg, um zu validieren, dass die Docker-Gruppe Zugriff auf den X11-Server hat, ist das Ausführen eines Containers mit einem GUI-Programm wie xclock oder xeyes. Alternativ kannst du diese Programme auch im Ultralytics Docker-Container installieren, um den Zugriff auf den X11-Server deines GNU-Linux-Display-Servers zu testen. Wenn du auf Probleme stößt, erwäge das Setzen der Umgebungsvariable -e QT_DEBUG_PLUGINS=1. Das Setzen dieser Umgebungsvariable ermöglicht die Ausgabe von Debugging-Informationen, was bei der Fehlersuche hilft.

Wenn du mit Docker GUI fertig bist

Zugriff widerrufen

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

xhost -local:docker
Möchtest du Bildresultate direkt im Terminal anzeigen?

Siehe die folgende Anleitung zum Anzeigen der Bildresultate über ein Terminal


Du bist nun bereit, Ultralytics mit Docker zu verwenden und seine Funktionen zu nutzen. Für alternative Installationsmethoden siehe die Ultralytics Schnellstart-Dokumentation.

FAQ

Wie richte ich Ultralytics mit Docker ein?

Um Ultralytics mit Docker einzurichten, stelle zuerst sicher, dass Docker auf deinem System installiert ist. Wenn du eine NVIDIA GPU hast, installiere das NVIDIA Container Toolkit, um 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

Für detaillierte Schritte siehe unsere Docker-Schnellstartanleitung.

Was sind die Vorteile der Verwendung von Ultralytics Docker-Images für Machine-Learning-Projekte?

Die Verwendung von Ultralytics Docker-Images gewährleistet eine konsistente Umgebung über verschiedene Maschinen hinweg, da die gleiche Software und die gleichen Abhängigkeiten repliziert werden. Dies ist besonders nützlich für die Zusammenarbeit in Teams, das Ausführen von Modellen auf verschiedener Hardware und die Aufrechterhaltung der Reproduzierbarkeit. Für GPU-basiertes Training bietet Ultralytics optimierte Docker-Images an, wie z.B. Dockerfile für die allgemeine GPU-Nutzung und Dockerfile-jetson für NVIDIA Jetson-Geräte. Entdecke den Ultralytics Docker Hub für weitere Details.

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

Stelle zuerst sicher, dass das NVIDIA Container Toolkit installiert und konfiguriert ist. Verwende dann den folgenden Befehl, um Ultralytics YOLO mit GPU-Unterstützung auszuführen:

sudo docker run -it --ipc=host --runtime=nvidia --gpus all ultralytics/ultralytics:latest # all GPUs

Dieser Befehl richtet einen Docker-Container mit GPU-Zugriff ein. Weitere Einzelheiten findest du in der Docker-Schnellstartanleitung.

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

Um YOLO-Vorhersageergebnisse mit einer GUI in einem Docker-Container zu visualisieren, musst du Docker den Zugriff auf deinen Display-Server erlauben. Für Systeme, die X11 ausführen, 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, die Wayland ausführen, 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 Grafische Benutzeroberflächen (GUI) in einem Docker-Container ausführen.

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

Ja, du kannst lokale Verzeichnisse mit dem -v Flag in den Ultralytics Docker-Container einbinden:

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

Ersetze /path/on/host durch das Verzeichnis auf deinem lokalen Computer und /path/in/container durch den gewünschten Pfad innerhalb des Containers. Diese Einrichtung ermöglicht es dir, innerhalb des Containers mit deinen lokalen Dateien zu arbeiten. Weitere Informationen findest du im Abschnitt Hinweis zur Dateizugänglichkeit.

Kommentare