Docker-Schnellstartanleitung für Ultralytics
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.
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-smiInstallation 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.listAktualisiere die Paketlisten und installiere das Paket nvidia-container-toolkit:
sudo apt-get updateInstalliere die neueste Version des nvidia-container-toolkit:
sudo apt-get install -y nvidia-container-toolkit \
nvidia-container-toolkit-base libnvidia-container-tools \
libnvidia-container1Optional: 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 dockerNVIDIA-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 runtimeInstallieren 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 $tAusfü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 $tVerwendung 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"' $tDer -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 $tErsetze /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/runsDies speichert alle Trainingsergebnisse in ./runs auf deinem Host-Rechner.
Grafische Benutzeroberflächen (GUI) in einem Docker-Container ausführen
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
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 $tDieser 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=TrueTesten
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
Vergiss in beiden Fällen nicht, den Zugriff der Docker-Gruppe zu widerrufen, wenn du fertig bist.
xhost -local:dockerMö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:latestFü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 GPUsDieser 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:latestFü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:latestWeitere 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:latestErsetze /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.