Link to this sectionDocker-Schnellstartanleitung für Ultralytics#
Dieser Leitfaden dient als umfassende Einführung in die Einrichtung einer Docker-Umgebung für deine Ultralytics-Projekte. Docker ist eine Plattform zum Entwickeln, Versenden und Ausführen von Anwendungen in Containern. Sie ist besonders vorteilhaft, 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.
Link to this sectionWas du lernen wirst#
- Docker mit NVIDIA-Unterstützung einrichten
- Ultralytics Docker-Images installieren
- 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
Watch: How to Get started with Docker | Usage of Ultralytics Python Package inside Docker live demo 🎉
Link to this sectionVoraussetzungen#
- 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 NVIDIA-Treiber installiert sind.
- Wenn du NVIDIA Jetson-Geräte verwendest, stelle sicher, dass die entsprechende JetPack-Version installiert ist. Weitere Informationen findest du im NVIDIA Jetson-Leitfaden.
Link to this sectionDocker mit NVIDIA-Unterstützung einrichten#
Überprüfe zunächst, ob die NVIDIA-Treiber ordnungsgemäß installiert sind, indem du Folgendes ausführst:
nvidia-smiLink to this sectionNVIDIA Container Toolkit installieren#
Installiere nun das NVIDIA Container Toolkit, 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: Installiere eine bestimmte Version des nvidia-container-toolkit
Optional kannst du eine bestimmte Version des nvidia-container-toolkit installieren, indem du die Umgebungsvariable NVIDIA_CONTAINER_TOOLKIT_VERSION festlegst:
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 dockerLink to this sectionÜberprüfe die NVIDIA-Laufzeitumgebung mit Docker#
Führe docker info | grep -i runtime aus, um sicherzustellen, dass nvidia in der Liste der Laufzeitumgebungen erscheint:
docker info | grep -i runtimeLink to this sectionUltralytics Docker-Images installieren#
Ultralytics bietet verschiedene Docker-Images an, die für unterschiedliche Plattformen und Anwendungsfälle optimiert sind:
- Dockerfile: GPU-Image, ideal für das Training.
- Dockerfile-arm64: Für ARM64-Architektur, geeignet für Geräte wie den Raspberry Pi.
- Dockerfile-cpu: Version nur mit CPU 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, mit Unterstützung für 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, bei dem alle Abhängigkeiten für Exportformate zur Modellkonvertierung und für Benchmarks vorinstalliert sind.
Um das neueste Image zu pullen:
# Set image name as a variable
t=ultralytics/ultralytics:latest
# Pull the latest Ultralytics image from Docker Hub
sudo docker pull $tLink to this sectionAusführen von Ultralytics in einem Docker-Container#
So führst du den Ultralytics Docker-Container aus:
Link to this sectionNur mit CPU#
# Run without GPU
sudo docker run -it --ipc=host $tLink to this sectionMit 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, sodass du mit dem Container interagieren kannst. Der --ipc=host-Flag ermöglicht die gemeinsame Nutzung des IPC-Namensraums des Hosts, was für das Teilen von Speicher zwischen Prozessen unerlässlich ist. Der --gpus-Flag ermöglicht dem Container den Zugriff auf die GPUs des Hosts.
Link to this sectionHinweis zur Dateizugänglichkeit#
Um mit Dateien auf deinem lokalen Computer innerhalb des Containers 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.
Link to this sectionTrainingsergebnisse persistent speichern#
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.
So speicherst du Trainingsergebnisse persistent:
# 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-Computer.
Link to this sectionGrafische 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 gibt es zwei Haupt-Grafikserver für 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 dieses Leitfadens. Wenn der obige Befehl nichts zurückgibt, musst du zuerst sicherstellen, dass einer der beiden für dein System funktioniert, bevor du fortfährst.
Link to this sectionEinen Docker-Container mit einer GUI ausführen#
GPUs verwenden
Wenn du GPUs verwendest, kannst du den --gpus all-Flag zum Befehl hinzufügen.
Docker-Runtime-Flag
Wenn deine Docker-Installation die nvidia-Runtime nicht standardmäßig 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 ermöglichen:
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 DISPLAY-Umgebungsvariable auf das Display des Hosts, bindet den X11-Socket ein und ordnet die .Xauthority-Datei dem Container zu. Der xhost +local:docker-Befehl erlaubt dem Docker-Container den Zugriff auf den X11-Server.
Link to this sectionDocker mit einer GUI verwenden#
Jetzt kannst du grafische Anwendungen in deinem Docker-Container anzeigen. Du kannst zum Beispiel 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, ziehe in Betracht, die Umgebungsvariable -e QT_DEBUG_PLUGINS=1 zu setzen. Das Setzen dieser Umgebungsvariable aktiviert die Ausgabe von Debugging-Informationen und hilft bei der Fehlerbehebung.
Link to this sectionWenn 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 Bild-Ergebnisse direkt im Terminal anzeigen?
Siehe dazu den folgenden Leitfaden zum Anzeigen der Bild-Ergebnisse über ein Terminal
Du bist nun bereit, Ultralytics mit Docker zu verwenden, und kannst dessen Funktionen voll ausschöpfen. Für alternative Installationsmethoden, siehe die Ultralytics-Schnellstartdokumentation.
Link to this sectionFAQ#
Link to this sectionWie 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 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:latestDetaillierte Schritte findest du in unserer Docker-Schnellstartanleitung.
Link to this sectionWas 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 auf verschiedenen Computern, indem dieselbe Software und dieselben 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 wie Dockerfile für die allgemeine GPU-Nutzung und Dockerfile-jetson für NVIDIA Jetson-Geräte. Entdecke Ultralytics Docker Hub für weitere Details.
Link to this sectionWie 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.
Link to this sectionWie 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 gestatten. Für Systeme mit X11 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.
Link to this sectionKann 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.